Patches item #1483018, was opened at 2006-05-06 08:19
Message generated for change (Comment added) made by russf
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=540674&aid=1483018&group_id=74338
Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: None
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Russ Ferriday (russf)
Assigned to: Nobody/Anonymous (nobody)
Summary: Play nicely with mxDateTime
Initial Comment:
Related to version:
===========
URL: http://svn.colorstudy.com/SQLObject/trunk
Repository UUID: 95a46c32-92d2-0310-94a5-8d71aeb3d4b3
Revision: 1748
Fixes problem:
=========
File "/usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py", line 63, in ?
TimeType = type(DateTime.Time())
AttributeError: 'module' object has no attribute 'Time'
Description:
========
I'm using SQLObject with Zope and Python 2.4.
Path to Time is longer than the original code was expecting. And it
needs a param - DateTime.
Patch:
====
--- col.py.orig 2006-05-05 19:30:39.000000000 +0100
+++ col.py 2006-05-06 16:02:33.000000000 +0100
@@ -60,7 +60,7 @@
if mxdatetime_available:
DateTimeType = type(DateTime.now())
- TimeType = type(DateTime.Time())
+ TimeType = type(DateTime.DateTime.Time(DateTime.DateTime()))
if datetime_available:
default_datetime_implementation = DATETIME_IMPLEMENTATION
----------------------------------------------------------------------
>Comment By: Russ Ferriday (russf)
Date: 2006-05-18 10:47
Message:
Logged In: YES
user_id=478441
OK. I'll follow up on that, and get back in a day or two.
----------------------------------------------------------------------
Comment By: Oleg Broytmann (phd)
Date: 2006-05-18 10:39
Message:
Logged In: YES
user_id=4799
Your patch certainly breaks old mx DateTime, so you should
extend the patch to distinguish old mxDateTime (without mx
top-level package) and non-mx DateTime from Zope.
IWBN if you can also run test suite or at least
test_datetime.py. The test suite requires py.test framework.
----------------------------------------------------------------------
Comment By: Russ Ferriday (russf)
Date: 2006-05-18 10:21
Message:
Logged In: YES
user_id=478441
Thanks for your patience, Oleg, Ian,
> Does the confusion here have something to do with Zope's
> DateTime module being confused for mx.DateTime?
Digging deeper, yes it does.
It's Zope's DateTime.py that ends up being imported.
(Pdb) print sys.modules['DateTime']
<module 'DateTime' from
'/usr/local/zope/zope/lib/python/DateTime/
__init__.pyc'>
When I add that kludge as shown in the original patch, Zope and SQLObject
work fine together, as far as it goes. And I'm using DateTimeCol in several
tables without issues.
I'm open to suggestions as how to best handle this. Any more thoughts?
----------------------------------------------------------------------
Comment By: Ian Bicking (ianbicking)
Date: 2006-05-18 10:07
Message:
Logged In: YES
user_id=210337
Does the confusion here have something to do with Zope's
DateTime module being confused for mx.DateTime? I don't
think we support Zope's DateTime at all; adding support for
that would be separate, though I think mx.DateTime is
usually available where Zope's DateTime is also available.
Anyway, on some level this is definitely a problem with
imports, not with the code. "DateTime" is meant to be the
mx DateTime module, which contains "now", etc.; if it
doesn't contain that, then the import is wrong, not the code.
----------------------------------------------------------------------
Comment By: Russ Ferriday (russf)
Date: 2006-05-18 10:01
Message:
Logged In: YES
user_id=478441
Yes, it helps as far as line 63 when I get this:
File "/usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py", line 63, in ?
DateTimeType = type(DateTime.now())
AttributeError: class DateTime has no attribute 'now'
----------------------------------------------------------------------
Comment By: Oleg Broytmann (phd)
Date: 2006-05-18 09:45
Message:
Logged In: YES
user_id=4799
Can you instead of your fix replace the line 50
import DateTime
with
from DateTime import DateTime
and test if this helps?
----------------------------------------------------------------------
Comment By: Russ Ferriday (russf)
Date: 2006-05-18 09:14
Message:
Logged In: YES
user_id=478441
Thanks for looking at this.
OK, so at my command line, explicitly using the same python:
/usr/local/zope/python/bin/python
Python 2.4.2 (#1, Mar 28 2006, 15:06:21)
[GCC 4.0.0 20041026 (Apple Computer, Inc. build 4061)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import DateTime
Traceback (most recent call last):
File "<stdin>", line 1, in ?
ImportError: No module named DateTime
We see that DateTime is not importable.
But this is not relevant to the case when I'm running in zope.
This is where pdb comes into its own. I think this adventure is self
explanatory:
/usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(39)?()
-> try:
(Pdb) l
34 from util.backports import count
35
36 NoDefault = sqlbuilder.NoDefault
37 True, False = 1==1, 0==1
38 import pdb; pdb.set_trace()
39 -> try:
40 import datetime
41 except ImportError: # Python 2.2
42 datetime_available = False
43 else:
44 datetime_available = True
(Pdb) import datetime
(Pdb) n
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(40)?()
-> import datetime
(Pdb) n
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(44)?()
-> datetime_available = True
(Pdb) l
39 try:
40 import datetime
41 except ImportError: # Python 2.2
42 datetime_available = False
43 else:
44 -> datetime_available = True
45
46 try:
47 from mx import DateTime
48 except ImportError:
49 try:
(Pdb) n
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(46)?()
-> try:
(Pdb) l
41 except ImportError: # Python 2.2
42 datetime_available = False
43 else:
44 datetime_available = True
45
46 -> try:
47 from mx import DateTime
48 except ImportError:
49 try:
50 import DateTime # old version of mxDateTime
51 except ImportError:
(Pdb) from mx import DateTime
*** ImportError: No module named mx
(Pdb) import DateTime
(Pdb) n
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(47)?()
-> from mx import DateTime
(Pdb) n
ImportError: 'No module named mx'
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(47)?()
-> from mx import DateTime
(Pdb) s
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(48)?()
-> except ImportError:
(Pdb) s
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(49)?()
-> try:
(Pdb) l
44 datetime_available = True
45
46 try:
47 from mx import DateTime
48 except ImportError:
49 -> try:
50 import DateTime # old version of mxDateTime
51 except ImportError:
52 mxdatetime_available = False
53 else:
54 mxdatetime_available = True
(Pdb) n
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(50)?()
-> import DateTime # old version of mxDateTime
(Pdb) n
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(54)?()
-> mxdatetime_available = True
(Pdb) n
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(58)?()
-> DATETIME_IMPLEMENTATION = "datetime"
(Pdb) l
53 else:
54 mxdatetime_available = True
55 else:
56 mxdatetime_available = True
57
58 -> DATETIME_IMPLEMENTATION = "datetime"
59 MXDATETIME_IMPLEMENTATION = "mxDateTime"
60
61 if mxdatetime_available:
62 DateTimeType = type(DateTime.now())
63 TimeType = type(DateTime.DateTime.Time(DateTime.DateTime()))
(Pdb) n
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(59)?()
-> MXDATETIME_IMPLEMENTATION = "mxDateTime"
(Pdb) n
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(61)?()
-> if mxdatetime_available:
(Pdb) l
56 mxdatetime_available = True
57
58 DATETIME_IMPLEMENTATION = "datetime"
59 MXDATETIME_IMPLEMENTATION = "mxDateTime"
60
61 -> if mxdatetime_available:
62 DateTimeType = type(DateTime.now())
63 TimeType = type(DateTime.DateTime.Time(DateTime.DateTime()))
64
65 if datetime_available:
66 default_datetime_implementation = DATETIME_IMPLEMENTATION
(Pdb) n
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(62)?()
-> DateTimeType = type(DateTime.now())
(Pdb) n
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(63)?()
-> TimeType = type(DateTime.DateTime.Time(DateTime.DateTime()))
(Pdb) n
> /usr/local/zope/python/lib/python2.4/site-packages/
SQLObject-0.8dev_r1746-py2.4.egg/sqlobject/col.py(65)?()
-> if datetime_available:
...
(Pdb) print sys.modules['DateTime']
<module 'DateTime' from '/usr/local/zope/zope/lib/python/DateTime/
__init__.pyc'>
(Pdb)
As you can see, in this context the changes give a valid Time Type, and
SQLObject runs nicely. Without the changes, I get the message in the original
post.
I think my title was very misleading. What I'm actually doing is accomodating
the "old" DateTime module, as mentioned on line 50.
Is there some middle ground to make it possible to run SQLObject in Zope
without patches?
----------------------------------------------------------------------
Comment By: Oleg Broytmann (phd)
Date: 2006-05-18 08:03
Message:
Logged In: YES
user_id=4799
The patch is invalid. Try this from the command line:
> python
Python 2.4.3 (#2, Apr 4 2006, 23:50:10)
[GCC 3.3.5 (Debian 1:3.3.5-13)] on linux2
Type "help", "copyright", "credits" or "license" for more
information.
>>> from mx import DateTime
>>> print type(DateTime.Time())
<type 'DateTimeDelta'>
>>> print type(DateTime.DateTime.Time(DateTime.DateTime()))
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AttributeError: 'builtin_function_or_method' object has no
attribute 'Time'
----------------------------------------------------------------------
You can respond by visiting:
https://sourceforge.net/tracker/?func=detail&atid=540674&aid=1483018&group_id=74338
|