Help - Classes and attributes

rh0dium sklass at pointcircle.com
Thu Jul 14 15:36:40 CEST 2005


I knew it had to be something obvious - thanks so much!!


John Machin wrote:
> rh0dium wrote:
> > Hi all,
> >
> > I believe I am having a fundamental problem with my class and I can't
> > seem to figure out what I am doing wrong.  Basically I want a class
> > which can do several specific ldap queries.  So in my code I would have
> > multiple searches.  But I can't figure out how to do it without it
> > barfing..
> >
> > The error is straightforward ..
> >
> > LDAP Version 2.0.8
> > Traceback (most recent call last):
> >   File "./ldap-nsc.py", line 62, in ?
> >     l.search()
> >   File "./ldap-nsc.py", line 40, in search
> >     ldap_result_id = l.search_s(baseDN, searchScope, searchAttrs,
> > retrieveAttrs)
> > AttributeError: NSCLdap instance has no attribute 'search_s'
> >
> >
> > The code is also I believe straight forward..
> >
> > import ldap
> >
> > class NSCLdap:
> >
> >     def __init__(self,server="sc-ldap.nsc.com"):
> >         who=""; cred=""
> >         self.server=server
> >         try:
> >             print "LDAP Version", ldap.__version__
> >             l=ldap.open(server)
> >             l.simple_bind_s(who, cred)
> >             l.protocol_version=ldap.VERSION3
> >         except ldap.LDAPError, error_message:
> >             print "Couldn't Connect to %s  %s " %
> > (server,error_message)
> >
> >     def search(self, baseDN="o=nsc.com",
> > retrieveAttrs=None,searchAttrs="cn=*klass*" ):
> >         searchScope = ldap.SCOPE_SUBTREE
> >         try:
>
> If you had bothered to do some elementary debugging, like "print
> repr(l)" here, just before the exception-triggering statement, ....
>
> >             ldap_result_id = l.search_s(baseDN, searchScope,
> > searchAttrs, retrieveAttrs)
> >             result_set = []
> >             while 1:
> >                 result_type, result_data = l.result(ldap_result_id, 0)
> >                 if (result_data == []):
> >                         break
> >                 else:
> >                         ## here you don't have to append to a list
> >                         ## you could do whatever you want with the
> > individual entry
> >                         ## The appending to list is just for
> > illustration.
> >                         if result_type == ldap.RES_SEARCH_ENTRY:
> >                                 result_set.append(result_data)
> >             print result_set
> >         except ldap.LDAPError, error_message:
> >             print "Errors on Search %s " % error_message
> >
> >     def setBaseDN(self, baseDN="o=nsc.com"):
> >         return baseDN
> >
> > if __name__ == '__main__':
> >
> >     l = NSCLdap()
> >     l.search()
> >
> >
> > I would love some pointers - clearly my code thinks that search_s is an
> > attribute of my class but it's not..
>
>
> You are confusing the bejaysus out of yourself and your audience by
> using "l" as a name (1) at all (2) to represent two *different* things,
> one in script-global scope -- l = NSCLdap() --  and one in the __init__
> method of your class -- l=ldap.open(server).
>
> Use two different sensible names; then your real problem should become
> apparent -- unless of course in the meantime some wally thinks it a good
> idea to prevent your attaining a clue yourself by spoon-feeding you.




More information about the Python-list mailing list