Fix Odata filters

This commit is contained in:
2026-01-04 15:46:04 +01:00
parent ceafee6953
commit ec34d53ebc

View File

@@ -1,6 +1,6 @@
from datetime import datetime
from flask import request, jsonify
from flask import request, jsonify, Flask
from src.models import logger
from src.services.mongo_service import MongoService
@@ -58,6 +58,7 @@ class TelemetryController:
def gps(self):
try:
odata_filter = request.args.get("$filter")
logger.log_info(odata_filter)
start_timestamp, end_timestamp = self._extract_dates_from_odata(odata_filter)
logger.log_info(start_timestamp)
logger.log_info(end_timestamp)
@@ -101,3 +102,34 @@ class TelemetryController:
end_date = dt
return start_date, end_date
def extract_dates_from_odata(filter_str):
start_date = None
end_date = None
if not filter_str:
return start_date, end_date
conditions = filter_str.split("and")
for cond in conditions:
parts = cond.strip().split()
if len(parts) != 3:
continue
field, operator, value = parts
try:
parsed_value = int(value)
if operator == "ge":
start_date = parsed_value
elif operator == "le":
end_date = parsed_value
except ValueError:
logger.log_info(f"${value} is not a number")
return start_date, end_date
if __name__ == "__main__":
res = extract_dates_from_odata("from ge 1735680000 and to le 1736015999")
print(res)