Hello,
I posted this some days ago on zope-ptk and zope-dev mailing list,
but got no response, so I thought I've sent it to the wrong mailing list,
here is waht happens, and a possible solution  :-)
 
I had a strange problem when trying out LoginManager v0.8.8b1 with the latest cvs 
Checkout (as of Oct.23),
 here is the traceback trying to add a LoginManager (The form didn't show up):

Error Type: NameError
Error Value: path
...
Traceback (innermost last):
  File /usr/local/tmp/Zope2/lib/python/ZPublisher/Publish.py, line 222, in 
publish_module
  File /usr/local/tmp/Zope2/lib/python/ZPublisher/Publish.py, line 187, in publish
  File /usr/local/tmp/Zope2/lib/python/Zope/__init__.py, line 221, in 
zpublisher_exception_hook
  File /usr/local/tmp/Zope2/lib/python/ZPublisher/Publish.py, line 171, in publish
  File /usr/local/tmp/Zope2/lib/python/ZPublisher/mapply.py, line 160, in mapply
    (Object: addLoginManager)
  File /usr/local/tmp/Zope2/lib/python/ZPublisher/Publish.py, line 112, in call_object
    (Object: addLoginManager)
  File /usr/local/tmp/Zope2/lib/python/App/special_dtml.py, line 120, in __call__
    (Object: addLoginManager)
    (Info: /usr/local/tmp/Zope2/lib/python/Products/LoginManager/addLoginManager.dtml)
  File /usr/local/tmp/Zope2/lib/python/DocumentTemplate/DT_String.py, line 528, in 
__call__
    (Object: addLoginManager)
  File /usr/local/tmp/Zope2/lib/python/DocumentTemplate/DT_In.py, line 633, in 
renderwob
    (Object: UserSourcesMetaTypes(this()))
  File /usr/local/tmp/Zope2/lib/python/DocumentTemplate/DT_Util.py, line 331, in eval
    (Object: UserSourcesMetaTypes(this()))
    (Info: UserSourcesMetaTypes)
  File /usr/local/tmp/Zope2/lib/python/ZPublisher/HTTPRequest.py, line 772, in 
__getitem__
NameError: (see above)

after looking at the LM code I found that the manage_addLoginManagerForm is defined 
in LoginManager.py:
...
manage_addLoginManagerForm = HTMLFile('addLoginManager', globals(),
    UserSourcesMetaTypes = PlugInFinder(LoginManager.UserSourcesGroup),
    LoginMethodsMetaTypes = PlugInFinder(LoginManager.LoginMethodsGroup))
...


At first I thought it could have been a LM problem, removing 
UserSourcesMetaTypes(this()) let
the form appear, but when I focused on the UserSourcesMetaTypes work, and how the user 
sources
PlugIns get installed I found nothing (It was actually my first test with LM & 
ZPatterns), moreover
there was no mention of such problems by anyone else on the Mailing Lists.

Then I tried to it on a Zope 2.2.0 (released) and it worked fine adding the LM.
So it should have been something with my Zope CVS checkout, when looked at the 
HTTPRequest.py
file at the line shown in the Traceback, i found a possible error with "__getitem__"
When it tries to return the value of UserSourcesMetaTypes, it enters the "if 
key[:1]=='U':" at line 760
since UserSourcesMetaTypes starts with 'U', but match is empty, therefore path is not 
initialized
and at the line 772 we have the NameError.
Putting the lines 772-774 inside the "if match is not None:" fixed the problem (I 
included a diff for this),
is it the right way to go, is it enough? I think so but I have a small knowledge of 
Zope internals so 
I'm not completely sure i.e. if we want to match only the env.variables starting with 
"URL" why not even change
the  "if key[:1]=='U':" into "if key[:3]=='URL':"?

Thanks
   Luca Mearelli
*** HTTPRequest.py      Mon Oct 23 15:32:09 2000
--- HTTPRequest.py.OLD  Mon Oct 23 14:55:51 2000
***************
*** 769,777 ****
                      path = [''] + path[:n]
                  else:
                      path = [other['SERVER_URL']] + path[:n]
!               other[key] = URL = join(path, '/')
!               self._urls = self._urls + (key,)
!               return URL
  
          if isCGI_NAME(key) or key[:5] == 'HTTP_':
              environ=self.environ
--- 769,777 ----
                      path = [''] + path[:n]
                  else:
                      path = [other['SERVER_URL']] + path[:n]
!             other[key] = URL = join(path, '/')
!             self._urls = self._urls + (key,)
!             return URL
  
          if isCGI_NAME(key) or key[:5] == 'HTTP_':
              environ=self.environ

Reply via email to