Source code for dbusmock.templates.urfkill

"""urfkill mock template

This creates the expected methods and properties of the main
urfkill object, but no devices. You can specify any property
such as urfkill in "parameters".
"""

# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation; either version 3 of the License, or (at your option) any
# later version.  See http://www.gnu.org/copyleft/lgpl.html for the full text
# of the license.

[docs] __author__ = "Jussi Pakkanen"
import dbus import dbusmock
[docs] SYSTEM_BUS = True
[docs] BUS_NAME = "org.freedesktop.URfkill"
[docs] MAIN_OBJ = "/org/freedesktop/URfkill"
[docs] MAIN_IFACE = "org.freedesktop.URfkill"
[docs] individual_objects = ["BLUETOOTH", "FM", "GPS", "NFC", "UWB", "WIMAX", "WLAN", "WWAN"]
[docs] type2objectname = { 1: "WLAN", 2: "BLUETOOTH", 3: "UWB", 4: "WIMAX", 5: "WWAN", 6: "GPS", 7: "FM", }
[docs] KS_NOTAVAILABLE = -1
[docs] KS_UNBLOCKED = 0
[docs] KS_SOFTBLOCKED = 1
[docs] KS_HARDBLOCKED = 2
[docs] def toggle_flight_mode(self, new_block_state): new_block_state = bool(new_block_state) if self.flight_mode == new_block_state: return True self.flight_mode = new_block_state for i in individual_objects: old_value = self.internal_states[i] if old_value == 1: continue # It was already blocked so we don't need to do anything path = "/org/freedesktop/URfkill/" + i obj = dbusmock.get_object(path) if new_block_state: obj.Set("org.freedesktop.URfkill.Killswitch", "state", 1) obj.EmitSignal("org.freedesktop.URfkill.Killswitch", "StateChanged", "", []) else: obj.Set("org.freedesktop.URfkill.Killswitch", "state", 0) obj.EmitSignal("org.freedesktop.URfkill.Killswitch", "StateChanged", "", []) self.EmitSignal(MAIN_IFACE, "FlightModeChanged", "b", [self.flight_mode]) return True
[docs] def block(self, index, should_block): should_block = bool(should_block) if index not in type2objectname: return False objname = type2objectname[index] new_block_state = 1 if should_block else 0 if self.internal_states[objname] != new_block_state: path = "/org/freedesktop/URfkill/" + objname obj = dbusmock.get_object(path) self.internal_states[objname] = new_block_state obj.Set("org.freedesktop.URfkill.Killswitch", "state", new_block_state) obj.EmitSignal("org.freedesktop.URfkill.Killswitch", "StateChanged", "", []) return True
[docs] def load(mock, parameters): mock.toggle_flight_mode = toggle_flight_mode mock.block = block mock.flight_mode = False mock.internal_states = {} for oname in individual_objects: mock.internal_states[oname] = KS_UNBLOCKED # First we create the main urfkill object. mock.AddMethods( MAIN_IFACE, [ ("IsFlightMode", "", "b", "ret = self.flight_mode"), ("FlightMode", "b", "b", "ret = self.toggle_flight_mode(self, args[0])"), ("Block", "ub", "b", "ret = self.block(self, args[0], args[1])"), ], ) mock.AddProperties( MAIN_IFACE, dbus.Dictionary( { "DaemonVersion": parameters.get("DaemonVersion", "0.6.0"), "KeyControl": parameters.get("KeyControl", True), }, signature="sv", ), ) for i in individual_objects: path = "/org/freedesktop/URfkill/" + i mock.AddObject(path, "org.freedesktop.URfkill.Killswitch", {"state": mock.internal_states[i]}, [])