Help - Classes and attributes

rh0dium sklass at pointcircle.com
Thu Jul 14 09:37:49 EDT 2005


Thanks Bruno!!

Very much appreciated the modifications!!


Bruno Desthuilliers wrote:
> rh0dium a écrit :
> > 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)
>
> And then you throw away the ldap connection...
>
>
> >     def search(self, baseDN="o=nsc.com",
> > retrieveAttrs=None,searchAttrs="cn=*klass*" ):
> >         searchScope = ldap.SCOPE_SUBTREE
> >         try:
> >             ldap_result_id = l.search_s(baseDN, searchScope,
> > searchAttrs, retrieveAttrs)
>
> Now  where is this 'l' coming from ?
>
> >             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
>
> Err...  this code is not 'setting' anything.
>
> > 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..
>
> try with this instead :
>       q = NSCLdap()
>       q.search()
>
>
> May I suggest a somewhat corrected version ?
>
> class NSCLdap(object):
>      def __init__(self,
>                   server="sc-ldap.nsc.com",
>                   baseDN="o=nsc.com",
>                   who=None,
>                   cred=None):
>          self.server = server
>          self.baseDN  = baseDN
>          if who is None:
>            self.who = ""
>          else:
>            self.who = who
>          if cred is None:
>            self.cred = ""
>          else:
>            self.cred = cred
>          self.connection =  None
>
>      def connect(self):
>          try:
>              print "LDAP Version", ldap.__version__
>              self.connection =  ldap.open(server)
>              self.connection.simple_bind_s(self.who, self.cred)
>              self.connection.protocol_version=ldap.VERSION3
>
>          except ldap.LDAPError, error_message:
>              # I would not catch this. It's the caller's
>              # responsabilitie to handle this  IMHO
>              print >> sys.stderr, "Couldn't Connect to %s  %s " %
> (server,error_message)
>
>      def search(self,
>                 baseDN=None,
>                 searchScope=ldap.SCOPE_SUBTREE,
>                 retrieveAttrs=None,
>                 searchAttrs="cn=*klass*" ):
>
>          cnx = self.connection
>          if baseDN is None:
>            baseDN = self.baseDN
>
>          try:
>              ldap_result_id = cnx.search_s(baseDN,
>                                            searchScope,
>                                            searchAttrs,
>                                            retrieveAttrs)
>              result_set = []
>              while True:
>                  result_type, result_data =cnx.result(ldap_result_id, 0)
>                  #if (result_data == []):
>                  if not result_data:
>                          break
>                  ## 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  >> sys.stderr, "Errors on Search %s " % error_message
>
> if __name__ == '__main__':
>      truc = NSCLdap()
>      truc.search()




More information about the Python-list mailing list