aboutsummaryrefslogtreecommitdiff
path: root/gnunet/gns.py
blob: b2d5e64685b891219f3a32633a75bc96834b4ea8 (plain) (blame)
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
39
40
41
42
43
44
45
46
47
48
import dbus

from gnunet._dbus_utils import *

from gnunet import *
import gnunet.crypto as crypto
import gnunet.gnsrecord as gnsrecord


def lookup(name, zone, record_type, only_cached):
    name = str(name)
    zone = dbusize(crypto.EcdsaPublicKey(zone), True)
    if record_type not in gnsrecord.types:
        raise ValueError("'record_type' must be one of %s" % gnsrecord.types)
    # record_type = dbus.UInt32(gnsrecord.types[record_type], variant_level=1)
    record_type = dbus.String(record_type, variant_level=1)
    only_cached = dbus.Boolean(only_cached)

    try:
        results = sysbus.get_object("gnu.gnunet.gns", "/").lookup(name, zone, record_type, only_cached)
    except dbus.DBusException as e:
        handle_exception(e, "gns", "gnu.gnunet.gns")

    ret = []
    for r in results:
        record_type = str(r[0])
        private = False
        pending = False
        shadow = False
        relative = False
        for f in r[1]:
            if f == "private":
                private = True
            if f == "pending":
                pending = True
            if f == "shadow":
                shadow = True
            if f == "relative_expiration":
                relative = True
        data = str(r[2])
        expiration_time = None
        if relative:
            expiration_time = pythonize(r[3], datetime.timedelta)
        else:
            expiration_time = pythonize(r[3], datetime.datetime)
        ret.append(gnsrecord.Data(record_type, data, expiration_time, private, pending, shadow))

    return ret