ogn-python/ogn_python/backend/ognrange.py

39 wiersze
1.2 KiB
Python
Czysty Zwykły widok Historia

import json
from datetime import datetime, timedelta
from sqlalchemy import func, case
from sqlalchemy.sql.expression import label
from ogn_python.model import Receiver
2019-03-13 07:34:15 +00:00
from ogn_python import db
def alchemyencoder(obj):
2019-01-06 20:03:29 +00:00
"""JSON encoder function for SQLAlchemy special classes."""
import decimal
from datetime import datetime
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M')
elif isinstance(obj, decimal.Decimal):
return float(obj)
2019-03-13 07:34:15 +00:00
def stations2_filtered_pl():
last_10_minutes = datetime.utcnow() - timedelta(minutes=10)
2019-03-13 07:34:15 +00:00
query = db.session.query(
Receiver.name.label('s'),
2017-12-29 15:30:50 +00:00
label('lt', func.round(func.ST_Y(Receiver.location_wkt) * 10000) / 10000),
label('lg', func.round(func.ST_X(Receiver.location_wkt) * 10000) / 10000),
case([(Receiver.lastseen > last_10_minutes, "U")],
else_="D").label('u'),
Receiver.lastseen.label('ut'),
label('v', Receiver.version + '.' + Receiver.platform)) \
.order_by(Receiver.lastseen)
2019-03-13 07:34:15 +00:00
res = db.session.execute(query)
2017-12-29 15:30:50 +00:00
stations = json.dumps({'stations': [dict(r) for r in res]}, default=alchemyencoder)
return stations