Merge pull request #11 from Meisterschueler/master

Changed id to address
pull/12/merge
Meisterschueler 2015-11-28 10:58:11 +01:00
commit ce692e4194
5 zmienionych plików z 55 dodań i 24 usunięć

Wyświetl plik

@ -55,12 +55,14 @@ available commands:
[db] [db]
init Initialize the database. init Initialize the database.
updateddb Update the ddb data. update_ddb_file Update devices with data from local file.
update_ddb_ogn Update devices with data from ogn.
[gateway] [gateway]
run Run the aprs client. run Run the aprs client.
[logbook] [logbook]
compute Compute takeoffs and landings.
show Show a logbook for <airport_name> located at given position. show Show a logbook for <airport_name> located at given position.
[show.receiver] [show.receiver]
@ -78,17 +80,17 @@ The task server must be running for `db.updateddb`.
- [x] Document/Improve cli commands - [x] Document/Improve cli commands
- [ ] Separate settings from module (currently at ogn/command/dbutils.py) - [ ] Separate settings from module (currently at ogn/command/dbutils.py)
- [ ] Enable granular data acquisition (eg. store receiver beacons only) - [ ] Enable granular data acquisition (eg. store receiver beacons only)
- [ ] Future Database-Migrations: Use Alembic? - [x] Future Database-Migrations: Use Alembic?
- [ ] Rename 'Flarm' to 'Device'? - [x] Rename 'Flarm' to 'Device'?
- [ ] Rename self.heared\_aircraft\_IDs (lowercase) in aircraft\_beacon - [x] Rename self.heared\_aircraft\_IDs (lowercase) in aircraft\_beacon
- [ ] Rename self.heared\_aircraft\_IDs - [x] Rename self.heared\_aircraft\_IDs
- [ ] Fix command/logbook.py (@Meisterschueler?) - [x] Fix command/logbook.py (@Meisterschueler?)
- [ ] Introduce scheduled tasks with 'celery beat' (eg. updateddb) - [ ] Introduce scheduled tasks with 'celery beat' (eg. updateddb)
### Scheduled tasks ### Scheduled tasks
- ogn.collect.fetchddb (generate Flarm table) - ogn.collect.fetchddb (generate Flarm table)
- ogn.collect.receiver (generate Receiver table) - ogn.collect.receiver (generate Receiver table)
- ogn.collect.logbook (generate TaoffLanding table) - ogn.collect.logbook (generate TakeoffLanding table)
## How to use virtualenv ## How to use virtualenv
``` ```

Wyświetl plik

@ -0,0 +1,28 @@
"""logbook changes
Revision ID: 2c7144443d8
Revises: 104107d119d
Create Date: 2015-11-27 22:05:31.417449
"""
# revision identifiers, used by Alembic.
revision = '2c7144443d8'
down_revision = '104107d119d'
branch_labels = None
depends_on = None
from alembic import op
import sqlalchemy as sa
def upgrade():
op.alter_column('aircraft_beacon', 'real_id', new_column_name='real_address')
op.add_column('aircraft_beacon', sa.Column('flight_state', sa.SmallInteger))
op.create_index('ix_aircraft_beacon_flight_state', 'aircraft_beacon', ['flight_state'])
def downgrade():
op.alter_column('aircraft_beacon', 'real_address', new_column_name='real_id')
op.drop_column('aircraft_beacon', 'flight_state')
op.drop_index('ix_aircraft_beacon_flight_state', 'aircraft_beacon')

Wyświetl plik

@ -3,9 +3,8 @@ from __future__ import absolute_import
from celery.utils.log import get_task_logger from celery.utils.log import get_task_logger
from ogn.collect.celery import app from ogn.collect.celery import app
from ogn.model import Device from ogn.model import AddressOrigin, Device
from ogn.utils import get_ddb from ogn.utils import get_ddb
from ogn.model.address_origin import AddressOrigin
logger = get_task_logger(__name__) logger = get_task_logger(__name__)

Wyświetl plik

