Source code for ldaptor.attributeset

from copy import deepcopy

from ldaptor._encoder import get_strings


[docs]class LDAPAttributeSet(set): def __init__(self, key, *a, **kw): """ Represents all the values for an attribute in an LDAP entry. An entry might have "cn" or "objectClass" or "uid" attributes, and this class represents each of those. You can find the name of the LDAP entry attribute (eg. "uid") with the ``.key`` member variable. You can find the values of the LDAP attribute by casting this to a ``list``. @param key: the key of the attribute, eg "uid". @type key: str @param args: set of values for this attribute, eg. "jsmith" """ self.key = key super().__init__(*a, **kw) def __repr__(self): values = list(self) values.sort() attributes = ", ".join([repr(x) for x in values]) return f"{self.__class__.__name__}({self.key!r}, [{attributes}])" def __eq__(self, other): """ Note that LDAPAttributeSets can also be compared against any iterator. In that case the attributeType will be ignored. """ if isinstance(other, LDAPAttributeSet): if self.key != other.key: return False return super().__eq__(other) else: me = list(self) me.sort() him = list(other) him.sort() return me == him def __ne__(self, other): return not self == other
[docs] def add(self, key): """ Adding key to the attributes with checking if it exists as byte or unicode string """ for k in get_strings(key): if k in self: return set.add(self, key)
[docs] def remove(self, key): """ Removing key from the attributes with checking if it exists as byte or unicode string """ for k in get_strings(key): if k in self: set.remove(self, k) return raise KeyError(key)
[docs] def copy(self): result = self.__class__(self.key) result.update(self) return result
__copy__ = copy def __deepcopy__(self, memo): result = self.__class__(self.key) memo[id(self)] = result data = deepcopy(set(self), memo) result.update(data) return result