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() -- http://mail.python.org/mailman/listinfo/python-list