@ -24,7 +24,7 @@ class AircraftBeacon(Beacon):
software_version = Column(Float) software_version = Column(Float)
hardware_version = Column(SmallInteger) hardware_version = Column(SmallInteger)
real_id = Column(String(6)) real_address = Column(String(6))
flightlevel = Column(Float) flightlevel = Column(Float)
@ -33,6 +33,8 @@ class AircraftBeacon(Beacon):
theta = Column(Float) theta = Column(Float)
phi = Column(Float) phi = Column(Float)
flight_state = Column(SmallInteger)
# Pattern # Pattern
address_pattern = re.compile(r"id(\S{2})(\S{6})") address_pattern = re.compile(r"id(\S{2})(\S{6})")
climb_rate_pattern = re.compile(r"([\+\-]\d+)fpm") climb_rate_pattern = re.compile(r"([\+\-]\d+)fpm")
@ -40,18 +42,18 @@ class AircraftBeacon(Beacon):
signal_strength_pattern = re.compile(r"(\d+\.\d+)dB") signal_strength_pattern = re.compile(r"(\d+\.\d+)dB")
error_count_pattern = re.compile(r"(\d+)e") error_count_pattern = re.compile(r"(\d+)e")
coordinates_extension_pattern = re.compile(r"\!W(.)(.)!") coordinates_extension_pattern = re.compile(r"\!W(.)(.)!")
hear_ID_pattern = re.compile(r"hear(\w{4})") hear_address_pattern = re.compile(r"hear(\w{4})")
frequency_offset_pattern = re.compile(r"([\+\-]\d+\.\d+)kHz") frequency_offset_pattern = re.compile(r"([\+\-]\d+\.\d+)kHz")
gps_status_pattern = re.compile(r"gps(\d+x\d+)") gps_status_pattern = re.compile(r"gps(\d+x\d+)")
software_version_pattern = re.compile(r"s(\d+\.\d+)") software_version_pattern = re.compile(r"s(\d+\.\d+)")
hardware_version_pattern = re.compile(r"h(\d+)") hardware_version_pattern = re.compile(r"h(\d+)")
real_id_pattern = re.compile(r"r(\w{6})") real_address_pattern = re.compile(r"r(\w{6})")
flightlevel_pattern = re.compile(r"FL(\d{3}\.\d{2})") flightlevel_pattern = re.compile(r"FL(\d{3}\.\d{2})")
def __init__(self, beacon=None): def __init__(self, beacon=None):
self.heared_aircraft_IDs = list() self.heared_aircraft_addresses = list()
if beacon is not None: if beacon is not None:
self.name = beacon.name self.name = beacon.name
@ -77,13 +79,13 @@ class AircraftBeacon(Beacon):
signal_strength_match = self.signal_strength_pattern.match(part) signal_strength_match = self.signal_strength_pattern.match(part)
error_count_match = self.error_count_pattern.match(part) error_count_match = self.error_count_pattern.match(part)
coordinates_extension_match = self.coordinates_extension_pattern.match(part) coordinates_extension_match = self.coordinates_extension_pattern.match(part)
hear_ID_match = self.hear_ID_pattern.match(part) hear_address_match = self.hear_address_pattern.match(part)
frequency_offset_match = self.frequency_offset_pattern.match(part) frequency_offset_match = self.frequency_offset_pattern.match(part)
gps_status_match = self.gps_status_pattern.match(part) gps_status_match = self.gps_status_pattern.match(part)
software_version_match = self.software_version_pattern.match(part) software_version_match = self.software_version_pattern.match(part)
hardware_version_match = self.hardware_version_pattern.match(part) hardware_version_match = self.hardware_version_pattern.match(part)
real_id_match = self.real_id_pattern.match(part) real_address_match = self.real_address_pattern.match(part)
flightlevel_match = self.flightlevel_pattern.match(part) flightlevel_match = self.flightlevel_pattern.match(part)
@ -111,8 +113,8 @@ class AircraftBeacon(Beacon):
self.latitude = self.latitude + dlat self.latitude = self.latitude + dlat
self.longitude = self.longitude + dlon self.longitude = self.longitude + dlon
elif hear_ID_match is not None: elif hear_address_match is not None:
self.heared_aircraft_IDs.append(hear_ID_match.group(1)) self.heared_aircraft_addresses.append(hear_address_match.group(1))
elif frequency_offset_match is not None: elif frequency_offset_match is not None:
self.frequency_offset = float(frequency_offset_match.group(1)) self.frequency_offset = float(frequency_offset_match.group(1))
elif gps_status_match is not None: elif gps_status_match is not None:
@ -122,8 +124,8 @@ class AircraftBeacon(Beacon):
self.software_version = float(software_version_match.group(1)) self.software_version = float(software_version_match.group(1))
elif hardware_version_match is not None: elif hardware_version_match is not None:
self.hardware_version = int(hardware_version_match.group(1)) self.hardware_version = int(hardware_version_match.group(1))
elif real_id_match is not None: elif real_address_match is not None:
self.real_id = real_id_match.group(1) self.real_address = real_address_match.group(1)
elif flightlevel_match is not None: elif flightlevel_match is not None:
self.flightlevel = float(flightlevel_match.group(1)) self.flightlevel = float(flightlevel_match.group(1))

Wyświetl plik

@ -24,10 +24,10 @@ class TestStringMethods(unittest.TestCase):
self.assertEqual(aircraft_beacon.frequency_offset, 51.2) self.assertEqual(aircraft_beacon.frequency_offset, 51.2)
self.assertEqual(aircraft_beacon.gps_status, '4x5') self.assertEqual(aircraft_beacon.gps_status, '4x5')
self.assertEqual(len(aircraft_beacon.heared_aircraft_IDs), 3) self.assertEqual(len(aircraft_beacon.heared_aircraft_addresses), 3)
self.assertEqual(aircraft_beacon.heared_aircraft_IDs[0], '1084') self.assertEqual(aircraft_beacon.heared_aircraft_addresses[0], '1084')
self.assertEqual(aircraft_beacon.heared_aircraft_IDs[1], 'B597') self.assertEqual(aircraft_beacon.heared_aircraft_addresses[1], 'B597')
self.assertEqual(aircraft_beacon.heared_aircraft_IDs[2], 'B598') self.assertEqual(aircraft_beacon.heared_aircraft_addresses[2], 'B598')
def test_stealth(self): def test_stealth(self):
aircraft_beacon = AircraftBeacon() aircraft_beacon = AircraftBeacon()
@ -45,7 +45,7 @@ class TestStringMethods(unittest.TestCase):
self.assertEqual(aircraft_beacon.longitude, 6 / 1000 / 60) self.assertEqual(aircraft_beacon.longitude, 6 / 1000 / 60)
self.assertEqual(aircraft_beacon.software_version, 6.02) self.assertEqual(aircraft_beacon.software_version, 6.02)
self.assertEqual(aircraft_beacon.hardware_version, 44) self.assertEqual(aircraft_beacon.hardware_version, 44)
self.assertEqual(aircraft_beacon.real_id, "DF0C56") self.assertEqual(aircraft_beacon.real_address, "DF0C56")
def test_v024_ogn_tracker(self): def test_v024_ogn_tracker(self):
aircraft_beacon = AircraftBeacon() aircraft_beacon = AircraftBeacon()