kopia lustrzana https://github.com/glidernet/ogn-python
Added function update_devices
rodzic
316522d81c
commit
5233144df3
|
@ -84,53 +84,31 @@ def import_airports(path='tests/SeeYou.cup'):
|
||||||
|
|
||||||
|
|
||||||
@manager.command
|
@manager.command
|
||||||
def update_relations():
|
def update_devices():
|
||||||
"""Update AircraftBeacon and ReceiverBeacon relations"""
|
"""Add/update entries in devices table and update foreign keys in aircraft beacons."""
|
||||||
|
|
||||||
# Create missing Receiver from ReceiverBeacon
|
|
||||||
available_receivers = session.query(Receiver.name) \
|
|
||||||
.subquery()
|
|
||||||
|
|
||||||
missing_receiver_query = session.query(distinct(ReceiverBeacon.name)) \
|
|
||||||
.filter(ReceiverBeacon.receiver_id == null()) \
|
|
||||||
.filter(~ReceiverBeacon.name.in_(available_receivers))
|
|
||||||
|
|
||||||
ins = insert(Receiver).from_select([Receiver.name], missing_receiver_query)
|
|
||||||
session.execute(ins)
|
|
||||||
|
|
||||||
# Create missing Device from AircraftBeacon
|
# Create missing Device from AircraftBeacon
|
||||||
available_addresses = session.query(Device.address) \
|
available_devices = session.query(Device.address) \
|
||||||
.subquery()
|
.subquery()
|
||||||
|
|
||||||
missing_addresses_query = session.query(distinct(AircraftBeacon.address)) \
|
missing_devices_query = session.query(distinct(AircraftBeacon.address)) \
|
||||||
.filter(AircraftBeacon.device_id == null()) \
|
.filter(AircraftBeacon.device_id == null()) \
|
||||||
.filter(~AircraftBeacon.address.in_(available_addresses))
|
.filter(~AircraftBeacon.address.in_(available_devices))
|
||||||
|
|
||||||
ins2 = insert(Device).from_select([Device.address], missing_addresses_query)
|
ins = insert(Device).from_select([Device.address], missing_devices_query)
|
||||||
session.execute(ins2)
|
res = session.execute(ins)
|
||||||
session.commit()
|
insert_count = res.rowcount
|
||||||
print("Inserted {} Receivers and {} Devices".format(ins, ins2))
|
|
||||||
return
|
|
||||||
|
|
||||||
# Update AircraftBeacons
|
# Update relations to aircraft beacons
|
||||||
upd = session.query(AircraftBeacon) \
|
upd = session.query(AircraftBeacon) \
|
||||||
.filter(AircraftBeacon.device_id == null()) \
|
.filter(AircraftBeacon.device_id == null()) \
|
||||||
.filter(AircraftBeacon.receiver_id == null()) \
|
|
||||||
.filter(AircraftBeacon.address == Device.address) \
|
.filter(AircraftBeacon.address == Device.address) \
|
||||||
.filter(AircraftBeacon.receiver_name == Receiver.name) \
|
.update({AircraftBeacon.device_id: Device.id},
|
||||||
.update({AircraftBeacon.device_id: Device.id,
|
|
||||||
AircraftBeacon.receiver_id: Receiver.id},
|
|
||||||
synchronize_session='fetch')
|
|
||||||
|
|
||||||
upd2 = session.query(ReceiverBeacon) \
|
|
||||||
.filter(ReceiverBeacon.receiver_id == null()) \
|
|
||||||
.filter(ReceiverBeacon.receiver_name == Receiver.name) \
|
|
||||||
.update({Receiver.name: ReceiverBeacon.receiver_name},
|
|
||||||
synchronize_session='fetch')
|
synchronize_session='fetch')
|
||||||
|
|
||||||
session.commit()
|
session.commit()
|
||||||
print("Updated {} AircraftBeacons and {} ReceiverBeacons".
|
print("Inserted {} Devices".format(insert_count))
|
||||||
format(upd, upd2))
|
print("Updated {} AircraftBeacons".format(upd))
|
||||||
|
|
||||||
|
|
||||||
@manager.command
|
@manager.command
|
||||||
|
@ -187,6 +165,7 @@ def update_receivers():
|
||||||
.update({Receiver.version: status_changed.c.version,
|
.update({Receiver.version: status_changed.c.version,
|
||||||
Receiver.platform: status_changed.c.platform},
|
Receiver.platform: status_changed.c.platform},
|
||||||
synchronize_session='fetch')
|
synchronize_session='fetch')
|
||||||
|
|
||||||
# Update relations to aircraft beacons
|
# Update relations to aircraft beacons
|
||||||
upd3 = session.query(AircraftBeacon) \
|
upd3 = session.query(AircraftBeacon) \
|
||||||
.filter(and_(AircraftBeacon.receiver_id == null(), AircraftBeacon.receiver_name == Receiver.name)) \
|
.filter(and_(AircraftBeacon.receiver_id == null(), AircraftBeacon.receiver_name == Receiver.name)) \
|
||||||
|
|
Ładowanie…
Reference in New Issue