diff --git a/project/main/data/get_data_helper.py b/project/main/data/get_data_helper.py index e268c32..e54616a 100644 --- a/project/main/data/get_data_helper.py +++ b/project/main/data/get_data_helper.py @@ -1,6 +1,7 @@ import datetime import math - +import dateutil.parser +import dateutil.tz import project.main.exceptions as exceptions import project.main.same_function_helper as same_helper import project.main.util_helper as util_helper @@ -77,9 +78,10 @@ def queryDBGasAverageMeasurement(qhawax_name, gas_name): qhawax_id = same_helper.getQhawaxID(qhawax_name) if qhawax_id != None: - initial_timestamp = datetime.datetime.now() - last_timestamp = datetime.datetime.now() - datetime.timedelta(hours=24) - + initial_timestamp = datetime.datetime.now(dateutil.tz.tzutc()).replace(minute=0,second=0, microsecond=0) + last_timestamp = (datetime.datetime.now(dateutil.tz.tzutc()) + - datetime.timedelta(hours=23)).replace(minute=0,second=0, microsecond=0) + column_array = [ AirQualityMeasurement.CO.label("sensor"), AirQualityMeasurement.H2S.label("sensor"), @@ -96,14 +98,21 @@ def queryDBGasAverageMeasurement(qhawax_name, gas_name): AirQualityMeasurement.timestamp_zone, column_array[i], ) - - return ( - session.query(*sensors) - .filter(AirQualityMeasurement.qhawax_id == qhawax_id) - .filter(AirQualityMeasurement.timestamp_zone >= last_timestamp) - .filter(AirQualityMeasurement.timestamp_zone <= initial_timestamp) - .order_by(AirQualityMeasurement.timestamp_zone.asc()) - .all() + series = session.query( + db.func.generate_series(last_timestamp,initial_timestamp, + datetime.timedelta(hours=1)).label('timestamp_zone')).subquery() + values = session.query(*sensors).\ + filter(AirQualityMeasurement.qhawax_id == qhawax_id).\ + filter(AirQualityMeasurement.timestamp_zone >= last_timestamp).\ + filter(AirQualityMeasurement.timestamp_zone <= initial_timestamp).\ + subquery() + + return ( + session.query(values.c.sensor,series.c.timestamp_zone, + db.func.coalesce(values.c.sensor, 0)).\ + outerjoin(series, values.c.timestamp_zone == series.c.timestamp_zone, full=True).\ + order_by(series.c.timestamp_zone).\ + all() ) return None diff --git a/project/main/util_helper.py b/project/main/util_helper.py index 3d839a1..bd3a9ab 100644 --- a/project/main/util_helper.py +++ b/project/main/util_helper.py @@ -208,38 +208,13 @@ def areFieldsValid(data): def getFormatData(gas_average_measurement): gas_average_measurement_list = [] if gas_average_measurement is not None: - data = exceptions.checkVariable_helper(gas_average_measurement, list) - next_hour = -1 + data = exceptions.checkVariable_helper(gas_average_measurement, list) for measurement in gas_average_measurement: gas_measurement = measurement._asdict() - hour = gas_measurement["timestamp_zone"].hour - if next_hour == -1: - gas_average_measurement_list.append(gas_measurement) - next_hour = hour + 1 - else: - if hour == next_hour: - gas_average_measurement_list.append(gas_measurement) - else: - if ( - next_hour > hour - ): # si next_hour > hour => se resta con 24 horas - diff_0 = abs(24 - next_hour) - diff = diff_0 + hour - else: - diff = abs(hour - next_hour - 1) - for i in range(1, diff + 1): - new_variable = { - "timestamp_zone": before_date - + datetime.timedelta(hours=i), - "sensor": "", - } - gas_average_measurement_list.append(new_variable) - gas_average_measurement_list.append(gas_measurement) - next_hour = hour + 1 - before_date = gas_measurement["timestamp_zone"] - if next_hour == 24: - next_hour = 0 - return gas_average_measurement_list + if gas_measurement["sensor"] is None: + gas_measurement["sensor"]="" + gas_average_measurement_list.append(gas_measurement) + return gas_average_measurement_list return None