Beispiel #1
0
    def __getitem__(self, key):
        try:
            return PersistentMapping.__getitem__(self, key)

        except KeyError:
            if type(key) == type(0):
                return self.get_list()[key]

            if type(key) == type(""):
                keys = self.keys()

                l = self.__class__()
                # first check if key can be found in start of key-strings
                shortened_keys = map(lambda x: (x, x[:len(key)]), keys)
                for k, sk in shortened_keys:
                    if key == sk:
                        l[k] = self[k]

                if len(l) == 0:
                    # then check if it can be found anywhere
                    for k in keys:
                        if k.find(key) > -1:
                            l[k] = self[k]

                # return either 1 object or list of objects
                if len(l) == 1:
                    return l[0]
                if l:
                    return l

            # key not found, so
            raise KeyError