diff options
Diffstat (limited to 'gnunet/gns.py')
-rw-r--r-- | gnunet/gns.py | 48 |
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 @@ | |||
1 | import dbus | ||
2 | |||
3 | from gnunet._dbus_utils import * | ||
4 | |||
5 | from gnunet import * | ||
6 | import gnunet.crypto as crypto | ||
7 | import gnunet.gnsrecord as gnsrecord | ||
8 | |||
9 | def 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 | |||