Skip to content

Instantly share code, notes, and snippets.

@DanielOaks
Created June 28, 2015 13:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DanielOaks/fc5b86439264128b35e7 to your computer and use it in GitHub Desktop.
Save DanielOaks/fc5b86439264128b35e7 to your computer and use it in GitHub Desktop.
# istring tolower
import collections
# we only care about rfc1459 casemapping right now
_lower_chars = ''.join(chr(i) for i in range(91, 95))
_upper_chars = ''.join(chr(i) for i in range(123, 127))
_lower_trans = str.maketrans(_lower_chars, _upper_chars)
def irclower(in_str):
return in_str.translate(_lower_trans).lower()
class idict(collections.MutableMapping):
def __init__(self, data={}, **kwargs):
self.store = dict()
if data:
self.update(data)
if kwargs:
self.update(dict(**kwargs))
def __repr__(self):
return str(self.store)
def __keytransform__(self, key):
if isinstance(key, str):
key = irclower(key)
return key
def __getitem__(self, key):
return self.store[self.__keytransform__(key)]
def __setitem__(self, key, value):
self.store[self.__keytransform__(key)] = value
def __delitem__(self, key):
del self.store[self.__keytransform__(key)]
def __iter__(self):
return iter(self.store)
def __len__(self):
return len(self.store)
class ilist(collections.MutableSequence):
def __init__(self):
self.store = list()
def __repr__(self):
return str(self.store)
def __valuetransform__(self, value):
if isinstance(value, str):
value = irclower(value)
return value
def __getitem__(self, index):
return self.store[index]
def __setitem__(self, index, value):
value = self.__valuetransform__(value)
self.store[index] = value
def __delitem__(self, index):
del self.store[index]
def __len__(self):
return len(self.store)
def append(self, value):
value = self.__valuetransform__(value)
self.store.append(value)
def clear(self):
del self.store
self.store = []
def extend(self, values):
if isinstance(values, (list, tuple)):
for value in values:
value = self.__valuetransform__(value)
self.store.append(value)
else:
self.store += self.__valuetransform__(values)
def insert(self, index, value):
value = self.__valuetransform__(value)
self.store.insert(index, value)
def pop(self, index=-1):
return self.store.pop(index)
def remove(self, value):
value = self.__valuetransform__(value)
self.store.remove(value)
def reverse(self):
self.store.reverse()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment