#!/usr/bin/python3 -i # # Copyright (c) 2019 Collabora, Ltd. # # SPDX-License-Identifier: Apache-2.0 # # Author(s): Ryan Pavlik """Provides general-purpose data structures.""" class DictOfStringSets: """A dictionary where the values are sets of strings. Has some convenience functions to allow easier maintenance via the .add method.""" def __init__(self, d=None): self.d = {} if d: for k, v in d.items(): self.add(k, v) def __getitem__(self, k): return self.d[k] def __contains__(self, k): return k in self.d def get(self, k, default=None): return self.d.get(k, default) def get_dict(self): return self.d def items(self): """Return an iterator like dict().items().""" return self.d.items() def keys(self): """Return an iterator over keys.""" return self.d.keys() def values(self): """Return an iterator over values.""" return self.d.values() def add_key(self, k): """Ensure the set for the given key exists.""" if k not in self.d: self.d[k] = set() def add(self, k, v): self.add_key(k) if isinstance(v, str): v = (v, ) if not isinstance(v, set): v = set(v) self.d[k].update(v)