diff --git a/CHANGES.rst b/CHANGES.rst index 2ab84bb..fab8c57 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,11 @@ History 1.0b7 (unreleased) ------------------ +- Fix signature of ``node.ext.ldap.ugm.LDAPPrincipals.search`` according to + ``node.ext.ugm.interfaces.IPrincipals.search``. The implementation exposed + LDAP related arguments and has been renamed to ``raw_search``. + [rnix] + - Add ``exists`` property to ``LDAPStorage``. [rnix] diff --git a/src/node/ext/ldap/ugm/_api.py b/src/node/ext/ldap/ugm/_api.py index 1d33962..e0e22db 100644 --- a/src/node/ext/ldap/ugm/_api.py +++ b/src/node/ext/ldap/ugm/_api.py @@ -586,9 +586,9 @@ def _unalias_dict(self, dct): return unaliased_dct @default - def search(self, criteria=None, attrlist=None, - exact_match=False, or_search=False, or_keys=None, - or_values=None, page_size=None, cookie=None): + def raw_search(self, criteria=None, attrlist=None, + exact_match=False, or_search=False, or_keys=None, + or_values=None, page_size=None, cookie=None): search_attrlist = [self._key_attr] if attrlist is not None and self._key_attr not in attrlist: search_attrlist += attrlist @@ -624,6 +624,29 @@ def search(self, criteria=None, attrlist=None, return results, cookie return results + @default + def search(self, criteria=None, attrlist=None, + exact_match=False, or_search=False): + result = [] + cookie = None + while True: + try: + chunk, cookie = self.raw_search( + criteria=criteria, + attrlist=attrlist, + exact_match=exact_match, + or_search=or_search, + page_size=self.context.ldap_session._props.page_size, + cookie=cookie + ) + except ValueError as e: + logger.error(str(e)) + return ret + result += chunk + if not cookie: + break + return result + @default @locktree def create(self, pid, **kw): diff --git a/src/node/ext/ldap/ugm/principals.rst b/src/node/ext/ldap/ugm/principals.rst index f4facac..4dbb448 100644 --- a/src/node/ext/ldap/ugm/principals.rst +++ b/src/node/ext/ldap/ugm/principals.rst @@ -260,13 +260,14 @@ Search for users:: >>> users.search(criteria=dict(sn=schmidt.attrs['sn']), attrlist=['login']) [(u'Schmidt', {'login': [u'user3']})] -Paginated search for users:: +By default, search function is paginated. To control the LDAP search behavior +in more detail, ``raw_search`` can be used:: - >>> results, cookie = users.search(page_size=3, cookie='') + >>> results, cookie = users.raw_search(page_size=3, cookie='') >>> results [u'Meier', u'M\xfcller', u'Schmidt'] - >>> results, cookie = users.search(page_size=3, cookie=cookie) + >>> results, cookie = users.raw_search(page_size=3, cookie=cookie) >>> results [u'Umhauer'] >>> assert cookie == ''