aboutsummaryrefslogtreecommitdiff
path: root/gnunet/gns.py
diff options
context:
space:
mode:
Diffstat (limited to 'gnunet/gns.py')
-rw-r--r--gnunet/gns.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/gnunet/gns.py b/gnunet/gns.py
new file mode 100644
index 0000000..57c1bd9
--- /dev/null
+++ b/gnunet/gns.py
@@ -0,0 +1,48 @@
1import dbus
2
3from gnunet._dbus_utils import *
4
5from gnunet import *
6import gnunet.crypto as crypto
7import gnunet.gnsrecord as gnsrecord
8
9def lookup(name, zone, record_type, only_cached):
10 name = str(name)
11 zone = dbusize(crypto.EcdsaPublicKey(zone), True)
12 if record_type not in gnsrecord.types:
13 raise ValueError("'record_type' must be one of %s" % gnsrecord.types)
14 #record_type = dbus.UInt32(gnsrecord.types[record_type], variant_level=1)
15 record_type = dbus.String(record_type, variant_level=1)
16 only_cached = dbus.Boolean(only_cached)
17
18 try:
19 results = sysbus.get_object("gnu.gnunet.gns", "/").lookup(name, zone, record_type, only_cached)
20 except dbus.DBusException as e:
21 handle_exception(e, "gns", "gnu.gnunet.gns")
22
23 ret = []
24 for r in results:
25 record_type = str(r[0])
26 private = False
27 pending = False
28 shadow = False
29 relative = False
30 for f in r[1]:
31 if f == "private":
32 private = True
33 if f == "pending":
34 pending = True
35 if f == "shadow":
36 shadow = True
37 if f == "relative_expiration":
38 relative = True
39 data = str(r[2])
40 expiration_time = None
41 if relative:
42 expiration_time = pythonize(r[3], datetime.timedelta)
43 else:
44 expiration_time = pythonize(r[3], datetime.datetime)
45 ret.append(gnsrecord.Data(record_type, data, expiration_time, private, pending, shadow))
46
47 return ret
48