[ZPatterns] mystery with restrictedTraverse

Joachim Schmitz js@aixtraware.de
Sat, 8 Sep 2001 12:06:36 +0200 (CEST)


Hi,

I found a strange problem when calling a restrictedTraverse in a Specialist,
which is contained in Specialist.

Here is my Setup:

I am accessing the ZopeServer with ZPatterns over xmlrpc, I am using the
ZSyncer-Product as xmlrpc-servercomponent, to access the data stored in a
Specialists.

The client Python-script looks like this:

def test_aixtra_get(): #{{{
    server_url="http://xxx.zzz.de/Syncer/"
    path=""
    t = BasicAuthTransport(username="jjjj",password="oooo")
    server=xmlrpclib.Server(server_url,t,verbose=1)

    try:
        R = server.getPersistentItem("AixAd/Rechnung/Positionen", '0901031')
        #R = server.getPersistentItem("AixAd/Rechnung", '090103')
        #R = server.getPersistentItem("AixAd/Kunden", '1123')
    except xmlrpclib.Fault,e:
        for l in split(str(e),'\\n'):
            print  l
    print R

#}}}

the funktion in the server is:

def getPersistentItem(self,path,itemId):
    ''' Get the a Dataskins persistent data '''
    object = self.restrictedTraverse(path)
    return object.getId()

for

    R = server.getPersistentItem("AixAd/Rechnung", '090103')

AixAd is a normal Folder, Rechnung is a specialist.
this returns:

Rechnung

for

    R = server.getPersistentItem("AixAd/Rechnung/Positionen", '090103')

AixAd is a normal Folder, Rechnung is a specialist, Positionen is a specialist.

this returns:

  <H2>Site Error</H2>

  <P>An error was encountered while publishing this resource.
  </P>

  <P>
  <STRONG>Error Type: NameError</STRONG><BR>
  <STRONG>Error Value: global name \'has\' is not defined</STRONG><BR>
  </P>

The most strange thing is that worked with 2.4.1b1, after installing 2.4.1
final it failed.

I just tested it with 2.3.3 there it works too.
With a normal folder in a subfolder it works too.

Any hint is apreacheated.




Mit freundlichen Grüßen

Joachim Schmitz

AixtraWare, Ing. Büro für Internetanwendungen
Hüsgenstr. 33a, D-52457 Aldenhoven
Telefon: +49-2464-8851, FAX: +49-2464-905163