16 from collections.abc
import MutableMapping
19 from .robottypes
import is_dict_like, is_string
27 def normalize(string, ignore=(), caseless=
True, spaceless=
True):
29 if isinstance(ignore, bytes):
31 ignore = [bytes([i])
for i
in ignore]
33 string = empty.join(string.split())
35 string = string.lower()
36 ignore = [i.lower()
for i
in ignore]
41 string = string.replace(ign, empty)
46 return re.sub(
r'\s',
' ', string, flags=re.UNICODE)
60 def __init__(self, initial=None, ignore=(), caseless=
True, spaceless=
True):
68 items = initial.items()
if hasattr(initial,
'items')
else initial
69 for key, value
in items:
77 self.
_data_data[norm_key] = value
78 self.
_keys_keys.setdefault(norm_key, key)
82 del self.
_data_data[norm_key]
83 del self.
_keys_keys[norm_key]
86 return (self.
_keys_keys[norm_key]
for norm_key
in sorted(self.
_keys_keys))
89 return len(self.
_data_data)
92 return '{%s}' %
', '.join(
'%r: %r' % (key, self[key])
for key
in self)
97 if not isinstance(other, NormalizedDict):
99 return self.
_data_data == other._data
Custom dictionary implementation automatically normalizing keys.
def _add_initial(self, initial)
def __setitem__(self, key, value)
def __getitem__(self, key)
def __delitem__(self, key)
def __init__(self, initial=None, ignore=(), caseless=True, spaceless=True)
Initialized with possible initial value and normalizing spec.
def __contains__(self, key)
def normalize_whitespace(string)
def normalize(string, ignore=(), caseless=True, spaceless=True)
Normalizes given string according to given spec.