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

@ -1,6 +1,6 @@
Feature: Fixing broken config files Feature: Fixing broken config files
Scenario: Loading a file with journal Scenario: Loading a file with journal
Given we use the config "broken.json" Given we use the config "broken.json"
When we run "jrnl -n 2" When we run "jrnl -n 2"
Then we should see the message "Some errors in your jrnl config have been fixed for you." Then we should see the message "Some errors in your jrnl config have been fixed for you."

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],