12 import twisted
.internet
.reactor
13 import twisted
.web
.resource
14 import twisted
.web
.server
16 import entangled_network
18 class ObserverResource(twisted
.web
.resource
.Resource
):
23 def node_pic(self
, node
, tree
):
25 name
= self
.names
[node
]
29 if node
in tree
['child_left']: left_node
= tree
['child_left'][node
]
30 if node
in tree
['child_right']: right_node
= tree
['child_right'][node
]
31 left_pic
= self
.node_pic(left_node
, tree
)
32 right_pic
= self
.node_pic(right_node
, tree
)
33 lefts
= left_pic
.split('\n')
34 retu
+= '-' + lefts
[0] + '\n'
35 for line
in lefts
[1:]:
36 retu
+= ' |' + line
+ '\n'
38 rights
= right_pic
.split('\n')
39 retu
+= ' -' + rights
[0] + '\n'
40 for line
in rights
[1:]:
41 retu
+= ' ' + line
+ '\n'
47 def node_dot(self
, node
, tree
):
49 if node
in tree
['child_left']:
50 left_node
= tree
['child_left'][node
]
51 retu
+= self
.names
[node
] + ' -> ' + self
.names
[left_node
] + ';\n'
52 retu
+= self
.node_dot(left_node
, tree
)
53 if node
in tree
['child_right']:
54 right_node
= tree
['child_right'][node
]
55 retu
+= self
.names
[node
] + ' -> ' + self
.names
[right_node
] + ';\n'
56 retu
+= self
.node_dot(right_node
, tree
)
58 def tree_pic_dot(self
, tree
):
60 retu
= 'digraph p2prfd {\n'
61 retu
+= self
.names
[root
] + ';\n'
62 retu
+= self
.node_dot(root
, tree
)
66 def tree_pic(self
, tree
):
68 return self
.node_pic(root
, tree
)
70 def add_name(self
, node
):
71 if node
and not (node
in self
.names
):
73 self
.names
[node
] = '%02d' % self
.last_name
75 def render_GET(self
, request
):
76 queries
= request
.args
77 request
.responseHeaders
.setRawHeaders('content-type', ['text/plain'])
78 print 'queries = %s' % repr(queries
)
80 if 'action' in queries
: action
= queries
['action'][0]
81 if action
== 'new_root':
82 feed_url
= queries
['rss'][0]
83 root
= eval(queries
['root'][0])
85 if feed_url
in self
.trees
:
88 self
.trees
[feed_url
] = {'root': None, 'child_left': {}, 'child_right': {}}
89 self
.trees
[feed_url
]['root'] = root
91 elif action
== 'adopt_child':
92 parent
= eval(queries
['parent'][0]);
93 child
= eval(queries
['child'][0]);
94 feed_url
= queries
['rss'][0]
95 loc
= queries
['loc'][0]
99 self
.trees
[feed_url
]['child_left'][parent
] = child
102 self
.trees
[feed_url
]['child_right'][parent
] = child
107 if 'rss' in queries
: rss
= queries
['rss'][0]
109 if rss
in self
.trees
:
110 if 'type' in queries
:
111 return self
.tree_pic_dot(self
.trees
[rss
])
113 return self
.tree_pic(self
.trees
[rss
])
114 else: return 'tree for %s not found' % rss
119 rsrc
= ObserverResource()
120 site
= twisted
.web
.server
.Site(rsrc
)
121 twisted
.internet
.reactor
.listenTCP(9501, site
)
122 twisted
.internet
.reactor
.run()