Exemplo n.º 1
0
def value2key(keys, val):
    if len(keys) == 1:
        if isinstance(val, Mapping):
            return val[keys[0]]
        elif isinstance(val, (list, tuple)):
            return val[0]
        else:
            return val
    else:
        if isinstance(val, Mapping):
            return datawrap({k: val[k] for k in keys})
        elif isinstance(val, (list, tuple)):
            return datawrap(dict(zip(keys, val)))
        else:
            Log.error("do not know what to do here")
Exemplo n.º 2
0
    def remove(self, val):
        key = value2key(self._keys, datawrap(val))
        if key == None:
            Log.error("Expecting key to not be None")

        d = self._data.get(key)
        if d is None:
            # ALREADY GONE
            return
        else:
            del self._data[key]
            self.count -= 1
Exemplo n.º 3
0
    def add(self, val):
        val = datawrap(val)
        key = value2key(self._keys, val)
        if key == None:
            Log.error("Expecting key to be not None")

        d = self._data.get(key)
        if d is None:
            self._data[key] = unwrap(val)
            self.count += 1
        elif d is not val:
            if self.fail_on_dup:
                Log.error("{{new|json}} with key {{key|json}} already filled with {{old|json}}", key=key, new=val, old=self[val])
            elif DEBUG:
                Log.warning("key {{key|json}} already filled\nExisting\n{{existing|json|indent}}\nValue\n{{value|json|indent}}",
                    key=key,
                    existing=d,
                    value=val
                )