class iStr(str): """Case insensitive strings class. Performs like str except comparisons are case insensitive.""" def __init__(self, strMe): str.__init__(self, strMe) self.__lowerCaseMe = strMe.lower() def __repr__(self): return "iStr(%s)" % str.__repr__(self) def __eq__(self, other): return self.__lowerCaseMe == other.lower() def __lt__(self, other): return self.__lowerCaseMe < other.lower() def __le__(self, other): return self.__lowerCaseMe <= other.lower() def __gt__(self, other): return self.__lowerCaseMe > other.lower() def __ne__(self, other): return self.__lowerCaseMe != other.lower() def __ge__(self, other): return self.__lowerCaseMe >= other.lower() def __cmp__(self, other): return cmp(self.__lowerCaseMe, other.lower()) def __hash__(self): return hash(self.__lowerCaseMe) def __contains__(self, other): return other.lower() in self.__lowerCaseMe def count(self, other, *args): return str.count(self.__lowerCaseMe, other.lower(), *args) def endswith(self, other, *args): return str.endswith(self.__lowerCaseMe, other.lower(), *args) def find(self, other, *args): return str.find(self.__lowerCaseMe, other.lower(), *args) def index(self, other, *args): return str.index(self.__lowerCaseMe, other.lower(), *args) def lower(self): # Courtesy Duncan Booth return self.__lowerCaseMe def rfind(self, other, *args): return str.rfind(self.__lowerCaseMe, other.lower(), *args) def rindex(self, other, *args): return str.rindex(self.__lowerCaseMe, other.lower(), *args) def startswith(self, other, *args): return str.startswith(self.__lowerCaseMe, other.lower(), *args)