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