Redirect all queries to Relay Search
[compass.git] / util.py
blobfe9d7d7c01d6e60726c693a02beccce38341919c
1 import json
2 import shlex
4 def JSON(val):
5 try:
6 return json.loads(val)
7 except (ValueError,TypeError):
8 return []
10 def List(val):
11 if val:
12 lex = shlex.shlex(val.encode('ascii','ignore'))
13 lex.whitespace += "[],"
14 return list(lex)
15 else:
16 return []
18 def NullFn(val):
19 return val
21 def Int(val):
22 try:
23 return int(val)
24 except:
25 return None
27 def Boolean(val):
28 if val == True:
29 return True
31 if val in ("false", "False", "FALSE", "F"):
32 return False
33 if val in ("true", "True", "TRUE", "T"):
34 return True
36 return False
38 class Result():
39 WEIGHT_FIELDS = {
40 'consensus_weight_fraction': 'cw',
41 'advertised_bandwidth_fraction': 'adv_bw',
42 'guard_probability': 'p_guard',
43 'middle_probability': 'p_middle',
44 'exit_probability': 'p_exit',
47 def __init__(self, zero_probs = False):
48 self.index = None
49 self.cw = 0.0 if zero_probs else None
50 self.adv_bw = 0.0 if zero_probs else None
51 self.p_guard = 0.0 if zero_probs else None
52 self.p_exit = 0.0 if zero_probs else None
53 self.p_middle = 0.0 if zero_probs else None
54 self.nick = ""
55 self.fp = ""
56 self.link = True
57 self.exit = ""
58 self.guard = ""
59 self.cc = ""
60 self.primary_ip = ""
61 self.as_no = ""
62 self.as_name = ""
63 self.as_info = ""
65 def __getitem__(self,prop):
66 getattr(self,prop)
68 def __setitem__(self,prop,val):
69 setattr(self,prop,val)
71 def jsonify(self):
72 return self.__dict__
74 def printable_fields(self,links=False):
75 """
76 Return this Result object as a list with the fields in the order
77 expected for printing.
78 """
79 format_str = "%.4f%%|%.4f%%|%.4f%%|%.4f%%|%.4f%%|%s|%s|%s|%s|%s|%s|%s"
80 formatted = format_str % ( self.cw, self.adv_bw, self.p_guard, self.p_middle, self.p_exit,
81 self.nick,
82 "https://atlas.torproject.org/#details/" + self.fp if links else self.fp,
83 self.exit, self.guard, self.cc, self.primary_ip, self.as_info )
84 return formatted.split("|")
86 class ResultEncoder(json.JSONEncoder):
87 def default(self,obj):
88 if isinstance(obj,Result):
89 return obj.__dict__
90 return json.JSONEncoder.default(self,obj)