pympris
pympris copied to clipboard
Convert Python to Dbus
Is correct one function similar to this (the inverse of the function from common.py??
def py2dbus(py_obj):
""" derived from pympris project
https://raw.githubusercontent.com/wistful/pympris/master/pympris/common.py
"""
import dbus
from functools import wraps, partial
from collections import namedtuple
_isinstance = partial(isinstance, py_obj)
ConvertType = namedtuple('ConvertType', 'pytype dbustypes')
pyint = ConvertType((int, ), dbus.Int64)
pybool = ConvertType((bool, ), dbus.Boolean)
pynone = ConvertType((type(None), ), dbus.String)
pyfloat = ConvertType((float, ), dbus.Double)
pylist = ConvertType((list, ), lambda _obj: dbus.Array(map(py2dbus, py_obj)))
pytuple = ConvertType((tuple, ), lambda _obj: dbus.Array(map(py2dbus, py_obj)))
# types_str = (dbus.ObjectPath, dbus.Signature, dbus.String)
# if not PY3:
# types_str += (dbus.UTF8String,)
# pystr = ConvertType(str if PY3 else unicode, types_str)
# pystr = ConvertType((basestring, ), dbus.String)
pyunicodestr = ConvertType((unicode, ), dbus.String)
pystr = ConvertType((basestring,), dbus.String)
pydict = ConvertType((dict, ),
lambda _obj: dbus.Dictionary(zip(map(py2dbus, py_obj.keys()), map(py2dbus, py_obj.values())),
signature='sv')
)
for conv in (pyint, pybool, pyfloat, pystr, pyunicodestr, pylist, pytuple, pydict, pynone):
if any(map(_isinstance, conv.pytype)):
return conv.dbustypes(py_obj)
else:
return py_obj