kopia lustrzana https://github.com/glidernet/ogn-python
Replace duration with hybrid_property and add status to AircraftBeacon
rodzic
51ea4e2fad
commit
98db7fc5b3
|
@ -0,0 +1,27 @@
|
|||
"""TakeoffLanding: add status, remove duration
|
||||
|
||||
Revision ID: 0c66dabb0be9
|
||||
Revises: 5717cf8e17c
|
||||
Create Date: 2016-10-31 17:54:24.170607
|
||||
|
||||
"""
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '0c66dabb0be9'
|
||||
down_revision = '5717cf8e17c'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.add_column('aircraft_beacon', sa.Column('status', sa.SmallInteger))
|
||||
op.create_index('ix_aircraft_beacon_status', 'aircraft_beacon', ['status'])
|
||||
op.drop_column('takeoff_landing', 'duration')
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.drop_column('aircraft_beacon', 'status')
|
||||
op.add_column('takeoff_landing', sa.Column('duration', sa.Interval))
|
|
@ -51,8 +51,7 @@ def compute_logbook_entries(session=None):
|
|||
sq.c.timestamp.label('reftime'),
|
||||
sq.c.device_id.label('device_id'),
|
||||
sq.c.timestamp.label('takeoff_timestamp'), sq.c.track.label('takeoff_track'), sq.c.airport_id.label('takeoff_airport_id'),
|
||||
sq.c.timestamp_next.label('landing_timestamp'), sq.c.track_next.label('landing_track'), sq.c.airport_id_next.label('landing_airport_id'),
|
||||
label('duration', sq.c.timestamp_next - sq.c.timestamp)) \
|
||||
sq.c.timestamp_next.label('landing_timestamp'), sq.c.track_next.label('landing_track'), sq.c.airport_id_next.label('landing_airport_id')) \
|
||||
.filter(and_(sq.c.is_takeoff == true(), sq.c.is_takeoff_next == false())) \
|
||||
.filter(sq.c.device_id == sq.c.device_id_next) \
|
||||
.filter(func.date(sq.c.timestamp_next) == func.date(sq.c.timestamp))
|
||||
|
@ -62,8 +61,7 @@ def compute_logbook_entries(session=None):
|
|||
sq.c.timestamp.label('reftime'),
|
||||
sq.c.device_id.label('device_id'),
|
||||
sq.c.timestamp.label('takeoff_timestamp'), sq.c.track.label('takeoff_track'), sq.c.airport_id.label('takeoff_airport_id'),
|
||||
null().label('landing_timestamp'), null().label('landing_track'), null().label('landing_airport_id'),
|
||||
null().label('duration')) \
|
||||
null().label('landing_timestamp'), null().label('landing_track'), null().label('landing_airport_id')) \
|
||||
.filter(and_(sq.c.is_takeoff == true(), sq.c.is_takeoff_next == false())) \
|
||||
.filter(sq.c.device_id == sq.c.device_id_next) \
|
||||
.filter(func.date(sq.c.timestamp_next) != func.date(sq.c.timestamp))
|
||||
|
@ -72,8 +70,7 @@ def compute_logbook_entries(session=None):
|
|||
sq.c.timestamp_next.label('reftime'),
|
||||
sq.c.device_id.label('device_id'),
|
||||
null().label('takeoff_timestamp'), null().label('takeoff_track'), null().label('takeoff_airport_id'),
|
||||
sq.c.timestamp_next.label('landing_timestamp'), sq.c.track_next.label('landing_track'), sq.c.airport_id_next.label('landing_airport_id'),
|
||||
null().label('duration')) \
|
||||
sq.c.timestamp_next.label('landing_timestamp'), sq.c.track_next.label('landing_track'), sq.c.airport_id_next.label('landing_airport_id')) \
|
||||
.filter(and_(sq.c.is_takeoff == true(), sq.c.is_takeoff_next == false())) \
|
||||
.filter(sq.c.device_id == sq.c.device_id_next) \
|
||||
.filter(func.date(sq.c.timestamp_next) != func.date(sq.c.timestamp))
|
||||
|
@ -83,8 +80,7 @@ def compute_logbook_entries(session=None):
|
|||
sq.c.timestamp.label('reftime'),
|
||||
sq.c.device_id.label('device_id'),
|
||||
null().label('takeoff_timestamp'), null().label('takeoff_track'), null().label('takeoff_airport_id'),
|
||||
sq.c.timestamp.label('landing_timestamp'), sq.c.track.label('landing_track'), sq.c.airport_id.label('landing_airport_id'),
|
||||
null().label('duration')) \
|
||||
sq.c.timestamp.label('landing_timestamp'), sq.c.track.label('landing_track'), sq.c.airport_id.label('landing_airport_id')) \
|
||||
.filter(sq.c.is_takeoff == false()) \
|
||||
.filter(or_(sq.c.device_id != sq.c.device_id_prev,
|
||||
sq.c.is_takeoff_prev == false(),
|
||||
|
@ -95,8 +91,7 @@ def compute_logbook_entries(session=None):
|
|||
sq.c.timestamp.label('reftime'),
|
||||
sq.c.device_id.label('device_id'),
|
||||
sq.c.timestamp.label('takeoff_timestamp'), sq.c.track.label('takeoff_track'), sq.c.airport_id.label('takeoff_airport_id'),
|
||||
null().label('landing_timestamp'), null().label('landing_track'), null().label('landing_airport_id'),
|
||||
null().label('duration')) \
|
||||
null().label('landing_timestamp'), null().label('landing_track'), null().label('landing_airport_id')) \
|
||||
.filter(sq.c.is_takeoff == true()) \
|
||||
.filter(or_(sq.c.device_id != sq.c.device_id_next,
|
||||
sq.c.is_takeoff_next == true(),
|
||||
|
@ -126,8 +121,7 @@ def compute_logbook_entries(session=None):
|
|||
"takeoff_airport_id": union_query.c.takeoff_airport_id,
|
||||
"landing_timestamp": union_query.c.landing_timestamp,
|
||||
"landing_track": union_query.c.landing_track,
|
||||
"landing_airport_id": union_query.c.landing_airport_id,
|
||||
"duration": union_query.c.duration})
|
||||
"landing_airport_id": union_query.c.landing_airport_id})
|
||||
|
||||
result = session.execute(upd)
|
||||
update_counter = result.rowcount
|
||||
|
@ -154,8 +148,7 @@ def compute_logbook_entries(session=None):
|
|||
Logbook.takeoff_airport_id,
|
||||
Logbook.landing_timestamp,
|
||||
Logbook.landing_track,
|
||||
Logbook.landing_airport_id,
|
||||
Logbook.duration),
|
||||
Logbook.landing_airport_id),
|
||||
new_logbook_entries)
|
||||
|
||||
result = session.execute(ins)
|
||||
|
|
|
@ -22,11 +22,11 @@ class AircraftBeacon(Beacon):
|
|||
software_version = Column(Float)
|
||||
hardware_version = Column(SmallInteger)
|
||||
real_address = Column(String(6))
|
||||
|
||||
flightlevel = Column(Float)
|
||||
|
||||
signal_power = Column(Float)
|
||||
|
||||
status = Column(SmallInteger)
|
||||
|
||||
# Relations
|
||||
receiver_id = Column(Integer, ForeignKey('receiver.id', ondelete='SET NULL'), index=True)
|
||||
receiver = relationship('Receiver', foreign_keys=[receiver_id])
|
||||
|
@ -46,7 +46,7 @@ class AircraftBeacon(Beacon):
|
|||
self.address,
|
||||
self.climb_rate,
|
||||
self.turn_rate,
|
||||
self.signal_strength,
|
||||
self.signal_power,
|
||||
self.error_count,
|
||||
self.frequency_offset,
|
||||
self.gps_status)
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
from sqlalchemy import Integer, DateTime, Interval, Column, ForeignKey
|
||||
from sqlalchemy import Integer, DateTime, Interval, Column, ForeignKey, case, null
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from .base import Base
|
||||
from sqlalchemy.ext.hybrid import hybrid_property
|
||||
|
||||
|
||||
class Logbook(Base):
|
||||
|
@ -14,7 +15,6 @@ class Logbook(Base):
|
|||
takeoff_track = Column(Integer)
|
||||
landing_timestamp = Column(DateTime)
|
||||
landing_track = Column(Integer)
|
||||
duration = Column(Interval)
|
||||
max_altitude = Column(Integer)
|
||||
|
||||
# Relations
|
||||
|
@ -26,3 +26,11 @@ class Logbook(Base):
|
|||
|
||||
device_id = Column(Integer, ForeignKey('device.id', ondelete='CASCADE'), index=True)
|
||||
device = relationship('Device', foreign_keys=[device_id])
|
||||
|
||||
@hybrid_property
|
||||
def duration(self):
|
||||
return None if (self.landing_timestamp is None or self.takeoff_timestamp is None) else self.landing_timestamp - self.takeoff_timestamp
|
||||
|
||||
@duration.expression
|
||||
def duration(cls):
|
||||
return case({False: None, True: cls.landing_timestamp - cls.takeoff_timestamp}, cls.landing_timestamp != null() and cls.takeoff_timestamp != null())
|
||||
|
|
Ładowanie…
Reference in New Issue