From ef63132f8398d376093d0efb7702057db3f85413 Mon Sep 17 00:00:00 2001 From: Conrad Date: Tue, 29 May 2018 12:18:14 -0400 Subject: [PATCH] Return a space id for events --- app/controllers/event.py | 42 +++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/app/controllers/event.py b/app/controllers/event.py index 029f654..b98e763 100644 --- a/app/controllers/event.py +++ b/app/controllers/event.py @@ -56,11 +56,11 @@ class EventController(RestController): """ if 'building_id[]' in filter_data: building_ids = filter_data.getlist('building_id[]') - building_to_metadata_ids = self.get_metadata_ids_for_buildings(building_ids) + building_to_ids = self.get_ids_for_buildings(building_ids) metadata_ids = [ - metadata_id - for sublist in building_to_metadata_ids.values() - for metadata_id in sublist + id_dict['metadata_id'] + for sublist in building_to_ids.values() + for id_dict in sublist ] if not len(metadata_ids): return [] @@ -72,13 +72,21 @@ class EventController(RestController): order=filter_data.get('order'), ) # A dictionary that links metadata ids with their building id - building_id_dict = { - metadata_id: building_id - for building_id, sublist in building_to_metadata_ids.items() - for metadata_id in sublist + metadata_to_building_id_dict = { + id_dict['metadata_id']: building_id + for building_id, sublist in building_to_ids.items() + for id_dict in sublist + } + + # A dictionary that links metadata ids with their space_id + metadata_to_space_id_dict = { + id_dict['metadata_id']: id_dict['space_id'] + for sublist in building_to_ids.values() + for id_dict in sublist } for event in events: - event['building_id'] = building_id_dict[event['metadata_id']] + event['building_id'] = metadata_to_building_id_dict[event['metadata_id']] + event['space_id'] = metadata_to_space_id_dict[event['metadata_id']] elif 'metadata_id[]' in filter_data: metadata_ids = filter_data.getlist('metadata_id[]') @@ -163,7 +171,7 @@ class EventController(RestController): }) return return_list - def get_metadata_ids_for_buildings(self, building_ids): + def get_ids_for_buildings(self, building_ids): ''' A function that takes in a list of building ids and returns metadata ids for those buildings ''' # To stop sql injection we have to insert this way building_id_insert_dict = { @@ -172,7 +180,9 @@ class EventController(RestController): sql = ''' SELECT meta.id AS metadata_id, - gateway.building_id + gateway.building_id, + gateway.space_id as gateway_space_id, + senseware_node.space_id node_space_id FROM sensor.gateway as gateway LEFT JOIN sensor.senseware_node AS senseware_node ON senseware_node.gateway_id = gateway.id LEFT JOIN iot.metadata_awair AS awair ON gateway.gateway_id = awair.device_id::text @@ -192,7 +202,13 @@ class EventController(RestController): return_dict = {} for row in res.fetchall(): if row[1] in return_dict: - return_dict[row[1]].append(row[0]) + return_dict[row[1]].append({ + 'metadata_id': row[0], + 'space_id': row[3] if row[3] else row[2], + }) else: - return_dict[row[1]] = [row[0]] + return_dict[row[1]] = [{ + 'metadata_id': row[0], + 'space_id': row[3] if row[3] else row[2], + }] return return_dict -- GitLab