russianidiot/dict.py

View on GitHub
dict/__init__.py

Summary

Maintainability
A
35 mins
Test Coverage
__all__ = ['dict']

try:
    import builtins
except ImportError:
    import __builtin__ as builtins
import values


def _isdict(obj):
    return isinstance(obj, dict)


class dict(dict):

    def __init__(self, *args, **kwargs):
        self.update(*args, **kwargs)

    def get(self, key=None, default=None, i=False):
        result = builtins.dict.get(self, key, default)
        if result is None and i is True:  # insensitive
            for k in self.keys():
                if str(key).lower() == str(k).lower():
                    return self[k]
        return result

    def update(self, *args, **kwargs):
        builtins.dict.update(self, *args, **kwargs)
        return self

    def remove(self, v):
        """remove element(s) by key"""
        for key in values.get(v):
            if key in self:
                self.pop(key)
        return self

    def __getattribute__(self, name):
        if hasattr(type(self), name):
            return object.__getattribute__(self, name)
        if name in self:
            if isinstance(self[name], dict):  # dict
                return dict(self[name])
            return self[name]

    def __getitem__(self, key):
        if key in self:
            v = builtins.dict.__getitem__(self, key)
            if _isdict(v):  # recirsive
                return type(self)(v)
            return v

    def __setattr__(self, name, value):
        if hasattr(type(self), name):
            object.__setattr__(self, name, value)
        else:
            self[name] = value