diff --git a/ogn/commands/bulkimport.py b/ogn/commands/bulkimport.py index 3676de0..80e77d3 100644 --- a/ogn/commands/bulkimport.py +++ b/ogn/commands/bulkimport.py @@ -1,16 +1,12 @@ -from ogn.commands.dbutils import engine, session -from ogn.model import Base, AddressOrigin, AircraftBeacon, ReceiverBeacon, Device, Receiver -from ogn.utils import get_airports, open_file -from ogn.collect.database import update_device_infos -from ogn.gateway.process import message_to_beacon - -from sqlalchemy import insert, distinct -from sqlalchemy.sql import null - import os - from manager import Manager +from ogn.commands.dbutils import session +from ogn.gateway.process import message_to_beacon +from ogn.model import AircraftBeacon, ReceiverBeacon +from ogn.utils import open_file + + manager = Manager() diff --git a/ogn/commands/database.py b/ogn/commands/database.py index 1e5f9aa..9af5717 100644 --- a/ogn/commands/database.py +++ b/ogn/commands/database.py @@ -1,12 +1,12 @@ +from manager import Manager +from ogn.collect.database import update_device_infos from ogn.commands.dbutils import engine, session from ogn.model import Base, AddressOrigin, AircraftBeacon, ReceiverBeacon, Device, Receiver -from ogn.utils import get_airports, open_file -from ogn.collect.database import update_device_infos - +from ogn.utils import get_airports from sqlalchemy import insert, distinct from sqlalchemy.sql import null -from manager import Manager + manager = Manager() ALEMBIC_CONFIG_FILE = "alembic.ini" diff --git a/ogn/commands/dbutils.py b/ogn/commands/dbutils.py index 3e4a3c4..715b2da 100644 --- a/ogn/commands/dbutils.py +++ b/ogn/commands/dbutils.py @@ -1,5 +1,5 @@ -import os import importlib +import os from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker diff --git a/ogn/commands/igcexport.py b/ogn/commands/igcexport.py index 9d6e801..bb377dc 100644 --- a/ogn/commands/igcexport.py +++ b/ogn/commands/igcexport.py @@ -1,18 +1,12 @@ -from sqlalchemy.sql import func -from sqlalchemy import and_, or_ -from sqlalchemy.orm import aliased - -from ogn.model import AircraftBeacon, Device - -from ogn.commands.dbutils import session - -from aerofiles.igc import Writer - import datetime import re - +from aerofiles.igc import Writer from manager import Manager +from ogn.commands.dbutils import session +from ogn.model import AircraftBeacon, Device + + manager = Manager() @@ -34,7 +28,7 @@ def write(address, date): .first() if (device_id is None): - print ("Device with address '{}' not found.".format(address)) + print("Device with address '{}' not found.".format(address)) return with open('sample.igc', 'wb') as fp: diff --git a/ogn/commands/logbook.py b/ogn/commands/logbook.py index bc92e4f..a603933 100644 --- a/ogn/commands/logbook.py +++ b/ogn/commands/logbook.py @@ -2,17 +2,16 @@ from datetime import timedelta, datetime -from sqlalchemy.sql import func +from manager import Manager +from ogn.collect.logbook import compute_logbook_entries +from ogn.collect.takeoff_landing import compute_takeoff_and_landing +from ogn.commands.dbutils import session +from ogn.model import Device, DeviceInfo, TakeoffLanding, Airport, Logbook from sqlalchemy import and_, or_ from sqlalchemy.orm import aliased +from sqlalchemy.sql import func -from ogn.model import Device, DeviceInfo, TakeoffLanding, Airport, Logbook -from ogn.commands.dbutils import session -from ogn.collect.takeoff_landing import compute_takeoff_and_landing -from ogn.collect.logbook import compute_logbook_entries - -from manager import Manager manager = Manager() diff --git a/ogn/commands/showairport.py b/ogn/commands/showairport.py index fdc8037..861aa58 100644 --- a/ogn/commands/showairport.py +++ b/ogn/commands/showairport.py @@ -1,8 +1,9 @@ -from ogn.model import Airport -from ogn.commands.dbutils import session - from manager import Manager +from ogn.commands.dbutils import session +from ogn.model import Airport from sqlalchemy import and_, between + + manager = Manager() diff --git a/ogn/commands/showdeviceinfos.py b/ogn/commands/showdeviceinfos.py index 6d55ef7..b39b856 100644 --- a/ogn/commands/showdeviceinfos.py +++ b/ogn/commands/showdeviceinfos.py @@ -1,9 +1,10 @@ +from manager import Manager from ogn.commands.dbutils import session from ogn.model import AddressOrigin +from ogn.model.device_info import DeviceInfo from sqlalchemy import func, and_, true, false -from manager import Manager -from ogn.model.device_info import DeviceInfo + manager = Manager() diff --git a/ogn/commands/showdevices.py b/ogn/commands/showdevices.py index 5bf02c1..813dfc3 100644 --- a/ogn/commands/showdevices.py +++ b/ogn/commands/showdevices.py @@ -1,8 +1,9 @@ +from manager import Manager from ogn.commands.dbutils import session from ogn.model import Device, AircraftType from sqlalchemy import func -from manager import Manager + manager = Manager() diff --git a/ogn/commands/showreceiver.py b/ogn/commands/showreceiver.py index 9a30512..2873235 100644 --- a/ogn/commands/showreceiver.py +++ b/ogn/commands/showreceiver.py @@ -1,11 +1,11 @@ from datetime import datetime, timedelta -from sqlalchemy.sql import func -from sqlalchemy import distinct, and_ - -from ogn.model import ReceiverBeacon, Receiver -from ogn.commands.dbutils import session - from manager import Manager +from ogn.commands.dbutils import session +from ogn.model import ReceiverBeacon, Receiver +from sqlalchemy import distinct, and_ +from sqlalchemy.sql import func + + manager = Manager() receiver_beacons_per_day = 24 * 60 / 5 diff --git a/ogn/gateway/manage.py b/ogn/gateway/manage.py index 327bbef..115d64a 100644 --- a/ogn/gateway/manage.py +++ b/ogn/gateway/manage.py @@ -1,13 +1,9 @@ import logging -from ogn.client import AprsClient -from ogn.gateway.process import process_beacon, message_to_beacon -from datetime import datetime from manager import Manager -from ogn.model import AircraftBeacon, ReceiverBeacon +from ogn.client import AprsClient +from ogn.gateway.process import process_beacon -from ogn.utils import open_file -import os manager = Manager() diff --git a/ogn/gateway/process.py b/ogn/gateway/process.py index 1f76ca4..57b0168 100644 --- a/ogn/gateway/process.py +++ b/ogn/gateway/process.py @@ -1,7 +1,9 @@ import logging + from ogn.commands.dbutils import session from ogn.model import AircraftBeacon, ReceiverBeacon, Location -from ogn.parser import parse_aprs, parse_ogn_receiver_beacon, parse_ogn_aircraft_beacon, ParseError +from ogn.parser import parse, ParseError + logger = logging.getLogger(__name__) @@ -19,33 +21,16 @@ def message_to_beacon(raw_message, reference_date): if raw_message[0] != '#': try: - message = parse_aprs(raw_message, reference_date) - # symboltable / symbolcodes used by OGN: - # I&: used as receiver - # /X: helicopter_rotorcraft - # /': glider_or_motorglider - # \^: powered_aircraft - # /g: para_glider - # /O: ? - # /^: ? - # \n: ? - # /z: ? - # /o: ? - 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) - elif message['symboltable'] == "I" and message['symbolcode'] == '&': - # ... we have a receiver_beacon - if message['comment']: - message.update(parse_ogn_receiver_beacon(message['comment'])) + message = parse(raw_message, reference_date) + if message['aprs_type'] == 'position': message = replace_lonlat_with_wkt(message) + + if message['beacon_type'] == 'aircraft_beacon': + beacon = AircraftBeacon(**message) + elif message['beacon_type'] == 'receiver_beacon': beacon = ReceiverBeacon(**message) else: - # ... we have a aircraft_beacon - message.update(parse_ogn_aircraft_beacon(message['comment'])) - message = replace_lonlat_with_wkt(message) - beacon = AircraftBeacon(**message) + print("Whoops: what is this: {}".format(message)) except ParseError as e: logger.error('Received message: {}'.format(raw_message)) logger.error('Drop packet, {}'.format(e.message)) diff --git a/ogn/model/airport.py b/ogn/model/airport.py index c3ac736..bd5ebe0 100644 --- a/ogn/model/airport.py +++ b/ogn/model/airport.py @@ -1,6 +1,6 @@ +from geoalchemy2.types import Geometry from sqlalchemy import Column, String, Integer, Float, SmallInteger from sqlalchemy.orm import relationship -from geoalchemy2.types import Geometry from .base import Base diff --git a/ogn/model/beacon.py b/ogn/model/beacon.py index 0f1c022..30b1cc6 100644 --- a/ogn/model/beacon.py +++ b/ogn/model/beacon.py @@ -1,7 +1,7 @@ +from geoalchemy2.shape import to_shape +from geoalchemy2.types import Geometry from sqlalchemy import Column, String, Integer, Float, DateTime from sqlalchemy.ext.declarative import AbstractConcreteBase -from geoalchemy2.types import Geometry -from geoalchemy2.shape import to_shape from .base import Base from .geo import Location diff --git a/ogn/model/logbook.py b/ogn/model/logbook.py index 309f952..51240da 100644 --- a/ogn/model/logbook.py +++ b/ogn/model/logbook.py @@ -1,8 +1,8 @@ from sqlalchemy import Integer, DateTime, Column, ForeignKey, case, null +from sqlalchemy.ext.hybrid import hybrid_property from sqlalchemy.orm import relationship from .base import Base -from sqlalchemy.ext.hybrid import hybrid_property class Logbook(Base): diff --git a/ogn/model/receiver.py b/ogn/model/receiver.py index ff143d0..103f36a 100644 --- a/ogn/model/receiver.py +++ b/ogn/model/receiver.py @@ -1,7 +1,7 @@ +from geoalchemy2.shape import to_shape +from geoalchemy2.types import Geometry from sqlalchemy import Column, String, Integer, DateTime from sqlalchemy.orm import relationship -from geoalchemy2.types import Geometry -from geoalchemy2.shape import to_shape from .base import Base from .geo import Location diff --git a/ogn/utils.py b/ogn/utils.py index 29d7d8e..fa7caf2 100644 --- a/ogn/utils.py +++ b/ogn/utils.py @@ -1,16 +1,15 @@ -import requests import csv +import gzip from io import StringIO +from aerofiles.seeyou import Reader +from geopy.exc import GeopyError +from geopy.geocoders import Nominatim +from ogn.parser.utils import feet2m +import requests + from .model import AddressOrigin, DeviceInfo, Airport, Location -from geopy.geocoders import Nominatim -from geopy.exc import GeopyError - -from aerofiles.seeyou import Reader -from ogn.parser.utils import feet2m - -import gzip DDB_URL = "http://ddb.glidernet.org/download/?t=1" @@ -108,7 +107,7 @@ def get_airports(cupfile): def open_file(filename): """Opens a regular or unzipped textfile for reading.""" - f = open(filename,'rb') + f = open(filename, 'rb') a = f.read(2) f.close() if (a == b'\x1f\x8b'):