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")
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
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 )