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