-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
63 lines (48 loc) · 1.69 KB
/
app.py
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from bottle import route, run, template, request, response, static_file
import urllib2, json
@route('/static/<filename>')
def server_static(filename):
return static_file(filename, root='./static')
@route('/fonts/<filename>')
def server_static(filename):
return static_file(filename, root='./fonts')
@route('/thread/')
def index():
id = request.query.id
type = request.query.type
thread_json = json.loads(fetch_url('https://decidim.barcelona/api/'+type+'s/'+id+'.json'))[type]
thread_json['depth'] = 0
thread_json['children'] = []
page = 1
while page!=None:
comments_page = json.loads(fetch_url('https://decidim.barcelona/api/comments.json?commentable[id]='+id+'&commentable[type]='+type.title()+'&order=oldest&page='+str(page)))
for comment in comments_page['comments']:
comment['children'] = []
if comment['ancestry'] == None:
comment['depth'] = 1
thread_json['children'].append(comment)
else:
comment['depth'] = 2+comment['ancestry'].count('/')
ancestry_ids = comment['ancestry'].split('/')
base = thread_json['children']
for ancestry_id in ancestry_ids:
for child in base:
if str(child['id'])==ancestry_id:
new_base = child['children']
base = new_base
base.append(comment)
page = comments_page['meta']['next_page']
# Dump data into data.json
f=open('./static/data.json','w')
f.write(json.dumps(thread_json , sort_keys=False, indent=4, separators=(',', ': ')) )
f.close()
# Return index.html
f = open('./static/index.html')
a = f.read()
f.close()
return template(a)
def fetch_url(query):
req = urllib2.Request(query)
response = urllib2.urlopen(req)
return response.read()
run(host='localhost', port=8080, debug=True)