kopia lustrzana https://github.com/glidernet/ogn-python
Refactoring
rodzic
3b074ff0b1
commit
a76bcc1750
|
@ -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
|
import os
|
||||||
|
|
||||||
|
|
||||||
from manager import Manager
|
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()
|
manager = Manager()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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.commands.dbutils import engine, session
|
||||||
from ogn.model import Base, AddressOrigin, AircraftBeacon, ReceiverBeacon, Device, Receiver
|
from ogn.model import Base, AddressOrigin, AircraftBeacon, ReceiverBeacon, Device, Receiver
|
||||||
from ogn.utils import get_airports, open_file
|
from ogn.utils import get_airports
|
||||||
from ogn.collect.database import update_device_infos
|
|
||||||
|
|
||||||
from sqlalchemy import insert, distinct
|
from sqlalchemy import insert, distinct
|
||||||
from sqlalchemy.sql import null
|
from sqlalchemy.sql import null
|
||||||
|
|
||||||
from manager import Manager
|
|
||||||
manager = Manager()
|
manager = Manager()
|
||||||
|
|
||||||
ALEMBIC_CONFIG_FILE = "alembic.ini"
|
ALEMBIC_CONFIG_FILE = "alembic.ini"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import os
|
|
||||||
import importlib
|
import importlib
|
||||||
|
import os
|
||||||
|
|
||||||
from sqlalchemy import create_engine
|
from sqlalchemy import create_engine
|
||||||
from sqlalchemy.orm import sessionmaker
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
|
|
@ -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 datetime
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
from aerofiles.igc import Writer
|
||||||
from manager import Manager
|
from manager import Manager
|
||||||
|
from ogn.commands.dbutils import session
|
||||||
|
from ogn.model import AircraftBeacon, Device
|
||||||
|
|
||||||
|
|
||||||
manager = Manager()
|
manager = Manager()
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,7 +28,7 @@ def write(address, date):
|
||||||
.first()
|
.first()
|
||||||
|
|
||||||
if (device_id is None):
|
if (device_id is None):
|
||||||
print ("Device with address '{}' not found.".format(address))
|
print("Device with address '{}' not found.".format(address))
|
||||||
return
|
return
|
||||||
|
|
||||||
with open('sample.igc', 'wb') as fp:
|
with open('sample.igc', 'wb') as fp:
|
||||||
|
|
|
@ -2,17 +2,16 @@
|
||||||
|
|
||||||
from datetime import timedelta, datetime
|
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 import and_, or_
|
||||||
from sqlalchemy.orm import aliased
|
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()
|
manager = Manager()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
from ogn.model import Airport
|
|
||||||
from ogn.commands.dbutils import session
|
|
||||||
|
|
||||||
from manager import Manager
|
from manager import Manager
|
||||||
|
from ogn.commands.dbutils import session
|
||||||
|
from ogn.model import Airport
|
||||||
from sqlalchemy import and_, between
|
from sqlalchemy import and_, between
|
||||||
|
|
||||||
|
|
||||||
manager = Manager()
|
manager = Manager()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
|
from manager import Manager
|
||||||
from ogn.commands.dbutils import session
|
from ogn.commands.dbutils import session
|
||||||
from ogn.model import AddressOrigin
|
from ogn.model import AddressOrigin
|
||||||
|
from ogn.model.device_info import DeviceInfo
|
||||||
from sqlalchemy import func, and_, true, false
|
from sqlalchemy import func, and_, true, false
|
||||||
|
|
||||||
from manager import Manager
|
|
||||||
from ogn.model.device_info import DeviceInfo
|
|
||||||
manager = Manager()
|
manager = Manager()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
|
from manager import Manager
|
||||||
from ogn.commands.dbutils import session
|
from ogn.commands.dbutils import session
|
||||||
from ogn.model import Device, AircraftType
|
from ogn.model import Device, AircraftType
|
||||||
from sqlalchemy import func
|
from sqlalchemy import func
|
||||||
|
|
||||||
from manager import Manager
|
|
||||||
manager = Manager()
|
manager = Manager()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
from datetime import datetime, timedelta
|
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 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()
|
manager = Manager()
|
||||||
|
|
||||||
receiver_beacons_per_day = 24 * 60 / 5
|
receiver_beacons_per_day = 24 * 60 / 5
|
||||||
|
|
|
@ -1,13 +1,9 @@
|
||||||
import logging
|
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 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()
|
manager = Manager()
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from ogn.commands.dbutils import session
|
from ogn.commands.dbutils import session
|
||||||
from ogn.model import AircraftBeacon, ReceiverBeacon, Location
|
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__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -19,33 +21,16 @@ def message_to_beacon(raw_message, reference_date):
|
||||||
|
|
||||||
if raw_message[0] != '#':
|
if raw_message[0] != '#':
|
||||||
try:
|
try:
|
||||||
message = parse_aprs(raw_message, reference_date)
|
message = parse(raw_message, reference_date)
|
||||||
# symboltable / symbolcodes used by OGN:
|
if message['aprs_type'] == 'position':
|
||||||
# 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 = replace_lonlat_with_wkt(message)
|
message = replace_lonlat_with_wkt(message)
|
||||||
|
|
||||||
|
if message['beacon_type'] == 'aircraft_beacon':
|
||||||
|
beacon = AircraftBeacon(**message)
|
||||||
|
elif message['beacon_type'] == 'receiver_beacon':
|
||||||
beacon = ReceiverBeacon(**message)
|
beacon = ReceiverBeacon(**message)
|
||||||
else:
|
else:
|
||||||
# ... we have a aircraft_beacon
|
print("Whoops: what is this: {}".format(message))
|
||||||
message.update(parse_ogn_aircraft_beacon(message['comment']))
|
|
||||||
message = replace_lonlat_with_wkt(message)
|
|
||||||
beacon = AircraftBeacon(**message)
|
|
||||||
except ParseError as e:
|
except ParseError as e:
|
||||||
logger.error('Received message: {}'.format(raw_message))
|
logger.error('Received message: {}'.format(raw_message))
|
||||||
logger.error('Drop packet, {}'.format(e.message))
|
logger.error('Drop packet, {}'.format(e.message))
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
from geoalchemy2.types import Geometry
|
||||||
from sqlalchemy import Column, String, Integer, Float, SmallInteger
|
from sqlalchemy import Column, String, Integer, Float, SmallInteger
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
from geoalchemy2.types import Geometry
|
|
||||||
|
|
||||||
from .base import Base
|
from .base import Base
|
||||||
|
|
||||||
|
|
|
@ -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 import Column, String, Integer, Float, DateTime
|
||||||
from sqlalchemy.ext.declarative import AbstractConcreteBase
|
from sqlalchemy.ext.declarative import AbstractConcreteBase
|
||||||
from geoalchemy2.types import Geometry
|
|
||||||
from geoalchemy2.shape import to_shape
|
|
||||||
|
|
||||||
from .base import Base
|
from .base import Base
|
||||||
from .geo import Location
|
from .geo import Location
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
from sqlalchemy import Integer, DateTime, Column, ForeignKey, case, null
|
from sqlalchemy import Integer, DateTime, Column, ForeignKey, case, null
|
||||||
|
from sqlalchemy.ext.hybrid import hybrid_property
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from .base import Base
|
from .base import Base
|
||||||
from sqlalchemy.ext.hybrid import hybrid_property
|
|
||||||
|
|
||||||
|
|
||||||
class Logbook(Base):
|
class Logbook(Base):
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
from geoalchemy2.shape import to_shape
|
||||||
|
from geoalchemy2.types import Geometry
|
||||||
from sqlalchemy import Column, String, Integer, DateTime
|
from sqlalchemy import Column, String, Integer, DateTime
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
from geoalchemy2.types import Geometry
|
|
||||||
from geoalchemy2.shape import to_shape
|
|
||||||
|
|
||||||
from .base import Base
|
from .base import Base
|
||||||
from .geo import Location
|
from .geo import Location
|
||||||
|
|
17
ogn/utils.py
17
ogn/utils.py
|
@ -1,16 +1,15 @@
|
||||||
import requests
|
|
||||||
import csv
|
import csv
|
||||||
|
import gzip
|
||||||
from io import StringIO
|
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 .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"
|
DDB_URL = "http://ddb.glidernet.org/download/?t=1"
|
||||||
|
|
||||||
|
@ -108,7 +107,7 @@ def get_airports(cupfile):
|
||||||
|
|
||||||
def open_file(filename):
|
def open_file(filename):
|
||||||
"""Opens a regular or unzipped textfile for reading."""
|
"""Opens a regular or unzipped textfile for reading."""
|
||||||
f = open(filename,'rb')
|
f = open(filename, 'rb')
|
||||||
a = f.read(2)
|
a = f.read(2)
|
||||||
f.close()
|
f.close()
|
||||||
if (a == b'\x1f\x8b'):
|
if (a == b'\x1f\x8b'):
|
||||||
|
|
Ładowanie…
Reference in New Issue