Source code for dhtmlparser.specialdict

#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Interpreter version: python 2.7
#
# Imports =====================================================================
from collections import OrderedDict


# Functions & objects =========================================================
def _lower_if_str(item):
    """
    Try to convert item to lowercase, if it is string.

    Args:
        item (obj): Str, unicode or any other object.

    Returns:
        obj: ``item.lower()`` if `item` is ``str`` or ``unicode``, else just \
             `item` itself.
    """
    if type(item) in [str, unicode]:
        return item.lower()

    return item


[docs]class SpecialDict(OrderedDict): """ This dictionary stores items case sensitive, but compare them case INsensitive. """ def __contains__(self, key): keys = super(SpecialDict, self).keys() return _lower_if_str(key) in set(map(lambda x: _lower_if_str(x), keys)) def __getitem__(self, key): key = _lower_if_str(key) for item in self.keys(): if key == _lower_if_str(item): return super(SpecialDict, self).__getitem__(item) raise KeyError("Can't find key '%s'!" % key) def __eq__(self, obj): if self is obj: return True if not hasattr(obj, "keys"): return False if len(self.keys()) != len(obj.keys()): return False for key in obj.keys(): if not self.__contains__(key): return False if obj[key] != self.__getitem__(key): return False return True def __ne__(self, obj): return not self.__eq__(obj)