123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- """
- This is a convenience wrapper for dictionaries
- returned from LDAP servers containing attribute
- names of variable case.
-
- See https://www.python-ldap.org/ for details.
- """
-
- from ldap import __version__
-
- from ldap.compat import IterableUserDict
-
-
- class cidict(IterableUserDict):
- """
- Case-insensitive but case-respecting dictionary.
- """
-
- def __init__(self,default=None):
- self._keys = {}
- IterableUserDict.__init__(self,{})
- self.update(default or {})
-
- def __getitem__(self,key):
- return self.data[key.lower()]
-
- def __setitem__(self,key,value):
- lower_key = key.lower()
- self._keys[lower_key] = key
- self.data[lower_key] = value
-
- def __delitem__(self,key):
- lower_key = key.lower()
- del self._keys[lower_key]
- del self.data[lower_key]
-
- def update(self,dict):
- for key, value in dict.items():
- self[key] = value
-
- def has_key(self,key):
- return key in self
-
- def __contains__(self,key):
- return IterableUserDict.__contains__(self, key.lower())
-
- def __iter__(self):
- return iter(self.keys())
-
- def keys(self):
- return self._keys.values()
-
- def items(self):
- result = []
- for k in self._keys.values():
- result.append((k,self[k]))
- return result
-
-
- def strlist_minus(a,b):
- """
- Return list of all items in a which are not in b (a - b).
- a,b are supposed to be lists of case-insensitive strings.
- """
- temp = cidict()
- for elt in b:
- temp[elt] = elt
- result = [
- elt
- for elt in a
- if elt not in temp
- ]
- return result
-
-
- def strlist_intersection(a,b):
- """
- Return intersection of two lists of case-insensitive strings a,b.
- """
- temp = cidict()
- for elt in a:
- temp[elt] = elt
- result = [
- temp[elt]
- for elt in b
- if elt in temp
- ]
- return result
-
-
- def strlist_union(a,b):
- """
- Return union of two lists of case-insensitive strings a,b.
- """
- temp = cidict()
- for elt in a:
- temp[elt] = elt
- for elt in b:
- temp[elt] = elt
- return temp.values()
|