Merge pull request #61 from Meisterschueler/feature/+protocol_0.2.5

Feature/+protocol 0.2.5
pull/45/merge
Meisterschueler 2016-10-23 12:33:36 +02:00 zatwierdzone przez GitHub
commit a1276fbc7e
6 zmienionych plików z 86 dodań i 8 usunięć

Wyświetl plik

@ -1,6 +1,9 @@
# CHANGELOG
## Unreleased
## 0.3.0 - 2016-10-22
- Changed database for OGN v0.2.5 receiver beacons
- Moved to PostGIS, PostgreSQL is now mandantory
- Changed database schema (added airport, added relations, added `aircraft_type`, removed unused fields)
- Added Airport manager with command line option `db.import_airports`,

Wyświetl plik

@ -0,0 +1,48 @@
"""update protocol to v0.2.5
Revision ID: 5717cf8e17c
Revises: 4ebfb325db6
Create Date: 2016-10-17 19:16:38.632097
"""
# revision identifiers, used by Alembic.
revision = '5717cf8e17c'
down_revision = '4ebfb325db6'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
op.alter_column('aircraft_beacon', 'signal_strength', new_column_name='signal_quality')
op.add_column('aircraft_beacon', sa.Column('signal_power', sa.Float))
op.add_column('receiver_beacon', sa.Column('senders_visible', sa.Integer))
op.add_column('receiver_beacon', sa.Column('senders_total', sa.Integer))
op.add_column('receiver_beacon', sa.Column('senders_signal', sa.Float))
op.add_column('receiver_beacon', sa.Column('senders_messages', sa.Integer))
op.add_column('receiver_beacon', sa.Column('good_senders_signal', sa.Float))
op.add_column('receiver_beacon', sa.Column('good_senders', sa.Integer))
op.add_column('receiver_beacon', sa.Column('good_and_bad_senders', sa.Integer))
op.add_column('receiver_beacon', sa.Column('voltage', sa.Float))
op.add_column('receiver_beacon', sa.Column('amperage', sa.Float))
def downgrade():
op.alter_column('aircraft_beacon', 'signal_quality', new_column_name='signal_strength')
op.drop_column('aircraft_beacon', 'signal_power')
op.drop_column('receiver_beacon', 'senders_visible')
op.drop_column('receiver_beacon', 'senders_total')
op.drop_column('receiver_beacon', 'senders_signal')
op.drop_column('receiver_beacon', 'senders_messages')
op.drop_column('receiver_beacon', 'good_senders_signal')
op.drop_column('receiver_beacon', 'good_senders')
op.drop_column('receiver_beacon', 'good_and_bad_senders')
op.drop_column('receiver_beacon', 'voltage')
op.drop_column('receiver_beacon', 'amperage')

Wyświetl plik

@ -30,7 +30,21 @@ def process_beacon(raw_message, reference_date=None, reference_time=None):
# \n: ?
# /z: ?
# /o: ?
if message['symboltable'] == "I" and message['symbolcode'] == '&':
if 'symboltable' not in message and 'symbolcode' not in message:
# we have a receiver_beacon (status message)
message.update(parse_ogn_receiver_beacon(message['comment']))
beacon = ReceiverBeacon(**message)
# connect beacon with receiver
receiver = session.query(Receiver.id) \
.filter(Receiver.name == beacon.name) \
.first()
if receiver is None:
receiver = Receiver()
receiver.name = beacon.name
session.add(receiver)
beacon.receiver_id = receiver.id
elif message['symboltable'] == "I" and message['symbolcode'] == '&':
# ... we have a receiver_beacon
message.update(parse_ogn_receiver_beacon(message['comment']))
message = replace_lonlat_with_wkt(message)

Wyświetl plik

@ -14,7 +14,7 @@ class AircraftBeacon(Beacon):
address = Column(String(6))
climb_rate = Column(Float)
turn_rate = Column(Float)
signal_strength = Column(Float)
signal_quality = Column(Float)
error_count = Column(Integer)
frequency_offset = Column(Float)
gps_status = Column(String)
@ -25,6 +25,8 @@ class AircraftBeacon(Beacon):
flightlevel = Column(Float)
signal_power = Column(Float)
# Relations
receiver_id = Column(Integer, ForeignKey('receiver.id', ondelete='SET NULL'), index=True)
receiver = relationship('Receiver', foreign_keys=[receiver_id])

Wyświetl plik

@ -21,6 +21,17 @@ class ReceiverBeacon(Beacon):
rec_crystal_correction_fine = 0 # obsolete since 0.2.0
rec_input_noise = Column(Float)
senders_visible = Column(Integer)
senders_total = Column(Integer)
senders_signal = Column(Float)
senders_messages = Column(Integer)
good_senders_signal = Column(Float)
good_senders = Column(Integer)
good_and_bad_senders = Column(Integer)
voltage = Column(Float)
amperage = Column(Float)
# Relations
receiver_id = Column(Integer, ForeignKey('receiver.id', ondelete='SET NULL'), index=True)
receiver = relationship('Receiver', foreign_keys=[receiver_id])

Wyświetl plik

@ -12,7 +12,7 @@ with open(path.join(here, 'README.md'), encoding='utf-8') as f:
setup(
name='ogn-python',
version='0.2.1',
version='0.3.0',
description='A database backend for the Open Glider Network',
long_description=long_description,
url='https://github.com/glidernet/ogn-python',
@ -32,22 +32,22 @@ setup(
keywords='gliding ogn',
packages=find_packages(exclude=['tests', 'tests.*']),
install_requires=[
'SQLAlchemy==1.0.8',
'SQLAlchemy==1.1.2',
'geopy==1.11.0',
'manage.py==0.2.10',
'celery[redis]>=3.1,<3.2',
'alembic==0.8.3',
'alembic==0.8.8',
'aerofiles==0.3',
'geoalchemy2==0.3.0',
'shapely==1.5.15',
'ogn-client==0.5.0',
'ogn-client==0.6.0',
'psycopg2==2.6.1'
],
extras_require={
'dev': [
'nose==1.3.7',
'coveralls==0.4.4',
'flake8==2.5.0'
'coveralls==1.1',
'flake8==3.0.4'
]
},
zip_safe=False