pympris icon indicating copy to clipboard operation
pympris copied to clipboard

Convert Python to Dbus

Open ghost opened this issue 8 years ago • 0 comments

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

ghost avatar Sep 19 '16 16:09 ghost