from ldap3 import ALL_ATTRIBUTES, ALL_OPERATIONAL_ATTRIBUTES from phi.logging import get_logger log = get_logger(__name__) def get_entry_by_uid(client, uid): log.info("Searching entry with identifier: {}".format(uid)) filter_ = "({}={})".format(client.attribute_id, uid) log.debug("Search filter: {}".format(filter_)) response_id = client.connection.search( client.base_dn, filter_, search_scope='SUBTREE', attributes=[ALL_ATTRIBUTES, ALL_OPERATIONAL_ATTRIBUTES] ) response, result, request = client.connection.get_response( response_id, get_request=True ) log.debug("Request: {}".format(request)) log.debug("Response: {}".format(response)) log.debug("Result: {}".format(result)) if not response: return None if response[1:]: log.erorr("Looking for exactly one result but server gave {}. " "Taking the first and ignoring the rest." .format(len(response))) return response[0]