Merge pull request #130 from MinchinWeb/update-tzlocal

Update tzlocal
This commit is contained in:
Manuel Ebert 2014-01-29 16:49:14 -08:00
commit 5dca96d0dd
11 changed files with 16 additions and 34 deletions

4
.gitignore vendored
View file

@ -33,3 +33,7 @@ obj
*.pyproj *.pyproj
*.sln *.sln
*.suo *.suo
# virtaulenv
env/
env*/

View file

@ -4,7 +4,8 @@ python:
- "2.7" - "2.7"
- "3.3" - "3.3"
install: install:
- "pip install -q -r requirements.txt --use-mirrors" - "pip install -e . --use-mirrors"
- "pip install pycrypto>=2.6 --use-mirrors"
- "pip install -q behave" - "pip install -q behave"
# command to run tests # command to run tests
script: script:

View file

@ -8,7 +8,7 @@ Changelog
* __1.7.8__ Upgrade to parsedatetime 1.2 * __1.7.8__ Upgrade to parsedatetime 1.2
* __1.7.7__ Cleaned up imports, better unicode support * __1.7.7__ Cleaned up imports, better unicode support
* __1.7.6__ Python 3 port for slugify * __1.7.6__ Python 3 port for slugify
* __1.7.5__ Colorama is only needed on windows. Smaller fixes * __1.7.5__ Colorama is only needed on Windows. Smaller fixes
* __1.7.3__ Touches temporary files before opening them to allow more external editors. * __1.7.3__ Touches temporary files before opening them to allow more external editors.
* __1.7.2__ Dateutil added to requirements. * __1.7.2__ Dateutil added to requirements.
* __1.7.1__ Fixes issues with parsing time information in entries. * __1.7.1__ Fixes issues with parsing time information in entries.

View file

@ -13,7 +13,7 @@ Feature: DayOne Ingetration
2013-07-17 11:38 This entry is starred! 2013-07-17 11:38 This entry is starred!
""" """
Scenario: Entries without timezone information will be intepreted in the current timezone Scenario: Entries without timezone information will be interpreted as in the current timezone
Given we use the config "dayone.json" Given we use the config "dayone.json"
When we run "jrnl -until 'feb 2013'" When we run "jrnl -until 'feb 2013'"
Then we should get no error Then we should get no error

View file

@ -1,4 +1,4 @@
Feature: Expoting a Journal Feature: Exporting a Journal
Scenario: Exporting to json Scenario: Exporting to json
Given we use the config "tags.json" Given we use the config "tags.json"

View file

@ -11,6 +11,7 @@ try:
from io import StringIO from io import StringIO
except ImportError: except ImportError:
from cStringIO import StringIO from cStringIO import StringIO
import tzlocal
def _parse_args(command): def _parse_args(command):
nargs=[] nargs=[]
@ -120,7 +121,7 @@ def check_output(context):
@then('the output should contain "{text}" in the local time') @then('the output should contain "{text}" in the local time')
def check_output_time_inline(context, text): def check_output_time_inline(context, text):
out = context.stdout_capture.getvalue() out = context.stdout_capture.getvalue()
local_tz = pytz.timezone(util.get_local_timezone()) local_tz = tzlocal.get_localzone()
utc_time = date_parser.parse(text) utc_time = date_parser.parse(text)
date = utc_time + local_tz._utcoffset date = utc_time + local_tz._utcoffset
local_date = date.strftime("%Y-%m-%d %H:%M") local_date = date.strftime("%Y-%m-%d %H:%M")

View file

@ -23,6 +23,7 @@ import hashlib
import plistlib import plistlib
import pytz import pytz
import uuid import uuid
import tzlocal
class Journal(object): class Journal(object):
def __init__(self, name='default', **kwargs): def __init__(self, name='default', **kwargs):
@ -333,7 +334,7 @@ class DayOne(Journal):
try: try:
timezone = pytz.timezone(dict_entry['Time Zone']) timezone = pytz.timezone(dict_entry['Time Zone'])
except (KeyError, pytz.exceptions.UnknownTimeZoneError): except (KeyError, pytz.exceptions.UnknownTimeZoneError):
timezone = pytz.timezone(util.get_local_timezone()) timezone = tzlocal.get_localzone()
date = dict_entry['Creation Date'] date = dict_entry['Creation Date']
date = date + timezone.utcoffset(date) date = date + timezone.utcoffset(date)
raw = dict_entry['Entry Text'] raw = dict_entry['Entry Text']
@ -357,7 +358,7 @@ class DayOne(Journal):
'Creation Date': utc_time, 'Creation Date': utc_time,
'Starred': entry.starred if hasattr(entry, 'starred') else False, 'Starred': entry.starred if hasattr(entry, 'starred') else False,
'Entry Text': entry.title+"\n"+entry.body, 'Entry Text': entry.title+"\n"+entry.body,
'Time Zone': util.get_local_timezone(), 'Time Zone': str(tzlocal.get_localzone()),
'UUID': entry.uuid, 'UUID': entry.uuid,
'Tags': [tag.strip(self.config['tagsymbols']) for tag in entry.tags] 'Tags': [tag.strip(self.config['tagsymbols']) for tag in entry.tags]
} }

View file

@ -88,24 +88,6 @@ def yesno(prompt, default=True):
raw = py23_input(prompt) raw = py23_input(prompt)
return {'y': True, 'n': False}.get(raw.lower(), default) return {'y': True, 'n': False}.get(raw.lower(), default)
def get_local_timezone():
"""Returns the Olson identifier of the local timezone.
In a happy world, tzlocal.get_localzone would do this, but there's a bug on OS X
that prevents that right now: https://github.com/regebro/tzlocal/issues/6"""
global __cached_tz
if not __cached_tz and "darwin" in sys.platform:
__cached_tz = os.popen("systemsetup -gettimezone").read().replace("Time Zone: ", "").strip()
if not __cached_tz or __cached_tz not in pytz.all_timezones_set:
link = os.readlink("/etc/localtime")
# This is something like /usr/share/zoneinfo/America/Los_Angeles.
# Find second / from right and take the substring
__cached_tz = link[link.rfind('/', 0, link.rfind('/'))+1:]
elif not __cached_tz:
__cached_tz = str(get_localzone())
if not __cached_tz or __cached_tz not in pytz.all_timezones_set:
__cached_tz = "UTC"
return __cached_tz
def load_and_fix_json(json_path): def load_and_fix_json(json_path):
"""Tries to load a json object from a file. """Tries to load a json object from a file.
If that fails, tries to fix common errors (no or extra , at end of the line). If that fails, tries to fix common errors (no or extra , at end of the line).

View file

@ -1,7 +0,0 @@
parsedatetime >= 1.2
pytz >= 2013b
pycrypto >= 2.6
argparse==1.2.1
tzlocal == 1.0
keyring==3.0.5
python-dateutil==2.2

View file

@ -72,7 +72,7 @@ setup(
install_requires = [ install_requires = [
"parsedatetime>=1.2", "parsedatetime>=1.2",
"pytz>=2013b", "pytz>=2013b",
"tzlocal==1.0", "tzlocal>=1.1",
"keyring>=3.3", "keyring>=3.3",
"python-dateutil>=2.2" "python-dateutil>=2.2"
] + [p for p, cond in conditional_dependencies.items() if cond], ] + [p for p, cond in conditional_dependencies.items() if cond],