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 . import *
from . import crypto
from . import gnsrecord
from ._dbus_utils import *
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
|