|
5 | 5 |
|
6 | 6 | See https://www.python-ldap.org/ for details.
|
7 | 7 | """
|
| 8 | +from collections import MutableMapping |
8 | 9 | import warnings
|
9 | 10 |
|
10 | 11 | from ldap import __version__
|
11 | 12 |
|
12 |
| -from ldap.compat import IterableUserDict |
13 | 13 |
|
| 14 | +class cidict(MutableMapping): |
| 15 | + """ |
| 16 | + Case-insensitive but case-respecting dictionary. |
| 17 | + """ |
14 | 18 |
|
15 |
| -class cidict(IterableUserDict): |
16 |
| - """ |
17 |
| - Case-insensitive but case-respecting dictionary. |
18 |
| - """ |
| 19 | + def __init__(self, default=None): |
| 20 | + self._keys = {} |
| 21 | + self._data = {} |
| 22 | + if default: |
| 23 | + self.update(default) |
| 24 | + |
| 25 | + # MutableMapping abstract methods |
19 | 26 |
|
20 |
| - def __init__(self,default=None): |
21 |
| - self._keys = {} |
22 |
| - IterableUserDict.__init__(self,{}) |
23 |
| - self.update(default or {}) |
| 27 | + def __getitem__(self, key): |
| 28 | + return self._data[key.lower()] |
24 | 29 |
|
25 |
| - def __getitem__(self,key): |
26 |
| - return self.data[key.lower()] |
| 30 | + def __setitem__(self, key, value): |
| 31 | + lower_key = key.lower() |
| 32 | + self._keys[lower_key] = key |
| 33 | + self._data[lower_key] = value |
27 | 34 |
|
28 |
| - def __setitem__(self,key,value): |
29 |
| - lower_key = key.lower() |
30 |
| - self._keys[lower_key] = key |
31 |
| - self.data[lower_key] = value |
| 35 | + def __delitem__(self, key): |
| 36 | + lower_key = key.lower() |
| 37 | + del self._keys[lower_key] |
| 38 | + del self._data[lower_key] |
32 | 39 |
|
33 |
| - def __delitem__(self,key): |
34 |
| - lower_key = key.lower() |
35 |
| - del self._keys[lower_key] |
36 |
| - del self.data[lower_key] |
| 40 | + def __iter__(self): |
| 41 | + return iter(self._keys.values()) |
37 | 42 |
|
38 |
| - def update(self,dict): |
39 |
| - for key, value in dict.items(): |
40 |
| - self[key] = value |
| 43 | + def __len__(self): |
| 44 | + return len(self._keys) |
41 | 45 |
|
42 |
| - def has_key(self,key): |
43 |
| - return key in self |
| 46 | + # Specializations for performance |
44 | 47 |
|
45 |
| - def __contains__(self,key): |
46 |
| - return IterableUserDict.__contains__(self, key.lower()) |
| 48 | + def __contains__(self, key): |
| 49 | + return key.lower() in self._keys |
47 | 50 |
|
48 |
| - def __iter__(self): |
49 |
| - return iter(self.keys()) |
| 51 | + def clear(self): |
| 52 | + self._keys.clear() |
| 53 | + self._data.clear() |
50 | 54 |
|
51 |
| - def keys(self): |
52 |
| - return self._keys.values() |
| 55 | + # Backwards compatibility |
53 | 56 |
|
54 |
| - def items(self): |
55 |
| - result = [] |
56 |
| - for k in self._keys.values(): |
57 |
| - result.append((k,self[k])) |
58 |
| - return result |
| 57 | + def has_key(self, key): |
| 58 | + """Compatibility with python-ldap 2.x""" |
| 59 | + return key in self |
59 | 60 |
|
60 | 61 |
|
61 | 62 | def strlist_minus(a,b):
|
|
0 commit comments