Fixed #10335: handle system locals unknown to Python in timezone name handling. Thanks, mitsuhiko.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10703 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
59507753c7
commit
60cfd45107
|
@ -1,6 +1,8 @@
|
||||||
import types
|
import types
|
||||||
import urllib
|
import urllib
|
||||||
|
import locale
|
||||||
import datetime
|
import datetime
|
||||||
|
import codecs
|
||||||
|
|
||||||
from django.utils.functional import Promise
|
from django.utils.functional import Promise
|
||||||
|
|
||||||
|
@ -136,3 +138,12 @@ def iri_to_uri(iri):
|
||||||
return iri
|
return iri
|
||||||
return urllib.quote(smart_str(iri), safe='/#%[]=:;$&()+,!?*')
|
return urllib.quote(smart_str(iri), safe='/#%[]=:;$&()+,!?*')
|
||||||
|
|
||||||
|
|
||||||
|
# The encoding of the default system locale but falls back to the
|
||||||
|
# given fallback encoding if the encoding is unsupported by python or could
|
||||||
|
# not be determined. See tickets #10335 and #5846
|
||||||
|
try:
|
||||||
|
DEFAULT_LOCALE_ENCODING = locale.getdefaultlocale()[1] or 'ascii'
|
||||||
|
codecs.lookup(DEFAULT_LOCALE_ENCODING)
|
||||||
|
except:
|
||||||
|
DEFAULT_LOCALE_ENCODING = 'ascii'
|
||||||
|
|
|
@ -1,15 +1,8 @@
|
||||||
"Implementation of tzinfo classes for use with datetime.datetime."
|
"Implementation of tzinfo classes for use with datetime.datetime."
|
||||||
|
|
||||||
import locale
|
|
||||||
import time
|
import time
|
||||||
from datetime import timedelta, tzinfo
|
from datetime import timedelta, tzinfo
|
||||||
from django.utils.encoding import smart_unicode
|
from django.utils.encoding import smart_unicode, smart_str, DEFAULT_LOCALE_ENCODING
|
||||||
|
|
||||||
try:
|
|
||||||
DEFAULT_ENCODING = locale.getdefaultlocale()[1] or 'ascii'
|
|
||||||
except:
|
|
||||||
# Any problems at all determining the locale and we fallback. See #5846.
|
|
||||||
DEFAULT_ENCODING = 'ascii'
|
|
||||||
|
|
||||||
class FixedOffset(tzinfo):
|
class FixedOffset(tzinfo):
|
||||||
"Fixed offset in minutes east from UTC."
|
"Fixed offset in minutes east from UTC."
|
||||||
|
@ -41,7 +34,7 @@ class LocalTimezone(tzinfo):
|
||||||
self._tzname = self.tzname(dt)
|
self._tzname = self.tzname(dt)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return self._tzname
|
return smart_str(self._tzname)
|
||||||
|
|
||||||
def utcoffset(self, dt):
|
def utcoffset(self, dt):
|
||||||
if self._isdst(dt):
|
if self._isdst(dt):
|
||||||
|
@ -57,7 +50,8 @@ class LocalTimezone(tzinfo):
|
||||||
|
|
||||||
def tzname(self, dt):
|
def tzname(self, dt):
|
||||||
try:
|
try:
|
||||||
return smart_unicode(time.tzname[self._isdst(dt)], DEFAULT_ENCODING)
|
return smart_unicode(time.tzname[self._isdst(dt)],
|
||||||
|
DEFAULT_LOCALE_ENCODING)
|
||||||
except UnicodeDecodeError:
|
except UnicodeDecodeError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue