Guest User

Untitled

a guest
Nov 24th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. class CaselessDict(dict):
  2. __slots__ = ()
  3.  
  4. def __init__(self, seq=None):
  5. super(CaselessDict, self).__init__()
  6. if seq:
  7. self.update(seq)
  8.  
  9. def __getitem__(self, key):
  10. return dict.__getitem__(self, self.normkey(key))
  11.  
  12. def __setitem__(self, key, value):
  13. dict.__setitem__(self, self.normkey(key), self.normvalue(value))
  14.  
  15. def __delitem__(self, key):
  16. dict.__delitem__(self, self.normkey(key))
  17.  
  18. def __contains__(self, key):
  19. return dict.__contains__(self, self.normkey(key))
  20. has_key = __contains__
  21.  
  22. def __copy__(self):
  23. return self.__class__(self)
  24. copy = __copy__
  25.  
  26. def normkey(self, key):
  27. """Method to normalize dictionary key access"""
  28. return key.lower()
  29.  
  30. def normvalue(self, value):
  31. """Method to normalize values prior to be setted"""
  32. return value
  33.  
  34. def get(self, key, def_val=None):
  35. return dict.get(self, self.normkey(key), self.normvalue(def_value))
  36.  
  37. def setdefault(self, key, def_val=None):
  38. return dict.setdefault(self, self.normkey(key), self.normvalue(def_val))
  39.  
  40. def update(self, seq):
  41. seq = seq.items() if isinstance(seq, Mapping) else seq
  42. iseq = ((self.normkey(k), self.normvalue(v)) for k, v in seq)
  43. super(CaselessDict, self).update(iseq)
  44.  
  45. @classmethod
  46. def fromkeys(cls, keys, value=None):
  47. return cls((k, value) for k in keys)
  48.  
  49. def pop(self, key, *args):
  50. return dict.pop(self, self.normkey(key), *args)
Add Comment
Please, Sign In to add comment