Help - Classes and attributes
Bruno Desthuilliers
bdesth.quelquechose at free.quelquepart.fr
Thu Jul 14 07:40:43 EDT 2005
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