diff options
author | Armin Ronacher <armin.ronacher@active-4.com> | 2013-07-24 14:57:03 +0200 |
---|---|---|
committer | Armin Ronacher <armin.ronacher@active-4.com> | 2013-07-24 14:57:03 +0200 |
commit | 1f67eab0d5fa54d031aecb1ceff894e8e497bec9 (patch) | |
tree | 7bbc90f8f5f0495d17f31dff05aaec78c6d10467 | |
parent | 507dba513f6ace2ba8dce78df1dc6cda990e12c7 (diff) | |
download | babel-1f67eab0d5fa54d031aecb1ceff894e8e497bec9.tar.gz |
Added authors file
-rw-r--r-- | AUTHORS | 23 | ||||
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | LICENSE (renamed from COPYING) | 3 | ||||
-rw-r--r-- | babel/localtime/_unix.py | 30 |
4 files changed, 53 insertions, 5 deletions
@@ -0,0 +1,23 @@ +Babel is written and maintained by the Babel team and various contributors: + +Maintainer and Current Project Lead: + +- Armin Ronacher <armin.ronacher@active-4.com> + +Contributors: + +- Christopher Lenz <cmlenz@gmail.com> +- Alex Morega <alex@grep.ro> +- Felix Schwarz <felix.schwarz@oss.schwarz.eu> +- Pedro Algarvio <pedro@algarvio.me> +- Jeroen Ruigrok van der Werven <asmodai@in-nomine.org> +- Philip Jenvey <pjenvey@underboss.org> +- Tobias Bieniek <Tobias.Bieniek@gmx.de> +- Jonas Borgström <jonas@edgewall.org> +- Daniel Neuhäuser <dasdasich@gmail.com> +- Nick Retallack <nick@bitcasa.com> +- Thomas Waldmann <tw@waldmann-edv.de> + +Babel was previously developed under the Copyright of Edgewall Software. The +following copyright notice holds true for releases before 2013: "Copyright (c) +2007 - 2011 by Edgewall Software" @@ -1,6 +1,4 @@ Version 1.0 -http://svn.edgewall.org/repos/babel/tags/1.0.0/ -(? ? 2013 from trunk) * support python 2.6, 2.7, 3.3+ and pypy - drop all other versions * use tox for testing on different pythons @@ -1,4 +1,5 @@ -Copyright (C) 2007-2011 Edgewall Software +Copyright (C) 2013 by the Babel Team, see AUTHORS for more information. + All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/babel/localtime/_unix.py b/babel/localtime/_unix.py index b002c18..b4a3b59 100644 --- a/babel/localtime/_unix.py +++ b/babel/localtime/_unix.py @@ -1,7 +1,11 @@ from __future__ import with_statement import os import re +import sys import pytz +import subprocess + +_systemconfig_tz = re.compile(r'^Time Zone: (.*)$(?m)') def _tz_from_env(tzenv): @@ -30,7 +34,8 @@ def _get_localzone(_root='/'): name is unknown. The parameter _root makes the function look for files like /etc/localtime beneath the _root directory. This is primarily used by the tests. - In normal usage you call the function without parameters.""" + In normal usage you call the function without parameters. + """ tzenv = os.environ.get('TZ') if tzenv: @@ -52,6 +57,26 @@ def _get_localzone(_root='/'): except pytz.UnknownTimeZoneError: pass + # If we are on OS X now we are pretty sure that the rest of the + # code will fail and just fall through until it hits the reading + # of /etc/localtime and using it without name. At this point we + # can invoke systemconfig which internally invokes ICU. ICU itself + # does the same thing we do (readlink + compare file contents) but + # since it knows where the zone files are that should be a bit + # better than reimplementing the logic here. + if sys.platform == 'darwin': + c = subprocess.Popen(['systemsetup', '-gettimezone'], + stdout=subprocess.PIPE) + sys_result = c.communicate()[0] + c.wait() + tz_match = _systemconfig_tz.search(sys_result) + if tz_match is not None: + zone_name = tz_match.group(1) + try: + return pytz.timezone(zone_name) + except pytz.UnknownTimeZoneError: + pass + # Now look for distribution specific configuration files # that contain the timezone name. tzpath = os.path.join(_root, 'etc/timezone') @@ -59,7 +84,7 @@ def _get_localzone(_root='/'): with open(tzpath, 'rb') as tzfile: data = tzfile.read() - # Issue #3 was that /etc/timezone was a zoneinfo file. + # Issue #3 in tzlocal was that /etc/timezone was a zoneinfo file. # That's a misconfiguration, but we need to handle it gracefully: if data[:5] != 'TZif2': etctz = data.strip().decode() @@ -105,6 +130,7 @@ def _get_localzone(_root='/'): if not os.path.exists(tzpath): continue + with open(tzpath, 'rb') as tzfile: return pytz.tzfile.build_tzinfo('local', tzfile) |