Fix Odata filters
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user