7 except (ValueError,TypeError):
12 lex
= shlex
.shlex(val
.encode('ascii','ignore'))
13 lex
.whitespace
+= "[],"
31 if val
in ("false", "False", "FALSE", "F"):
33 if val
in ("true", "True", "TRUE", "T"):
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):
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
65 def __getitem__(self
,prop
):
68 def __setitem__(self
,prop
,val
):
69 setattr(self
,prop
,val
)
74 def printable_fields(self
,links
=False):
76 Return this Result object as a list with the fields in the order
77 expected for printing.
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
,
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
):
90 return json
.JSONEncoder
.default(self
,obj
)