#10335: tzinfo.py should use getdefaultencoding instead of getdefaultlocale[1] -------------------------------------+-------------------------------------- Reporter: gthb | Owner: nobody Status: new | Milestone: 1.1 Component: Core framework | Version: 1.0 Resolution: | Keywords: locale encoding getdefaultlocale getdefaultencoding mac Stage: Accepted | Has_patch: 1 Needs_docs: 0 | Needs_tests: 0 Needs_better_patch: 0 | -------------------------------------+-------------------------------------- Comment (by gthb):
Sorry for the late reply, I hadn't set up an email address for notifications. In response to mtredinnick: good point about {{{setdefaultencoding}}}, I didn't know that. A few notes: 1. The above patch (second one) only calls {{{getdefaultencoding}}}, and it does so only if the present implementation fails in a way that will break Django. The {{{setdefaultencoding}}} call would be made consciously by the user as a workaround, only upon encountering this problem, and they will only encounter it if {{{ascii}}} is not good enough. 2. Based on a quick grep, this {{{DEFAULT_ENCODING}}} is used in only one place in all of Django, in this same file: {{{ #!python return smart_unicode(time.tzname[self._isdst(dt)], DEFAULT_ENCODING) }}} Standard timezone names are probably all representable in {{{ascii}}} anyway, so maybe {{{ascii}}} is good enough here. I suppose {{{DEFAULT_ENCODING}}} (or timezones) must have been used in more places when I ran into this some weeks ago, because Django broke right away, but now it breaks only when I add something involving timezones. I now reproduce it with a view that does this: {{{ #!python from django.utils.tzinfo import LocalTimezone from datetime import datetime LocalTimezone(datetime.now()) }}} So maybe it is enough to settle for {{{ascii}}}, when the default locale method fails or returns a bogus encoding. 3. I will attach a third, even more conservative patch, that just adds the codec lookup within the first try block. The trouble with Mac OS X in the Icelandic locale is that {{{locale.getdefaultlocale()[1]}}} ''does not raise an exception'' but instead just returns an encoding name that will result in an exception ''later'' when used. This most minimal patch just makes the failure come up right away, so that the {{{except}}} block deals with it. This way the comment "Any problems at all determining the locale and we fallback" is made more true, with no other effects. 4. On correctness: the premise "since the user's system is set up to return their preference" assumes too much. My locale preference for the overall OS is not necessarily my locale preference for Django. In the case of Mac OS X I don't get to separate the two because of the hardcoding explained above. And if my preference is a locale with a Mac-specific encoding not recognized by Python (such as the Icelandic locale), then that triggers a serious problem in {{{django.utils.tzinfo}}}. The problem is not that ''Django'' doesn't understand the answer, but that ''Python itself'' doesn't. This problem can be worked around with one of the options I propose here. -- Ticket URL: <http://code.djangoproject.com/ticket/10335#comment:5> Django <http://code.djangoproject.com/> The Web framework for perfectionists with deadlines. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django updates" group. To post to this group, send email to django-updates@googlegroups.com To unsubscribe from this group, send email to django-updates+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-updates?hl=en -~----------~----~----~----~------~----~------~--~---