Commit 584b13cc0826cea01030885a8919743e0403f5d5

Authored by Antoine Goutenoir
1 parent 0ff25083
Exists in master

Order the results, and unify the output schema.

Now we probably can freeze and start building on it.

/spend 6h
Showing 1 changed file with 31 additions and 12 deletions   Show diff stats
flaskr/controllers/main_controller.py
@@ -230,9 +230,11 @@ def compute(): # process the queue of estimation requests @@ -230,9 +230,11 @@ def compute(): # process the queue of estimation requests
230 _results = {} 230 _results = {}
231 footprints = {} 231 footprints = {}
232 232
  233 + destinations_by_city_key = {}
  234 +
233 cities_sum = {} 235 cities_sum = {}
234 for model in emission_models: 236 for model in emission_models:
235 - cities = {} 237 + cities_dict = {}
236 for _destination in _destinations: 238 for _destination in _destinations:
237 footprint = model.compute_travel_footprint( 239 footprint = model.compute_travel_footprint(
238 origin_latitude=_origin.latitude, 240 origin_latitude=_origin.latitude,
@@ -243,13 +245,22 @@ def compute(): # process the queue of estimation requests @@ -243,13 +245,22 @@ def compute(): # process the queue of estimation requests
243 245
244 city_key = get_city_key(_destination) 246 city_key = get_city_key(_destination)
245 247
246 - if city_key not in cities:  
247 - cities[city_key] = 0.0  
248 - cities[city_key] += footprint 248 + destinations_by_city_key[city_key] = _destination
  249 +
  250 + if city_key not in cities_dict:
  251 + cities_dict[city_key] = {
  252 + 'city': city_key,
  253 + 'address': _destination.address,
  254 + 'footprint': 0.0,
  255 + }
  256 + cities_dict[city_key]['footprint'] += footprint
249 if city_key not in cities_sum: 257 if city_key not in cities_sum:
250 cities_sum[city_key] = 0.0 258 cities_sum[city_key] = 0.0
251 cities_sum[city_key] += footprint 259 cities_sum[city_key] += footprint
252 260
  261 + cities = [cities_dict[k] for k in cities_dict.keys()]
  262 + cities = sorted(cities, key=lambda c: c['footprint'])
  263 +
253 footprints[model.slug] = { 264 footprints[model.slug] = {
254 'cities': cities, 265 'cities': cities,
255 } 266 }
@@ -258,12 +269,19 @@ def compute(): # process the queue of estimation requests @@ -258,12 +269,19 @@ def compute(): # process the queue of estimation requests
258 269
259 total = 0.0 270 total = 0.0
260 271
261 - cities_mean = {} 272 + cities_mean_dict = {}
262 for city in cities_sum.keys(): 273 for city in cities_sum.keys():
263 city_mean = 1.0 * cities_sum[city] / len(emission_models) 274 city_mean = 1.0 * cities_sum[city] / len(emission_models)
264 - cities_mean[city] = city_mean 275 + cities_mean_dict[city] = {
  276 + 'address': destinations_by_city_key[city].address,
  277 + 'city': city,
  278 + 'footprint': city_mean,
  279 + }
265 total += city_mean 280 total += city_mean
266 281
  282 + cities_mean = [cities_mean_dict[k] for k in cities_mean_dict.keys()]
  283 + cities_mean = sorted(cities_mean, key=lambda c: c['footprint'])
  284 +
267 _results['mean_footprint'] = { 285 _results['mean_footprint'] = {
268 'cities': cities_mean 286 'cities': cities_mean
269 } 287 }
@@ -300,22 +318,23 @@ def compute(): # process the queue of estimation requests @@ -300,22 +318,23 @@ def compute(): # process the queue of estimation requests
300 # Run Scenario A for each Destination, and expose optimum Destination. 318 # Run Scenario A for each Destination, and expose optimum Destination.
301 # 319 #
302 else: 320 else:
303 - results = {  
304 - 'cities': [],  
305 - } 321 + result_cities = []
306 for destination in destinations: 322 for destination in destinations:
307 city_key = get_city_key(destination) 323 city_key = get_city_key(destination)
308 324
309 city_results = compute_one_to_many( 325 city_results = compute_one_to_many(
310 - _origin=destinations[0], 326 + _origin=destination,
311 _destinations=origins, 327 _destinations=origins,
312 use_train_below=0, 328 use_train_below=0,
313 ) 329 )
314 city_results['city'] = city_key 330 city_results['city'] = city_key
315 city_results['address'] = destination.address 331 city_results['address'] = destination.address
316 - results['cities'].append(city_results) 332 + result_cities.append(city_results)
317 333
318 - # Todo: sort cities, and perhaps extract optimum 334 + result_cities = sorted(result_cities, key=lambda c: int(c['total']))
  335 + results = {
  336 + 'cities': result_cities,
  337 + }
319 338
320 # WRITE RESULTS INTO THE DATABASE ######################################### 339 # WRITE RESULTS INTO THE DATABASE #########################################
321 340