summaryrefslogtreecommitdiffstats
path: root/deluge/ui/webui/lib/pythonize.py
blob: 699c61daca3133076f8e455bcb5a68b14cdc0aba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
"""
some dbus to python type conversions
-decorator for interface
-wrapper class for proxy
"""
def pythonize(var):
    """translates dbus types back to basic python  types."""
    if isinstance(var, list):
        return [pythonize(value) for value in var]
    if isinstance(var, tuple):
        return tuple([pythonize(value) for value in var])
    if isinstance(var, dict):
        return dict(
        [(pythonize(key), pythonize(value)) for key, value in var.iteritems()]
        )

    for klass in [unicode, str, bool, int, float, long]:
        if isinstance(var,klass):
            return klass(var)
    return var

def pythonize_call(func):
    def deco(*args,**kwargs):
        return pythonize(func(*args, **kwargs))
    return deco

def pythonize_interface(func):
    def deco(*args, **kwargs):
        args = pythonize(args)
        kwargs = pythonize(kwargs)
        return func(*args, **kwargs)
    return deco

class PythonizeProxy(object):
    def __init__(self,proxy):
        self.proxy = proxy
    def __getattr__(self, key):
        return pythonize_call(getattr(self.proxy, key))