/
charts_handler.py
141 lines (117 loc) · 5.08 KB
/
charts_handler.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import logging
import webapp2
from google.appengine.ext.webapp import template
import handler
import data_store
import config
import support_functions as sup
def genResultList(l_name,
t_name,
c_name,
d_name='everyone',):
laps = data_store.interface(l_name)\
.get_lap_times(t_name, c_name, driver_name=d_name)
logging.debug(str(laps))
return sup.calculate_lap_diffs(
[sup.lap_result.from_lap_record(l) for l in laps])
def genFastestResultList(l_name,
t_name,
c_name,
d_name='everyone',):
laps = data_store.interface(l_name)\
.get_fastest_lap_times(t_name, c_name, driver_name=d_name)
logging.debug(str(laps))
return sup.calculate_lap_diffs(
[sup.lap_result.from_lap_record(l.lap.get()) for l in laps])
def genClassList(l_name,
t_name,
c_name,
base_url,
d_name='everyone',
list_gen=genFastestResultList,
template_html='template_html/track_result.html'):
track_url = base_url + t_name
class_url = track_url + '/' + c_name
driver_url = class_url + '/'
template_params = {'trackname': t_name,
'carclassname': c_name,
'track_url': track_url,
'track_clas_url': class_url,
'driver_url_base': driver_url}
template_params['result_list'] = list_gen(l_name, t_name, c_name, d_name)
logging.debug(str(template_params['result_list']))
return template.render(template_html, template_params)
def genTrackList(l_name,
t_entity,
base_url,
d_name='everyone',
list_gen=genFastestResultList,
template_html='template_html/track_result.html'):
t_name = t_entity.get_name()
cclasses = data_store.carclass(t_entity)
html = ""
logging.debug(str(cclasses.get_all_names()))
for c_name in cclasses.get_all_names():
html += genClassList(l_name,
t_name,
c_name,
base_url,
d_name,
list_gen,
template_html)
return html
class handler(handler.hdlr):
def __init__(self, request=None, response=None):
super(handler, self).__init__(request=request, response=response)
def get(self, url_ext):
self.check_for_root()
logging.debug("charts_handler")
logging.debug("Params: %s", url_ext)
content = template.render('template_html/branding_bar.html',
{'page': "Charts"})
url_split = sup.url_split(url_ext)
l_name = config.root_node()
tracks_if = data_store.tracks(l_name)
num_args = len(url_split)
logging.debug("Num args: " + str(num_args) +
', list: ' + str(url_split))
if num_args == 0:
#generate html containing top times for each track found
logging.debug('list all')
t_list = tracks_if.get_all()
logging.debug('track list: ' + str(t_list))
for t_entity in tracks_if.get_all():
logging.debug('track: ' + t_entity.get_name())
content += genTrackList(l_name,
t_entity,
base_url='./',
list_gen=genFastestResultList)
elif num_args == 1:
#generate list of lap times for a specific track
logging.debug('list by track')
content += genTrackList(l_name,
tracks_if.get_by_name(url_split[0]),
base_url='./',
list_gen=genFastestResultList)
elif num_args == 2:
#list all times for a specific track and car class
logging.debug('list by track and car class')
content += genClassList(l_name,
url_split[0],
url_split[1],
base_url='../',
list_gen=genResultList)
elif num_args == 3:
#list all the times for a specific track, car class, and driver
logging.debug('list by track and car class and driver')
content += genClassList(l_name,
url_split[0],
url_split[1],
base_url='../../',
d_name=url_split[2],
list_gen=genResultList,
template_html='template_html/driver_result.html')
self.nav_bar_params = {'charts': 'class="active"'}
self.render(content)
logging.getLogger().setLevel(logging.INFO)
app = webapp2.WSGIApplication([(r'/charts(.*)', handler)], debug=True)