def test_dicts(): simple = {'first': 1, 'second': 2} obj, sig = dbus_prepare(simple) assert obj == simple assert sig == 'a{sn}' obj, sig = dbus_prepare(simple, variant=True) for value in obj.values(): assert isinstance(value, GLib.Variant) assert sig == 'a{sv}' mixed = {'first': 'string here', 'second': 2, 'third': (2, 2)} obj, sig = dbus_prepare(mixed) for value in obj.values(): assert isinstance(value, GLib.Variant) assert sig == 'a{sv}' nested = {'first': {'nested1': 1}, 'second': {'nested2': 2}} obj, sig = dbus_prepare(nested) assert obj == nested assert sig == 'a{sa{sn}}' nested['second']['nested2'] = 'blah' obj, sig = dbus_prepare(nested) print('obj=%s sig=%s' % (obj, sig)) assert isinstance(obj, dict) assert isinstance(obj['first'], GLib.Variant) assert isinstance(obj['first']['nested1'], int) assert sig == 'a{sv}'
def test_special_types(): obj, sig = dbus_prepare(Color.NewFromHtml('black')) assert obj == '#000000' assert sig == 's' obj, sig = dbus_prepare(Int(5)) assert isinstance(obj, dict) assert sig == 'a{sv}' for value in obj.values(): assert isinstance(value, GLib.Variant) obj, sig = dbus_prepare(EnumTest) assert isinstance(obj, tuple) assert sig == '(sss)'
def _fx_changed(self, change): self._logger.info("Effects changed: %s", change) self._current_fx = (change.new[0].lower(), dbus_prepare(change.new[1]._trait_values, variant=True)[0]) self.PropertiesChanged('org.chemlab.UChroma.FXManager', {'CurrentFX': self.CurrentFX}, [])
def GetLED(self, name: str) -> dict: ledtype = LEDType[name.upper()] if ledtype is None: self._logger.error("Unknown LED type: %s", name) return {} return dbus_prepare(self._driver.led_manager.get(ledtype)._trait_values)[0]
def AvailableRenderers(self) -> dict: avail = {} infos = self._animgr.renderer_info for key, info in infos.items(): avail[key] = dbus_prepare({'meta': info.meta, 'traits': info.traits})[0] return avail
def _led_control(self, args): led = args.led_cmd.lower() if len(args.changed) == 0: args.parser.error("At least one option is required") if not self.driver.SetLED(led, dbus_prepare(args.changed, variant=True)[0]): args.parser.error("Failed to configure LED")
def __init__(self, parent): super(FXManagerAPI, self).__init__(parent) self._fx_manager = self._driver.fx_manager self._current_fx = None self._available_fx = dbus_prepare({k: v.class_traits() \ for k, v in self._fx_manager.available_fx.items()})[0] self._fx_manager.observe(self._fx_changed, names=['current_fx'])
def test_primitives(): assert dbus_prepare(23)[1] == 'n' assert dbus_prepare(65536)[1] == 'i' assert dbus_prepare(sys.maxsize)[1] == 'x' assert dbus_prepare(False)[1] == 'b' assert dbus_prepare(23.0)[1] == 'd' assert dbus_prepare('asdf')[1] == 's'
def _add_renderer(self, args): rname = args.renderer if rname not in self.renderer_info: rname = {v: k for k, v in self._aliases.items()}[rname] zindex = -1 if hasattr(args, 'zzz') and args.zzz is not None: zindex = args.zzz layer = self.driver.AddRenderer(rname, zindex, dbus_prepare(args.changed, variant=True)[0]) if layer is None: args.parser.error("Failed to create renderer") args.parser.exit(message="Created layer: %s\n" % layer)
def set_property(self, target, name, value): name = snake_to_camel(name) if not hasattr(target, name): raise ValueError("Invalid property: %s" % name) cls_obj = getattr(target.__class__, name) if hasattr(cls_obj, '_type'): typespec = cls_obj._type if typespec == 's': value = str(value) elif typespec == 'd': value = float(value) elif typespec == 'u' or typespec == 'i': value = int(value) elif typespec == 'b': value = bool(value) else: value = dbus_prepare(value)[0] setattr(target, name, value)
def _activate_fx(self, args): fx = args.fx_cmd.lower() if not self.driver.SetFX(fx, dbus_prepare(args.changed, variant=True)[0]): args.parser.error("Failed to activate effect")
def AvailableLEDs(self): leds = {} for led in self._driver.led_manager.supported_leds: leds[led.name.lower()] = self._driver.led_manager.get(led).traits() return dbus_prepare(leds)[0]
def FrameDebugOpts(self) -> dict: return dbus_prepare(self._driver.frame_control.debug_opts, variant=True)[0]
async def _dev_mode_input(self): while self._signal_input: event = await self._input_queue.get_events() if event is not None: self.InputEvent(dbus_prepare(event)[0])