Skip to content

Instantly share code, notes, and snippets.

@belsander
Last active December 11, 2016 18:55
Show Gist options
  • Save belsander/521135a61c2aff0f655897792023b7b8 to your computer and use it in GitHub Desktop.
Save belsander/521135a61c2aff0f655897792023b7b8 to your computer and use it in GitHub Desktop.
import dbus
class dbus_parse(object):
__slots__ = ("__dbus_parse_dict", "__parse_dbus_dict", "__parse_dbus_list", "__parse_dbus_tuple", "__parse_dbus_var", "parse_dbus_vars")
def __init__(self):
self.__dbus_parse_dict = { dbus.String: str,
dbus.Int16: int, dbus.Int32: int, dbus.Int64: int,
dbus.UInt16: int, dbus.UInt32: int, dbus.UInt64: int,
dbus.Double: float,
dbus.Boolean: bool,
dbus.Dictionary: self.__parse_dbus_dict, dict: self.__parse_dbus_dict,
dbus.Array: self.__parse_dbus_list, list: self.__parse_dbus_list,
dbus.Struct: self.__parse_dbus_tuple, tuple: self.__parse_dbus_tuple }
def __parse_dbus_dict(self, dbus_dict):
dict_var = dict()
for dbus_dict_key, dbus_dict_var in dict(dbus_dict).iteritems():
dict_var.update({self.__parse_dbus_var(dbus_dict_key): self.__parse_dbus_var(dbus_dict_var)})
return dict_var
def __parse_dbus_list(self, dbus_list, return_tuple=False):
list_var = list()
for list_dbus_var in list(dbus_list):
list_var.append(self.__parse_dbus_var(list_dbus_var))
return tuple(list_var) if return_tuple else list_var
def __parse_dbus_tuple(self, dbus_tuple):
return self.__parse_dbus_list(dbus_tuple, return_tuple=True)
def __parse_dbus_var(self, dbus_var):
try:
return self.__dbus_parse_dict[type(dbus_var)](dbus_var)
except KeyError:
return dbus_var
def parse_dbus_vars(self, *args):
"""Parse D-Bus variables into Python variables
Args:
*args: All needed variables (supported D-Bus types: String, Boolean, Int16, Int32, Int64, UInt16, UInt32, UInt64, Dictionary, Array, Struct)
Returns:
All given D-Bus variables as parsed Python variables
Raises:
None
"""
return_vars = list()
for dbus_var in args:
return_vars.append(self.__parse_dbus_var(dbus_var))
return tuple(return_vars) if len(return_vars) > 1 else return_vars[0]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment