Skip to content
Snippets Groups Projects
Commit 9dd173b5 authored by Sara Savanovic Djordjevic's avatar Sara Savanovic Djordjevic
Browse files

upate: sql query and json conversion, not tested

parent ecaf695c
No related branches found
No related tags found
1 merge request!2App2
......@@ -3,79 +3,75 @@ import json
# get_markers requests all marker data or valid markers, converts the data to json, and writes
# the data to the response object
def get_all_markers(self, cursor, valid: bool):
def get_all_markers(self, cursor, valid: bool, waterBodyName):
try:
# NB: interval temporarily hard coded to 5 days
if valid:
cursor.execute('''
SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, d.Latitude, d.Longitude,
d.IceTop, d.IceBottom, d.CalculatedThickness, d.Accuracy, s.SensorType, s.Active,
c.CornerID, c.CornerLatitude, c.CornerLongitude, b.Name
SELECT m.MeasurementID, m.SensorID, m.TimeMeasured,
s.SensorType, s.Active,
b.Name,
d.SubDivisionID, d.GroupID, d.MinimumThickness,
d.AverageThickness, d.CenterLatitude, d.CenterLongitude,
d.Accuracy
FROM Measurement m
INNER JOIN Sensor s ON m.SensorID = s.SensorID
INNER JOIN Data d ON m.MeasurementID = d.MeasurementID
LEFT JOIN Corner c ON m.MeasurementID = c.MeasurementID
INNER JOIN BodyOfWater b ON m.WaterBodyName = b.Name
WHERE m.TimeMeasured > DATE_SUB(NOW(), INTERVAL 5 DAY);
''')
LEFT JOIN SubDivision d ON m.MeasurementID = d.MeasurementID
WHERE m.TimeMeasured > DATE_SUB(NOW(), INTERVAL 5 DAY) & b.Name = ?
''', waterBodyName)
else:
cursor.execute('''
SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, d.Latitude, d.Longitude,
d.IceTop, d.IceBottom, d.CalculatedThickness, d.Accuracy, s.SensorType, s.Active,
c.CornerID, c.CornerLatitude, c.CornerLongitude, b.Name
SELECT m.MeasurementID, m.SensorID, m.TimeMeasured,
s.SensorType, s.Active,
b.Name,
d.SubDivisionID, d.GroupID, d.MinimumThickness,
d.AverageThickness, d.CenterLatitude, d.CenterLongitude,
d.Accuracy
FROM Measurement m
INNER JOIN Sensor s ON m.SensorID = s.SensorID
INNER JOIN Data d ON m.MeasurementID = d.MeasurementID
LEFT JOIN Corner c ON m.MeasurementID = c.MeasurementID
INNER JOIN BodyOfWater b ON m.WaterBodyName = b.Name
''')
LEFT JOIN SubDivision d ON m.MeasurementID = d.MeasurementID
WHERE b.Name = ?
''', waterBodyName)
rows = cursor.fetchall()
# Container for all fetched measurement objects
measurement_data = {}
# Iterate over the fetched rows
# Iterate over all fetched rows
for row in rows:
measurement_id = row[0]
# Create data object for current row
data_object = {
'Latitude': row[3],
'Longitude': row[4],
'IceTop': row[5],
'IceBottom': row[6],
'CalculatedThickness': row[7],
'Accuracy': row[8]
}
# Create corner object for current row
corner_object = {
'CornerID': row[11],
'Latitude': row[12],
'Longitude': row[13]
# Create subdivision object for current row
sub_division = {
'SubDivisionID': row[3],
'GroupID': row[4],
'MinimumThickness': row[5],
'AverageThickness': row[6],
'CenterLatitude': row[7],
'CenterlONGITUDE': row[8],
'Accuracy': row[9]
}
# Check if measurement ID already exists in measurement_data
if measurement_id in measurement_data:
# Check if the data object already exists in the list
if data_object not in measurement_data[measurement_id]['Data']:
measurement_data[measurement_id]['Data'].append(data_object)
if sub_division not in measurement_data[measurement_id]['SubDivision']:
measurement_data[measurement_id]['SubDivision'].append(sub_division)
# Check if the corner object already exists in the list
if corner_object not in measurement_data[measurement_id]['Corners']:
measurement_data[measurement_id]['Corners'].append(corner_object)
else:
# Create a new entry for measurement_id if it does not already exist in the list
measurement_data[measurement_id] = {
'MeasurementID': measurement_id,
'TimeMeasured': row[2],
'Sensor': {
'Sensor': { # Each measurement only has one related sensor
'SensorID': row[1],
'SensorType': row[9],
'Active': bool(row[10])
},
'Data': [data_object],
'Corners': [corner_object],
'SubDivision': [sub_division], # Array of sub_division objects
'BodyOfWater': row[14]
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment