On Dec 16, 2005, at 4:20 PM, Benji York wrote:
Gary zope/i18n/format.py:141 and 149

Yup: the pytz StaticTzInfo is being used in a non-API way, and while pickling works, unpickling doesn't (ew!).

Here's the interactive prompt example, if anyone cares.

>>> import pytz.tzinfo
>>> tz = pytz.tzinfo.StaticTzInfo()
>>> import pickle
>>> import datetime
>>> delta = datetime.timedelta(hours=-5)
>>> delta
datetime.timedelta(-1, 68400)
>>> tz._utcoffset = delta
>>> pickle.dumps(tz)
'cpytz\n_p\np0\n(Ntp1\nRp2\n.'
>>> pickle.loads(pickle.dumps(tz))
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
File "/home/gary/z4i/var/opt/python/lib/python2.4/pickle.py", line 1394, in loads
    return Unpickler(file).load()
File "/home/gary/z4i/var/opt/python/lib/python2.4/pickle.py", line 872, in load
    dispatch[key](self)
File "/home/gary/z4i/var/opt/python/lib/python2.4/pickle.py", line 1153, in load_reduce
    value = func(*args)
File "/home/gary/z4i/var/src/zope3/src/pytz/__init__.py", line 163, in _p
    return unpickler(*args)
File "/home/gary/z4i/var/src/zope3/src/pytz/tzinfo.py", line 340, in unpickler tz = pytz.timezone(zone) File "/home/gary/z4i/var/src/zope3/src/pytz/__init__.py", line 47, in timezone zone = _munge_zone(zone) File "/home/gary/z4i/var/src/zope3/src/pytz/__init__.py", line 71, in _munge_zone
    return zone.replace('+', '_plus_').replace('-', '_minus_')
AttributeError: 'NoneType' object has no attribute 'replace'

This is not pytz's fault: it wasn't designed to work the way that the format module is using it, as Stuart points out following Philipp's 'XXX'.

I think I can fix it by using the pytz.reference.FixedOffset class. That's what I'll try to do now.

Gary




_______________________________________________
Zope3-dev mailing list
Zope3-dev@zope.org
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com

Reply via email to