diff --git a/ogn/collect/receiver.py b/ogn/collect/receiver.py index 10b10cd..b2a5317 100644 --- a/ogn/collect/receiver.py +++ b/ogn/collect/receiver.py @@ -18,44 +18,58 @@ def update_receivers(): last_entry_sq = app.session.query(coalesce(func.max(Receiver.lastseen), '2015-01-01 00:00:00').label('last_entry')) \ .subquery() - last_receiver_beacon_sq = app.session.query(ReceiverBeacon.name, func.min(ReceiverBeacon.timestamp).label('firstseen'), func.max(ReceiverBeacon.timestamp).label('lastseen')) \ - .filter(ReceiverBeacon.timestamp >= last_entry_sq.c.last_entry) \ - .group_by(ReceiverBeacon.name) \ - .subquery() + last_receiver_beacon_sq = app.session.query(ReceiverBeacon.name, + func.min(ReceiverBeacon.timestamp).label('firstseen'), + func.max(ReceiverBeacon.timestamp).label('lastseen')) \ + .filter(ReceiverBeacon.timestamp >= last_entry_sq.columns.last_entry) \ + .group_by(ReceiverBeacon.name) \ + .subquery() # update existing receivers - sq = app.session.query(ReceiverBeacon.name, ReceiverBeacon.latitude, ReceiverBeacon.longitude, ReceiverBeacon.altitude, last_receiver_beacon_sq.c.firstseen, last_receiver_beacon_sq.c.lastseen, ReceiverBeacon.version, ReceiverBeacon.platform) \ - .filter(and_(ReceiverBeacon.name == last_receiver_beacon_sq.c.name, ReceiverBeacon.timestamp == last_receiver_beacon_sq.c.lastseen)) \ - .subquery() + sq = app.session.query(ReceiverBeacon.name, + ReceiverBeacon.latitude, + ReceiverBeacon.longitude, + ReceiverBeacon.altitude, + last_receiver_beacon_sq.columns.firstseen, + last_receiver_beacon_sq.columns.lastseen, + ReceiverBeacon.version, + ReceiverBeacon.platform) \ + .filter(and_(ReceiverBeacon.name == last_receiver_beacon_sq.columns.name, + ReceiverBeacon.timestamp == last_receiver_beacon_sq.columns.lastseen)) \ + .subquery() - # -set country code to None if lat or lon changed + # set country code to None if lat or lon changed upd = app.session.query(Receiver) \ - .filter(and_(Receiver.name == sq.c.name, - or_(Receiver.latitude != sq.c.latitude, - Receiver.longitude != sq.c.longitude) - ) - ) \ - .update({"latitude": sq.c.latitude, - "longitude": sq.c.longitude, - "country_code": None}) + .filter(and_(Receiver.name == sq.columns.name, + or_(Receiver.latitude != sq.columns.latitude, + Receiver.longitude != sq.columns.longitude))) \ + .update({"latitude": sq.columns.latitude, + "longitude": sq.columns.longitude, + "country_code": ""}) logger.info("Count of receivers who changed lat or lon: {}".format(upd)) app.session.commit() - # -update lastseen of known receivers + # update lastseen of known receivers upd = app.session.query(Receiver) \ - .filter(Receiver.name == sq.c.name) \ - .update({"altitude": sq.c.altitude, - "lastseen": sq.c.lastseen, - "version": sq.c.version, - "platform": sq.c.platform}) + .filter(Receiver.name == sq.columns.name) \ + .update({"altitude": sq.columns.altitude, + "lastseen": sq.columns.lastseen, + "version": sq.columns.version, + "platform": sq.columns.platform}) logger.info("Count of receivers who where updated: {}".format(upd)) # add new receivers - empty_sq = app.session.query(ReceiverBeacon.name, ReceiverBeacon.latitude, ReceiverBeacon.longitude, ReceiverBeacon.altitude, last_receiver_beacon_sq.c.firstseen, last_receiver_beacon_sq.c.lastseen, ReceiverBeacon.version, ReceiverBeacon.platform) \ - .filter(and_(ReceiverBeacon.name == last_receiver_beacon_sq.c.name, - ReceiverBeacon.timestamp == last_receiver_beacon_sq.c.lastseen)) \ + empty_sq = app.session.query(ReceiverBeacon.name, + ReceiverBeacon.latitude, + ReceiverBeacon.longitude, + ReceiverBeacon.altitude, + last_receiver_beacon_sq.columns.firstseen, + last_receiver_beacon_sq.columns.lastseen, + ReceiverBeacon.version, ReceiverBeacon.platform) \ + .filter(and_(ReceiverBeacon.name == last_receiver_beacon_sq.columns.name, + ReceiverBeacon.timestamp == last_receiver_beacon_sq.columns.lastseen)) \ .outerjoin(Receiver, Receiver.name == ReceiverBeacon.name) \ .filter(Receiver.name == null()) \ .order_by(ReceiverBeacon.name)