Re: [Zope-dev] Calendar tag 0.9.6 breaks with 2.2.0b3??
Dr. Ross Lazarus writes:
Trying the new 2.2.0b3 zope. One zclass using ty's calendar tag now breaks with an error message I just cannot figure out -
Error Type: TypeError Error Value: unexpected keyword argument: linkDate
File /usr/local/zope/zope22b3/lib/python/DocumentTemplate/DT_Util.py, line 262, in namespace TypeError: (see above)
I added __allow_access_to_unprotected_subobjects__=1 to the CalendarTag class just in case.
The offending line in CalendarTag.py is
ns = namespace(self, date = date, mode = self.mode, firstday = firstday, setCalendar = self.setCalendar_, getCalendar = self.getCalendar_, linkDate = self.linkDate_ )[0]
namespace in DT_Util seems harmless enough -
def namespace(self, **kw): """Create a tuple consisting of a single instance whos attributes are provided as keyword arguments.""" return apply(self, (), kw) The "self", more precisely, its "__call__" gets the keyword "linkDate" which it does not (no longer) likes to have.
Dieter
Thanks for the help. Summary: CalendarTag works fine in 2.1.6 but is broken in 2.20b3. __call__ is mapped to render(self,md) - this is the same for all dtml tags AFAIK. The point that I find hard to understand is that namespace in DT_Util has changed from 2.1.6 as follows ===========2.1.6================== class namespace_: pass def namespace(self, **kw): """Create a tuple consisting of a single instance whos attributes are provided as keyword arguments.""" r=namespace_() d=r.__dict__ for k, v in kw.items(): d[k]=v return r, ========2.2.0b3============ class namespace_: __allow_access_to_unprotected_subobjects__=1 def namespace(self, **kw): """Create a tuple consisting of a single instance whos attributes are provided as keyword arguments.""" return apply(self, (), kw) Now, I can easily put the old definition back and it might work - but I'm not in a position to understand why the method has changed from what looks like a simple dictionary construction to the apply function - which doesn't seem to have anything to do with the namespace_ class !! Brian?? Dieter Maurer wrote:
The "self", more precisely, its "__call__" gets the keyword "linkDate" which it does not (no longer) likes to have.
Dr. Ross Lazarus writes:
Trying the new 2.2.0b3 zope. One zclass using ty's calendar tag now breaks with an error message I just cannot figure out -
Error Type: TypeError Error Value: unexpected keyword argument: linkDate
File /usr/local/zope/zope22b3/lib/python/DocumentTemplate/DT_Util.py, line 262, in namespace TypeError: (see above)
I added __allow_access_to_unprotected_subobjects__=1 to the CalendarTag class just in case.
The offending line in CalendarTag.py is
ns = namespace(self, date = date, mode = self.mode, firstday = firstday, setCalendar = self.setCalendar_, getCalendar = self.getCalendar_, linkDate = self.linkDate_ )[0]
namespace in DT_Util seems harmless enough -
def namespace(self, **kw): """Create a tuple consisting of a single instance whos attributes are provided as keyword arguments.""" return apply(self, (), kw) The "self", more precisely, its "__call__" gets the keyword "linkDate" which it does not (no longer) likes to have.
Dieter
"Dr. Ross Lazarus" wrote:
The point that I find hard to understand is that namespace in DT_Util has changed from 2.1.6 as follows
===========2.1.6================== class namespace_: pass
def namespace(self, **kw): """Create a tuple consisting of a single instance whos attributes are provided as keyword arguments.""" r=namespace_() d=r.__dict__ for k, v in kw.items(): d[k]=v return r,
========2.2.0b3============ class namespace_: __allow_access_to_unprotected_subobjects__=1
def namespace(self, **kw): """Create a tuple consisting of a single instance whos attributes are provided as keyword arguments.""" return apply(self, (), kw)
Now, I can easily put the old definition back and it might work - but I'm not in a position to understand why the method has changed from what looks like a simple dictionary construction to the apply function - which doesn't seem to have anything to do with the namespace_ class !!
In Zope 2.1.6 and before we had two ways of creating a new namespace: _() and _.namespace(). The former was implemented in C and the latter was in Python, but they did virtually the same thing (and there certainly wasn't any reason to believe they should do anything different.) So we merged the two implementations into one by causing the namespace() method to call the _() method, implemented in cDocumentTemplate.py. AFAIK the namespace_ class definition was left in by accident. It now does absolutely nothing. There have been more problems with the merge than expected. But we are engineers--the last thing we want is code bloat by reverting to the old method. Instead we'd like to get bugs truly corrected. So I'll plan to look into this problem. Shane
"Dr. Ross Lazarus" wrote:
The offending line in CalendarTag.py is
ns = namespace(self, date = date, mode = self.mode, firstday = firstday, setCalendar = self.setCalendar_, getCalendar = self.getCalendar_, linkDate = self.linkDate_ )[0]
I haven't tried this, but I think if you change the "self" argument in the namespace() call from CalendarTag to "md", the problem will be resolved. I think that's what Ty meant to do, but the old mechanism didn't care; it didn't even look at the first argument. In other words:
ns = namespace(md, date = date, mode = self.mode, firstday = firstday, setCalendar = self.setCalendar_, getCalendar = self.getCalendar_, linkDate = self.linkDate_ )[0]
Of course, it's kinda crazy for me to be sending out untested patches to other people's work. :-) But if this works, it will also be backwards-compatible. Shane
participants (3)
-
Dieter Maurer -
Dr. Ross Lazarus -
Shane Hathaway