def _patch_configdata(monkeypatch, stubs, symbol): """Patch the configdata module to provide fake data.""" data = collections.OrderedDict([ ('general', sections.KeyValue( ('time', value.SettingValue( stubs.FakeConfigType('fast', 'slow'), default='slow'), 'Is an illusion.\n\nLunchtime doubly so.'), ('volume', value.SettingValue(stubs.FakeConfigType('0', '11'), default='11'), 'Goes to 11'))), ('ui', sections.KeyValue( ('gesture', value.SettingValue( stubs.FakeConfigType(('on', 'off')), default='off'), 'Waggle your hands to control qutebrowser'), ('mind', value.SettingValue( stubs.FakeConfigType(('on', 'off')), default='off'), 'Enable mind-control ui (experimental)'), ('voice', value.SettingValue( stubs.FakeConfigType(('on', 'off')), default='off'), 'Whether to respond to voice commands'))), ('searchengines', sections.ValueList( stubs.FakeConfigType(), stubs.FakeConfigType(), ('DEFAULT', 'https://duckduckgo.com/?q={}'), )), ]) monkeypatch.setattr(symbol, data)
def __init__(self, keytype, valtype, *defaults, readonly=False): """Wrap types over default values. Take care when overriding this. Args: keytype: The type instance to be used for keys. valtype: The type instance to be used for values. *defaults: A (key, value) list of default values. readonly: Whether this config is readonly. """ super().__init__() self._readonly = readonly self._ordered_value_cache = None self.keytype = keytype self.valtype = valtype self.layers = collections.OrderedDict([ ('default', collections.OrderedDict()), ('conf', collections.OrderedDict()), ('temp', collections.OrderedDict()), ]) defaultlayer = self.layers['default'] for key, value in defaults: assert key not in defaultlayer, key defaultlayer[key] = confvalue.SettingValue(valtype, value) self.values = collections.ChainMap( self.layers['temp'], self.layers['conf'], self.layers['default'])
def setv(self, layer, key, value, interpolated): self.keytype.validate(key) if key in self.layers[layer]: self.layers[layer][key].setv(layer, value, interpolated) else: val = confvalue.SettingValue(self.valtype) val.setv(layer, value, interpolated) self.layers[layer][key] = val self._ordered_value_cache = None
def setv(self, layer, key, value, interpolated): if self._readonly: raise ValueError("Trying to modify a read-only config!") self.keytype.validate(key) if key in self.layers[layer]: self.layers[layer][key].setv(layer, value, interpolated) else: val = confvalue.SettingValue(self.valtype) val.setv(layer, value, interpolated) self.layers[layer][key] = val self._ordered_value_cache = None