Source code for tldap.helpers
# Copyright 2012-2014 Brian May
#
# This file is part of python-tldap.
#
# python-tldap is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# python-tldap is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with python-tldap If not, see <http://www.gnu.org/licenses/>.
import six
import copy
[docs]class CaseInsensitiveDict(dict):
"""
Case insensitve dictionary for searches however preserves the case for
retrieval.
"""
def __init__(self, d={}):
self.lc = {}
for k, v in six.iteritems(d):
self.lc[k.lower()] = k
super(CaseInsensitiveDict, self).__init__(d)
def __setitem__(self, key, value):
try:
old_key = self.lc[key.lower()]
except KeyError:
pass
else:
if key != old_key:
super(CaseInsensitiveDict, self).__delitem__(old_key)
self.lc[key.lower()] = key
super(CaseInsensitiveDict, self).__setitem__(key, value)
def __delitem__(self, key):
key = self.lc[key.lower()]
del self.lc[key.lower()]
super(CaseInsensitiveDict, self).__delitem__(key)
def __getitem__(self, key):
key = self.lc[key.lower()]
return super(CaseInsensitiveDict, self).__getitem__(key)
def __contains__(self, key):
try:
key = self.lc[key.lower()]
except KeyError:
return False
else:
return super(CaseInsensitiveDict, self).__contains__(key)
def get(self, key, default=None):
try:
key = self.lc[key.lower()]
except KeyError:
return default
else:
return super(CaseInsensitiveDict, self).get(key, default)
def get_correct_key(self, key):
return self.lc[key.lower()]
def __copy__(self):
clone = self.__class__()
for k, v in six.iteritems(self):
clone[k] = v
return clone
def __deepcopy__(self, memo):
clone = self.__class__()
for k, v in six.iteritems(self):
clone[k] = copy.deepcopy(v, memo)
return clone