aboutsummaryrefslogtreecommitdiff
path: root/gnunet/gns.py
blob: 57c1bd954be22f89c73f67ef0534bae1270122e1 (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