summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFraser Tweedale <ftweedal@redhat.com>2016-06-17 10:05:49 +1000
committerJan Cholasta <jcholast@redhat.com>2016-06-29 08:52:29 +0200
commitf0b1e37d2e048b5f375ec485e2b69e722a7bc7b7 (patch)
treead49e10f70cadcaa17f22263a0fc14972e7b8ac1
parent45daffa22fcc6c481a8302f1947a5e0ded0b3eb8 (diff)
downloadfreeipa-f0b1e37d2e048b5f375ec485e2b69e722a7bc7b7.tar.gz
freeipa-f0b1e37d2e048b5f375ec485e2b69e722a7bc7b7.tar.xz
freeipa-f0b1e37d2e048b5f375ec485e2b69e722a7bc7b7.zip
ipaldap: turn LDAP filter utility functions into class methods
The LDAP filter utilities do not use any instance attributes, so collectively turn them into class methods to promote reuse. Part of: https://fedorahosted.org/freeipa/ticket/4559 Reviewed-By: Jan Cholasta <jcholast@redhat.com>
-rw-r--r--ipapython/ipaldap.py35
1 files changed, 19 insertions, 16 deletions
diff --git a/ipapython/ipaldap.py b/ipapython/ipaldap.py
index 23405c6a8..9258fafe1 100644
--- a/ipapython/ipaldap.py
+++ b/ipapython/ipaldap.py
@@ -1153,7 +1153,8 @@ class LDAPClient(object):
# entry_attrs = {u'firstName': u'Pavel', u'lastName': u'Zuna'}
# f = ldap2.make_filter(entry_attrs, rules=ldap2.MATCH_ALL)
- def combine_filters(self, filters, rules='|'):
+ @classmethod
+ def combine_filters(cls, filters, rules='|'):
"""
Combine filters into one for ldap2.find_entries.
@@ -1164,9 +1165,9 @@ class LDAPClient(object):
assert isinstance(filters, (list, tuple))
filters = [f for f in filters if f]
- if filters and rules == self.MATCH_NONE: # unary operator
- return '(%s%s)' % (self.MATCH_NONE,
- self.combine_filters(filters, self.MATCH_ANY))
+ if filters and rules == cls.MATCH_NONE: # unary operator
+ return '(%s%s)' % (cls.MATCH_NONE,
+ cls.combine_filters(filters, cls.MATCH_ANY))
if len(filters) > 1:
flt = '(%s' % rules
@@ -1180,8 +1181,9 @@ class LDAPClient(object):
flt = '%s)' % flt
return flt
+ @classmethod
def make_filter_from_attr(
- self, attr, value, rules='|', exact=True,
+ cls, attr, value, rules='|', exact=True,
leading_wildcard=True, trailing_wildcard=True):
"""
Make filter for ldap2.find_entries from attribute.
@@ -1198,18 +1200,18 @@ class LDAPClient(object):
False - forbid trailing filter wildcard when exact=False
"""
if isinstance(value, (list, tuple)):
- if rules == self.MATCH_NONE:
- make_filter_rules = self.MATCH_ANY
+ if rules == cls.MATCH_NONE:
+ make_filter_rules = cls.MATCH_ANY
else:
make_filter_rules = rules
flts = [
- self.make_filter_from_attr(
+ cls.make_filter_from_attr(
attr, v, exact=exact,
leading_wildcard=leading_wildcard,
trailing_wildcard=trailing_wildcard)
for v in value
]
- return self.combine_filters(flts, rules)
+ return cls.combine_filters(flts, rules)
elif value is not None:
if isinstance(value, bytes):
if six.PY3:
@@ -1224,13 +1226,14 @@ class LDAPClient(object):
if trailing_wildcard:
template = template + '*'
value = template % value
- if rules == self.MATCH_NONE:
+ if rules == cls.MATCH_NONE:
return '(!(%s=%s))' % (attr, value)
return '(%s=%s)' % (attr, value)
return ''
+ @classmethod
def make_filter(
- self, entry_attrs, attrs_list=None, rules='|', exact=True,
+ cls, entry_attrs, attrs_list=None, rules='|', exact=True,
leading_wildcard=True, trailing_wildcard=True):
"""
Make filter for ldap2.find_entries from entry attributes.
@@ -1252,15 +1255,15 @@ class LDAPClient(object):
ldap2.MATCH_ALL - match entries that match all attributes
ldap2.MATCH_ANY - match entries that match any of attribute
"""
- if rules == self.MATCH_NONE:
- make_filter_rules = self.MATCH_ANY
+ if rules == cls.MATCH_NONE:
+ make_filter_rules = cls.MATCH_ANY
else:
make_filter_rules = rules
flts = []
if attrs_list is None:
for (k, v) in entry_attrs.items():
flts.append(
- self.make_filter_from_attr(
+ cls.make_filter_from_attr(
k, v, make_filter_rules, exact,
leading_wildcard, trailing_wildcard)
)
@@ -1269,11 +1272,11 @@ class LDAPClient(object):
value = entry_attrs.get(a, None)
if value is not None:
flts.append(
- self.make_filter_from_attr(
+ cls.make_filter_from_attr(
a, value, make_filter_rules, exact,
leading_wildcard, trailing_wildcard)
)
- return self.combine_filters(flts, rules)
+ return cls.combine_filters(flts, rules)
def get_entries(self, base_dn, scope=ldap.SCOPE_SUBTREE, filter=None,
attrs_list=None, **kwargs):