From 93f0cca58735476773c033d429eba4552db1bf4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Gru=CC=88ndger?= Date: Sun, 10 Feb 2019 18:39:06 +0100 Subject: [PATCH] Migrate from manage.py to Flask Command Line Interface (WIP) --- manage.py | 13 ---- ogn/app.py | 5 -- ogn/commands/__init__.py | 17 ----- ogn/commands/stats.py | 57 -------------- {ogn => ogn_python}/__init__.py | 2 +- ogn_python/app.py | 6 ++ {ogn => ogn_python}/backend/__init__.py | 0 {ogn => ogn_python}/backend/liveglidernet.py | 2 +- {ogn => ogn_python}/backend/ognrange.py | 2 +- {ogn => ogn_python}/collect/__init__.py | 0 {ogn => ogn_python}/collect/celery.py | 0 {ogn => ogn_python}/collect/database.py | 6 +- {ogn => ogn_python}/collect/logbook.py | 6 +- {ogn => ogn_python}/collect/ognrange.py | 6 +- {ogn => ogn_python}/collect/stats.py | 6 +- .../collect/takeoff_landings.py | 6 +- ogn_python/commands/__init__.py | 14 ++++ {ogn => ogn_python}/commands/bulkimport.py | 42 +++++----- {ogn => ogn_python}/commands/database.py | 72 ++++++++++-------- {ogn => ogn_python}/commands/dbutils.py | 0 {ogn => ogn_python}/commands/export.py | 29 +++---- {ogn => ogn_python}/commands/flights.py | 21 ++--- {ogn => ogn_python}/commands/logbook.py | 45 ++++++----- ogn_python/commands/stats.py | 67 ++++++++++++++++ {ogn => ogn_python}/gateway/__init__.py | 0 {ogn => ogn_python}/gateway/manage.py | 8 +- {ogn => ogn_python}/gateway/process.py | 8 +- {ogn => ogn_python}/gateway/process_tools.py | 4 +- {ogn => ogn_python}/model/__init__.py | 0 {ogn => ogn_python}/model/aircraft_beacon.py | 2 +- {ogn => ogn_python}/model/aircraft_type.py | 0 {ogn => ogn_python}/model/airport.py | 2 +- {ogn => ogn_python}/model/beacon.py | 2 +- {ogn => ogn_python}/model/country.py | 2 +- {ogn => ogn_python}/model/device.py | 2 +- {ogn => ogn_python}/model/device_info.py | 2 +- .../model/device_info_origin.py | 0 {ogn => ogn_python}/model/device_stats.py | 2 +- {ogn => ogn_python}/model/flights2d.py | 2 +- {ogn => ogn_python}/model/geo.py | 0 {ogn => ogn_python}/model/logbook.py | 2 +- {ogn => ogn_python}/model/receiver.py | 2 +- {ogn => ogn_python}/model/receiver_beacon.py | 2 +- .../model/receiver_coverage.py | 2 +- {ogn => ogn_python}/model/receiver_stats.py | 2 +- {ogn => ogn_python}/model/relation_stats.py | 2 +- {ogn => ogn_python}/model/takeoff_landing.py | 2 +- {ogn => ogn_python}/navigation.py | 0 {ogn => ogn_python}/routes.py | 6 +- {ogn => ogn_python}/static/css/flags/LICENSE | 0 .../static/css/flags/flags.css | 0 .../static/css/flags/flags.png | Bin {ogn => ogn_python}/static/img/Blank.gif | Bin .../static/img/Transparent.gif | Bin {ogn => ogn_python}/templates/airports.html | 0 {ogn => ogn_python}/templates/base.html | 0 .../templates/device_detail.html | 0 {ogn => ogn_python}/templates/devices.html | 0 {ogn => ogn_python}/templates/logbook.html | 0 {ogn => ogn_python}/templates/ogn_live.html | 0 {ogn => ogn_python}/templates/receivers.html | 0 {ogn => ogn_python}/templates/records.html | 0 {ogn => ogn_python}/utils.py | 0 setup.py | 5 +- tests/backend/test_backends.py | 12 +-- tests/base.py | 6 +- tests/collect/test_database.py | 4 +- tests/collect/test_logbook.py | 4 +- tests/collect/test_ognrange.py | 4 +- tests/collect/test_stats.py | 4 +- tests/collect/test_takeoff_landing.py | 4 +- tests/commands/test_database.py | 4 +- tests/gateway/test_saver.py | 2 +- tests/test_utils.py | 4 +- 74 files changed, 277 insertions(+), 256 deletions(-) delete mode 100755 manage.py delete mode 100644 ogn/app.py delete mode 100644 ogn/commands/__init__.py delete mode 100644 ogn/commands/stats.py rename {ogn => ogn_python}/__init__.py (86%) create mode 100644 ogn_python/app.py rename {ogn => ogn_python}/backend/__init__.py (100%) rename {ogn => ogn_python}/backend/liveglidernet.py (98%) rename {ogn => ogn_python}/backend/ognrange.py (96%) rename {ogn => ogn_python}/collect/__init__.py (100%) rename {ogn => ogn_python}/collect/celery.py (100%) rename {ogn => ogn_python}/collect/database.py (96%) rename {ogn => ogn_python}/collect/logbook.py (98%) rename {ogn => ogn_python}/collect/ognrange.py (96%) rename {ogn => ogn_python}/collect/stats.py (99%) rename {ogn => ogn_python}/collect/takeoff_landings.py (97%) create mode 100644 ogn_python/commands/__init__.py rename {ogn => ogn_python}/commands/bulkimport.py (96%) rename {ogn => ogn_python}/commands/database.py (57%) rename {ogn => ogn_python}/commands/dbutils.py (100%) rename {ogn => ogn_python}/commands/export.py (89%) rename {ogn => ogn_python}/commands/flights.py (87%) rename {ogn => ogn_python}/commands/logbook.py (77%) create mode 100644 ogn_python/commands/stats.py rename {ogn => ogn_python}/gateway/__init__.py (100%) rename {ogn => ogn_python}/gateway/manage.py (87%) rename {ogn => ogn_python}/gateway/process.py (90%) rename {ogn => ogn_python}/gateway/process_tools.py (98%) rename {ogn => ogn_python}/model/__init__.py (100%) rename {ogn => ogn_python}/model/aircraft_beacon.py (99%) rename {ogn => ogn_python}/model/aircraft_type.py (100%) rename {ogn => ogn_python}/model/airport.py (97%) rename {ogn => ogn_python}/model/beacon.py (97%) rename {ogn => ogn_python}/model/country.py (97%) rename {ogn => ogn_python}/model/device.py (96%) rename {ogn => ogn_python}/model/device_info.py (97%) rename {ogn => ogn_python}/model/device_info_origin.py (100%) rename {ogn => ogn_python}/model/device_stats.py (98%) rename {ogn => ogn_python}/model/flights2d.py (97%) rename {ogn => ogn_python}/model/geo.py (100%) rename {ogn => ogn_python}/model/logbook.py (98%) rename {ogn => ogn_python}/model/receiver.py (97%) rename {ogn => ogn_python}/model/receiver_beacon.py (99%) rename {ogn => ogn_python}/model/receiver_coverage.py (97%) rename {ogn => ogn_python}/model/receiver_stats.py (98%) rename {ogn => ogn_python}/model/relation_stats.py (97%) rename {ogn => ogn_python}/model/takeoff_landing.py (96%) rename {ogn => ogn_python}/navigation.py (100%) rename {ogn => ogn_python}/routes.py (97%) rename {ogn => ogn_python}/static/css/flags/LICENSE (100%) rename {ogn => ogn_python}/static/css/flags/flags.css (100%) rename {ogn => ogn_python}/static/css/flags/flags.png (100%) rename {ogn => ogn_python}/static/img/Blank.gif (100%) rename {ogn => ogn_python}/static/img/Transparent.gif (100%) rename {ogn => ogn_python}/templates/airports.html (100%) rename {ogn => ogn_python}/templates/base.html (100%) rename {ogn => ogn_python}/templates/device_detail.html (100%) rename {ogn => ogn_python}/templates/devices.html (100%) rename {ogn => ogn_python}/templates/logbook.html (100%) rename {ogn => ogn_python}/templates/ogn_live.html (100%) rename {ogn => ogn_python}/templates/receivers.html (100%) rename {ogn => ogn_python}/templates/records.html (100%) rename {ogn => ogn_python}/utils.py (100%) diff --git a/manage.py b/manage.py deleted file mode 100755 index 6dbfac2..0000000 --- a/manage.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python - -from manager import Manager -from ogn.commands import manager as command_manager -from ogn.gateway.manage import manager as gateway_manager - -manager = Manager() -manager.merge(command_manager) -manager.merge(gateway_manager, namespace='gateway') - - -if __name__ == '__main__': - manager.main() diff --git a/ogn/app.py b/ogn/app.py deleted file mode 100644 index 1fa0476..0000000 --- a/ogn/app.py +++ /dev/null @@ -1,5 +0,0 @@ -from ogn import app -from ogn import routes - -if __name__ == '__main__': - app.run() \ No newline at end of file diff --git a/ogn/commands/__init__.py b/ogn/commands/__init__.py deleted file mode 100644 index 2ce4e2f..0000000 --- a/ogn/commands/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -from .database import manager as database_manager -from .bulkimport import manager as bulkimport_manager -from .export import manager as export_manager -from .logbook import manager as logbook_manager -from .stats import manager as stats_manager -from .flights import manager as flights_manager - -from manager import Manager - -manager = Manager() - -manager.merge(database_manager, namespace='db') -manager.merge(bulkimport_manager, namespace='bulkimport') -manager.merge(export_manager, namespace='export') -manager.merge(logbook_manager, namespace='logbook') -manager.merge(stats_manager, namespace='stats') -manager.merge(flights_manager, namespace='flights') diff --git a/ogn/commands/stats.py b/ogn/commands/stats.py deleted file mode 100644 index 13991f3..0000000 --- a/ogn/commands/stats.py +++ /dev/null @@ -1,57 +0,0 @@ -from datetime import datetime -from tqdm import tqdm -from manager import Manager -from ogn.commands.dbutils import session -from ogn.commands.database import get_database_days - -from ogn.collect.stats import create_device_stats, create_receiver_stats, create_relation_stats,\ - update_qualities, update_receivers as update_receivers_command, update_devices as update_devices_command,\ - update_device_stats_jumps - -from ogn.collect.ognrange import create_receiver_coverage - -manager = Manager() - - -@manager.command -def create(start=None, end=None): - """Create DeviceStats, ReceiverStats and RelationStats.""" - - days = get_database_days(start, end) - - pbar = tqdm(days) - for single_date in pbar: - pbar.set_description(datetime.strftime(single_date, '%Y-%m-%d')) - result = create_device_stats(session=session, date=single_date) - result = update_device_stats_jumps(session=session, date=single_date) - result = create_receiver_stats(session=session, date=single_date) - result = create_relation_stats(session=session, date=single_date) - result = update_qualities(session=session, date=single_date) - - -@manager.command -def update_receivers(): - """Update receivers with data from stats.""" - - result = update_receivers_command(session=session) - print(result) - - -@manager.command -def update_devices(): - """Update devices with data from stats.""" - - result = update_devices_command(session=session) - print(result) - - -@manager.command -def create_ognrange(start=None, end=None): - """Create stats for Melissas ognrange.""" - - days = get_database_days(start, end) - - pbar = tqdm(days) - for single_date in pbar: - pbar.set_description(datetime.strftime(single_date, '%Y-%m-%d')) - result = create_receiver_coverage(session=session, date=single_date) diff --git a/ogn/__init__.py b/ogn_python/__init__.py similarity index 86% rename from ogn/__init__.py rename to ogn_python/__init__.py index 8bb2d1d..3c80eec 100644 --- a/ogn/__init__.py +++ b/ogn_python/__init__.py @@ -1,7 +1,7 @@ from flask import Flask from flask_bootstrap import Bootstrap from flask_sqlalchemy import SQLAlchemy -from navigation import nav +from ogn_python.navigation import nav app = Flask(__name__) app.config.from_object('config.default') diff --git a/ogn_python/app.py b/ogn_python/app.py new file mode 100644 index 0000000..92fb3a3 --- /dev/null +++ b/ogn_python/app.py @@ -0,0 +1,6 @@ +from ogn_python import app +from ogn_python import routes +from ogn_python import commands + +if __name__ == '__main__': + app.run() diff --git a/ogn/backend/__init__.py b/ogn_python/backend/__init__.py similarity index 100% rename from ogn/backend/__init__.py rename to ogn_python/backend/__init__.py diff --git a/ogn/backend/liveglidernet.py b/ogn_python/backend/liveglidernet.py similarity index 98% rename from ogn/backend/liveglidernet.py rename to ogn_python/backend/liveglidernet.py index 2ae132d..d23ee9e 100644 --- a/ogn/backend/liveglidernet.py +++ b/ogn_python/backend/liveglidernet.py @@ -2,7 +2,7 @@ from datetime import datetime, timedelta, timezone, date from sqlalchemy import func, and_, between, case -from ogn.model import AircraftBeacon, Device, Receiver +from ogn_python.model import AircraftBeacon, Device, Receiver def utc_to_local(utc_dt): diff --git a/ogn/backend/ognrange.py b/ogn_python/backend/ognrange.py similarity index 96% rename from ogn/backend/ognrange.py rename to ogn_python/backend/ognrange.py index 870bbc4..bf2732e 100644 --- a/ogn/backend/ognrange.py +++ b/ogn_python/backend/ognrange.py @@ -3,7 +3,7 @@ from datetime import datetime, timedelta from sqlalchemy import func, case from sqlalchemy.sql.expression import label -from ogn.model import Receiver +from ogn_python.model import Receiver def alchemyencoder(obj): diff --git a/ogn/collect/__init__.py b/ogn_python/collect/__init__.py similarity index 100% rename from ogn/collect/__init__.py rename to ogn_python/collect/__init__.py diff --git a/ogn/collect/celery.py b/ogn_python/collect/celery.py similarity index 100% rename from ogn/collect/celery.py rename to ogn_python/collect/celery.py diff --git a/ogn/collect/database.py b/ogn_python/collect/database.py similarity index 96% rename from ogn/collect/database.py rename to ogn_python/collect/database.py index 8e239be..8de571b 100644 --- a/ogn/collect/database.py +++ b/ogn_python/collect/database.py @@ -5,9 +5,9 @@ from sqlalchemy.sql import null, and_, func, not_, case from sqlalchemy.dialects import postgresql from sqlalchemy.dialects.postgresql import insert -from ogn.collect.celery import app -from ogn.model import Country, DeviceInfo, DeviceInfoOrigin, AircraftBeacon, ReceiverBeacon, Device, Receiver -from ogn.utils import get_ddb, get_flarmnet +from ogn_python.collect.celery import app +from ogn_python.model import Country, DeviceInfo, DeviceInfoOrigin, AircraftBeacon, ReceiverBeacon, Device, Receiver +from ogn_python.utils import get_ddb, get_flarmnet logger = get_task_logger(__name__) diff --git a/ogn/collect/logbook.py b/ogn_python/collect/logbook.py similarity index 98% rename from ogn/collect/logbook.py rename to ogn_python/collect/logbook.py index 309d69a..99dec3f 100644 --- a/ogn/collect/logbook.py +++ b/ogn_python/collect/logbook.py @@ -4,9 +4,9 @@ from sqlalchemy import and_, or_, insert, update, exists, between from sqlalchemy.sql import func, null from sqlalchemy.sql.expression import true, false -from ogn.collect.celery import app -from ogn.model import TakeoffLanding, Logbook, AircraftBeacon -from ogn.utils import date_to_timestamps +from ogn_python.collect.celery import app +from ogn_python.model import TakeoffLanding, Logbook, AircraftBeacon +from ogn_python.utils import date_to_timestamps logger = get_task_logger(__name__) diff --git a/ogn/collect/ognrange.py b/ogn_python/collect/ognrange.py similarity index 96% rename from ogn/collect/ognrange.py rename to ogn_python/collect/ognrange.py index 17a0d02..61d02fb 100644 --- a/ogn/collect/ognrange.py +++ b/ogn_python/collect/ognrange.py @@ -4,9 +4,9 @@ from sqlalchemy import Date from sqlalchemy import and_, insert, update, exists, between from sqlalchemy.sql import func, null -from ogn.collect.celery import app -from ogn.model import AircraftBeacon, ReceiverCoverage -from ogn.utils import date_to_timestamps +from ogn_python.collect.celery import app +from ogn_python.model import AircraftBeacon, ReceiverCoverage +from ogn_python.utils import date_to_timestamps logger = get_task_logger(__name__) diff --git a/ogn/collect/stats.py b/ogn_python/collect/stats.py similarity index 99% rename from ogn/collect/stats.py rename to ogn_python/collect/stats.py index f9d8b2e..cd58ffc 100644 --- a/ogn/collect/stats.py +++ b/ogn_python/collect/stats.py @@ -4,11 +4,11 @@ from sqlalchemy import insert, distinct, between from sqlalchemy.sql import null, and_, func, or_, update from sqlalchemy.sql.expression import case -from ogn.model import AircraftBeacon, DeviceStats, ReceiverStats, RelationStats, Receiver, Device +from ogn_python.model import AircraftBeacon, DeviceStats, ReceiverStats, RelationStats, Receiver, Device from .celery import app -from ogn.model.receiver_beacon import ReceiverBeacon -from ogn.utils import date_to_timestamps +from ogn_python.model.receiver_beacon import ReceiverBeacon +from ogn_python.utils import date_to_timestamps logger = get_task_logger(__name__) diff --git a/ogn/collect/takeoff_landings.py b/ogn_python/collect/takeoff_landings.py similarity index 97% rename from ogn/collect/takeoff_landings.py rename to ogn_python/collect/takeoff_landings.py index fdae002..d33ce9d 100644 --- a/ogn/collect/takeoff_landings.py +++ b/ogn_python/collect/takeoff_landings.py @@ -6,9 +6,9 @@ from sqlalchemy import and_, or_, insert, between, exists from sqlalchemy.sql import func, null from sqlalchemy.sql.expression import case -from ogn.collect.celery import app -from ogn.model import AircraftBeacon, TakeoffLanding, Airport -from ogn.utils import date_to_timestamps +from ogn_python.collect.celery import app +from ogn_python.model import AircraftBeacon, TakeoffLanding, Airport +from ogn_python.utils import date_to_timestamps logger = get_task_logger(__name__) diff --git a/ogn_python/commands/__init__.py b/ogn_python/commands/__init__.py new file mode 100644 index 0000000..f10e0b0 --- /dev/null +++ b/ogn_python/commands/__init__.py @@ -0,0 +1,14 @@ +from ogn_python import app + +from .bulkimport import user_cli as bulkimport_cli +from .database import user_cli as database_cli +from .export import user_cli as export_cli +from .flights import user_cli as flights_cli +from .logbook import user_cli as logbook_cli +from .stats import user_cli as stats_cli + +app.cli.add_command(bulkimport_cli) +app.cli.add_command(database_cli) +app.cli.add_command(flights_cli) +app.cli.add_command(logbook_cli) +app.cli.add_command(stats_cli) diff --git a/ogn/commands/bulkimport.py b/ogn_python/commands/bulkimport.py similarity index 96% rename from ogn/commands/bulkimport.py rename to ogn_python/commands/bulkimport.py index a9d56e9..e95fdee 100644 --- a/ogn/commands/bulkimport.py +++ b/ogn_python/commands/bulkimport.py @@ -1,14 +1,21 @@ -from manager import Manager +from flask.cli import AppGroup +import click import psycopg2 from tqdm import tqdm from io import StringIO -from ogn.model import AircraftBeacon, ReceiverBeacon -from ogn.utils import open_file -from ogn.commands.database import get_database_days +from ogn_python.model import AircraftBeacon, ReceiverBeacon +from ogn_python.utils import open_file +from ogn_python.commands.database import get_database_days -manager = Manager() +from ogn_python import db + +user_cli = AppGroup('bulkimport') +user_cli.help = "Tools for accelerated data import." + + +ALEMBIC_CONFIG_FILE = "alembic.ini" class LogfileDbSaver(): @@ -416,8 +423,8 @@ class LogfileDbSaver(): def convert(sourcefile, datestr, saver): - from ogn.gateway.process import string_to_message - from ogn.gateway.process_tools import AIRCRAFT_BEACON_TYPES, RECEIVER_BEACON_TYPES + from ogn_python.gateway.process import string_to_message + from ogn_python.gateway.process_tools import AIRCRAFT_BEACON_TYPES, RECEIVER_BEACON_TYPES from datetime import datetime fin = open_file(sourcefile) @@ -467,7 +474,8 @@ def convert(sourcefile, datestr, saver): fin.close() -@manager.command +@user_cli.command('file_import') +@click.argument('path') def file_import(path): """Import APRS logfiles into separate logfile tables.""" @@ -501,7 +509,7 @@ def file_import(path): saver.add_missing_receivers() -@manager.command +@user_cli.command('update') def update(): """Update beacons (add foreign keys, compute distance, bearing, ags, etc.) in separate logfile tables.""" @@ -517,8 +525,10 @@ def update(): saver.create_indices() -@manager.command -def transfer(start=None, end=None): +@user_cli.command('transfer') +@click.argument('start') +@click.argument('end') +def transfer(start, end): """Transfer beacons from separate logfile tables to beacon table.""" with LogfileDbSaver() as saver: @@ -536,7 +546,7 @@ def transfer(start=None, end=None): saver.transfer_receiver_beacons() -@manager.command +@user_cli.command('create_flights2d') def create_flights2d(): """Create complete flight traces from logfile tables.""" @@ -549,7 +559,7 @@ def create_flights2d(): saver.create_flights2d() -@manager.command +@user_cli.command('create_gaps2d') def create_gaps2d(): """Create 'gaps' from logfile tables.""" @@ -562,7 +572,8 @@ def create_gaps2d(): saver.create_gaps2d() -@manager.command +@user_cli.command('file_export') +@click.argument('path') def file_export(path): """Export separate logfile tables to csv files. They can be used for fast bulk import with sql COPY command.""" @@ -580,6 +591,3 @@ def file_export(path): saver.set_datestr(datestr) saver.export_to_path(path) - -if __name__ == '__main__': - file_export() diff --git a/ogn/commands/database.py b/ogn_python/commands/database.py similarity index 57% rename from ogn/commands/database.py rename to ogn_python/commands/database.py index b14bd6e..4b1b723 100644 --- a/ogn/commands/database.py +++ b/ogn_python/commands/database.py @@ -1,13 +1,17 @@ -from datetime import datetime, timedelta +from flask.cli import AppGroup +import click -from manager import Manager -from ogn.collect.database import update_device_infos, update_country_code -from ogn.commands.dbutils import engine, session -from ogn.model import Base, DeviceInfoOrigin, AircraftBeacon -from ogn.utils import get_airports, get_days +from datetime import datetime, timedelta from sqlalchemy.sql import func -manager = Manager() +from ogn_python.collect.database import update_device_infos, update_country_code +from ogn_python.model import * +from ogn_python.utils import get_airports, get_days +from ogn_python import db + +user_cli = AppGroup('database') +user_cli.help = "Database creation and handling." + ALEMBIC_CONFIG_FILE = "alembic.ini" @@ -16,7 +20,7 @@ def get_database_days(start, end): """Returns the first and the last day in aircraft_beacons table.""" if start is None and end is None: - days_from_db = session.query(func.min(AircraftBeacon.timestamp).label('first_day'), func.max(AircraftBeacon.timestamp).label('last_day')).one() + days_from_db = db.session.query(func.min(AircraftBeacon.timestamp).label('first_day'), func.max(AircraftBeacon.timestamp).label('last_day')).one() start = days_from_db[0].date() end = days_from_db[1].date() else: @@ -28,16 +32,16 @@ def get_database_days(start, end): return days -@manager.command +@user_cli.command('init') def init(): """Initialize the database.""" from alembic.config import Config from alembic import command - session.execute('CREATE EXTENSION IF NOT EXISTS postgis;') - session.execute('CREATE EXTENSION IF NOT EXISTS btree_gist;') - session.commit() + db.session.execute('CREATE EXTENSION IF NOT EXISTS postgis;') + db.session.execute('CREATE EXTENSION IF NOT EXISTS btree_gist;') + db.session.commit() Base.metadata.create_all(engine) #alembic_cfg = Config(ALEMBIC_CONFIG_FILE) @@ -45,17 +49,17 @@ def init(): print("Done.") -@manager.command +@user_cli.command('init_timescaledb') def init_timescaledb(): """Initialize TimescaleDB features.""" - session.execute('CREATE EXTENSION IF NOT EXISTS timescaledb;') - session.execute("SELECT create_hypertable('aircraft_beacons', 'timestamp', chunk_target_size => '2GB', if_not_exists => TRUE);") - session.execute("SELECT create_hypertable('receiver_beacons', 'timestamp', chunk_target_size => '2GB', if_not_exists => TRUE);") - session.commit() + db.session.execute('CREATE EXTENSION IF NOT EXISTS timescaledb;') + db.session.execute("SELECT create_hypertable('aircraft_beacons', 'timestamp', chunk_target_size => '2GB', if_not_exists => TRUE);") + db.session.execute("SELECT create_hypertable('receiver_beacons', 'timestamp', chunk_target_size => '2GB', if_not_exists => TRUE);") + db.session.commit() -@manager.command +@user_cli.command('upgrade') def upgrade(): """Upgrade database to the latest version.""" @@ -66,7 +70,8 @@ def upgrade(): command.upgrade(alembic_cfg, 'head') -@manager.command +@user_cli.command('drop') +@click.argument('sure') def drop(sure='n'): """Drop all tables.""" if sure == 'y': @@ -76,52 +81,55 @@ def drop(sure='n'): print("Add argument '--sure y' to drop all tables.") -@manager.command +@user_cli.command('import_ddb') def import_ddb(): """Import registered devices from the DDB.""" print("Import registered devices fom the DDB...") - counter = update_device_infos(session, DeviceInfoOrigin.ogn_ddb) + counter = update_device_infos(db.session, DeviceInfoOrigin.ogn_ddb) print("Imported %i devices." % counter) -@manager.command +@user_cli.command('import_file') +@click.argument('path') def import_file(path='tests/custom_ddb.txt'): """Import registered devices from a local file.""" print("Import registered devices from '{}'...".format(path)) - counter = update_device_infos(session, + counter = update_device_infos(db.session, DeviceInfoOrigin.user_defined, path=path) print("Imported %i devices." % counter) -@manager.command +@user_cli.command('import_flarmnet') +@click.argument('path') def import_flarmnet(path=None): """Import registered devices from a local file.""" print("Import registered devices from '{}'...".format("internet" if path is None else path)) - counter = update_device_infos(session, + counter = update_device_infos(db.session, DeviceInfoOrigin.flarmnet, path=path) print("Imported %i devices." % counter) -@manager.command +@user_cli.command('import_airports') +@click.argument('path') def import_airports(path='tests/SeeYou.cup'): """Import airports from a ".cup" file""" print("Import airports from '{}'...".format(path)) airports = get_airports(path) - session.bulk_save_objects(airports) - session.commit() - session.execute("UPDATE airports SET border = ST_Expand(location, 0.05)") - session.commit() + db.session.bulk_save_objects(airports) + db.session.commit() + db.session.execute("UPDATE airports SET border = ST_Expand(location, 0.05)") + db.session.commit() print("Imported {} airports.".format(len(airports))) -@manager.command +@user_cli.command('update_country_codes') def update_country_codes(): """Update country codes of all receivers.""" - update_country_code(session=session) + update_country_code(session=db.session) diff --git a/ogn/commands/dbutils.py b/ogn_python/commands/dbutils.py similarity index 100% rename from ogn/commands/dbutils.py rename to ogn_python/commands/dbutils.py diff --git a/ogn/commands/export.py b/ogn_python/commands/export.py similarity index 89% rename from ogn/commands/export.py rename to ogn_python/commands/export.py index daec62f..6ce476c 100644 --- a/ogn/commands/export.py +++ b/ogn_python/commands/export.py @@ -1,17 +1,19 @@ +from flask.cli import AppGroup +import click + import datetime import re import csv from aerofiles.igc import Writer -from manager import Manager -from ogn.commands.dbutils import session -from ogn.model import AircraftBeacon, Device +from ogn_python.model import * +from ogn_python import db + +user_cli = AppGroup('export') +user_cli.help = "Export data in several file formats." -manager = Manager() - - -@manager.command +@user_cli.command('cup') def cup(): """Export receiver waypoints as '.cup'.""" @@ -45,17 +47,16 @@ def cup(): INNER JOIN countries c ON c.gid = sq.country_id ORDER BY sq.name; """ - results = session.execute(sql) + results = db.session.execute(sql) with open('receivers.cup', 'w') as outfile: outcsv = csv.writer(outfile) outcsv.writerow(results.keys()) outcsv.writerows(results.fetchall()) - -@manager.arg('address', help='address (flarm id)') -@manager.arg('date', help='date (format: yyyy-mm-dd)') -@manager.command +@user_cli.command('igc') +@click.argument('address') +@click.argument('date') def igc(address, date): """Export igc file for
at .""" if not re.match('.{6}', address): @@ -66,7 +67,7 @@ def igc(address, date): print("Date {} not valid.".format(date)) return - device_id = session.query(Device.id) \ + device_id = db.session.query(Device.id) \ .filter(Device.address == address) \ .first() @@ -95,7 +96,7 @@ def igc(address, date): 'competition_class': 'Doubleseater', }) - points = session.query(AircraftBeacon) \ + points = db.session.query(AircraftBeacon) \ .filter(AircraftBeacon.device_id == device_id) \ .filter(AircraftBeacon.timestamp > date + ' 00:00:00') \ .filter(AircraftBeacon.timestamp < date + ' 23:59:59') \ diff --git a/ogn/commands/flights.py b/ogn_python/commands/flights.py similarity index 87% rename from ogn/commands/flights.py rename to ogn_python/commands/flights.py index 0d2e56f..6dac358 100644 --- a/ogn/commands/flights.py +++ b/ogn_python/commands/flights.py @@ -1,13 +1,14 @@ -# -*- coding: utf-8 -*- +from flask.cli import AppGroup +import click from datetime import datetime - -from manager import Manager -from ogn.commands.dbutils import session -from ogn.commands.database import get_database_days from tqdm import tqdm -manager = Manager() +from ogn_python.commands.database import get_database_days +from ogn_python import db + +user_cli = AppGroup('flights') +user_cli.help = "Create 2D flight paths from data." def compute_flights2d(session, date): @@ -66,8 +67,10 @@ def compute_flights2d(session, date): session.commit() -@manager.command -def flights2d(start=None, end=None): +@user_cli.command('create') +@click.argument('start') +@click.argument('end') +def create(start, end): """Compute flights.""" days = get_database_days(start, end) @@ -75,4 +78,4 @@ def flights2d(start=None, end=None): pbar = tqdm(days) for single_date in pbar: pbar.set_description(datetime.strftime(single_date, '%Y-%m-%d')) - result = compute_flights2d(session=session, date=single_date) + result = compute_flights2d(session=db.session, date=single_date) diff --git a/ogn/commands/logbook.py b/ogn_python/commands/logbook.py similarity index 77% rename from ogn/commands/logbook.py rename to ogn_python/commands/logbook.py index 164631f..7f07cbb 100644 --- a/ogn/commands/logbook.py +++ b/ogn_python/commands/logbook.py @@ -1,23 +1,27 @@ -# -*- coding: utf-8 -*- +from flask.cli import AppGroup +import click from datetime import datetime -from manager import Manager -from ogn.collect.logbook import update_logbook -from ogn.collect.takeoff_landings import update_takeoff_landings -from ogn.commands.dbutils import session -from ogn.model import Airport, Logbook -from sqlalchemy import or_, between +from ogn_python.collect.logbook import update_logbook +from ogn_python.collect.takeoff_landings import update_takeoff_landings +from ogn_python.commands.dbutils import session +from ogn_python.model import Airport, Logbook from sqlalchemy.sql import func from tqdm import tqdm -from ogn.commands.database import get_database_days -from ogn.utils import date_to_timestamps +from ogn_python.commands.database import get_database_days +from ogn_python.utils import date_to_timestamps -manager = Manager() +from ogn_python import db + +user_cli = AppGroup('logbook') +user_cli.help = "Handling of logbook data." -@manager.command -def compute_takeoff_landing(start=None, end=None): +@user_cli.command('compute_takeoff_landing') +@click.argument('start') +@click.argument('end') +def compute_takeoff_landing(start, end): """Compute takeoffs and landings.""" days = get_database_days(start, end) @@ -28,8 +32,10 @@ def compute_takeoff_landing(start=None, end=None): result = update_takeoff_landings(session=session, date=single_date) -@manager.command -def compute_logbook(start=None, end=None): +@user_cli.command('compute_logbook') +@click.argument('start') +@click.argument('end') +def compute_logbook(start, end): """Compute logbook.""" days = get_database_days(start, end) @@ -40,8 +46,9 @@ def compute_logbook(start=None, end=None): result = update_logbook(session=session, date=single_date) -@manager.arg('date', help='date (format: yyyy-mm-dd)') -@manager.command +@user_cli.command('show') +@click.argument('airport_name') +@click.argument('date') def show(airport_name, date=None): """Show a logbook for .""" airport = session.query(Airport) \ @@ -56,14 +63,14 @@ def show(airport_name, date=None): if date is not None: date = datetime.strptime(date, "%Y-%m-%d") (start, end) = date_to_timestamps(date) - or_args = [between(Logbook.reftime, start, end)] + or_args = [db.between(Logbook.reftime, start, end)] # get all logbook entries and add device and airport infos logbook_query = session.query(func.row_number().over(order_by=Logbook.reftime).label('row_number'), Logbook) \ .filter(*or_args) \ - .filter(or_(Logbook.takeoff_airport_id == airport.id, - Logbook.landing_airport_id == airport.id)) \ + .filter(db.or_(Logbook.takeoff_airport_id == airport.id, + Logbook.landing_airport_id == airport.id)) \ .order_by(Logbook.reftime) # ... and finally print out the logbook diff --git a/ogn_python/commands/stats.py b/ogn_python/commands/stats.py new file mode 100644 index 0000000..481b47e --- /dev/null +++ b/ogn_python/commands/stats.py @@ -0,0 +1,67 @@ +from flask.cli import AppGroup +import click + +from datetime import datetime +from tqdm import tqdm + +from ogn_python.commands.database import get_database_days + +from ogn_python.collect.stats import create_device_stats, create_receiver_stats, create_relation_stats,\ + update_qualities, update_receivers as update_receivers_command, update_devices as update_devices_command,\ + update_device_stats_jumps + +from ogn_python.collect.ognrange import create_receiver_coverage + +from ogn_python import db + + +user_cli = AppGroup('stats') +user_cli.help = "Handling of statistical data." + + +@user_cli.command('create') +@click.argument('start') +@click.argument('end') +def create(start, end): + """Create DeviceStats, ReceiverStats and RelationStats.""" + + days = get_database_days(start, end) + + pbar = tqdm(days) + for single_date in pbar: + pbar.set_description(datetime.strftime(single_date, '%Y-%m-%d')) + result = create_device_stats(session=db.session, date=single_date) + result = update_device_stats_jumps(session=db.session, date=single_date) + result = create_receiver_stats(session=db.session, date=single_date) + result = create_relation_stats(session=db.session, date=single_date) + result = update_qualities(session=db.session, date=single_date) + + +@user_cli.command('update_receivers') +def update_receivers(): + """Update receivers with data from stats.""" + + result = update_receivers_command(session=db.session) + print(result) + + +@user_cli.command('update_devices') +def update_devices(): + """Update devices with data from stats.""" + + result = update_devices_command(session=db.session) + print(result) + + +@user_cli.command('create_ognrange') +@click.argument('start') +@click.argument('end') +def create_ognrange(start=None, end=None): + """Create stats for Melissas ognrange.""" + + days = get_database_days(start, end) + + pbar = tqdm(days) + for single_date in pbar: + pbar.set_description(datetime.strftime(single_date, '%Y-%m-%d')) + result = create_receiver_coverage(session=db.session, date=single_date) diff --git a/ogn/gateway/__init__.py b/ogn_python/gateway/__init__.py similarity index 100% rename from ogn/gateway/__init__.py rename to ogn_python/gateway/__init__.py diff --git a/ogn/gateway/manage.py b/ogn_python/gateway/manage.py similarity index 87% rename from ogn/gateway/manage.py rename to ogn_python/gateway/manage.py index 2093aac..a388af8 100644 --- a/ogn/gateway/manage.py +++ b/ogn_python/gateway/manage.py @@ -1,11 +1,11 @@ import logging from manager import Manager -from ogn.client import AprsClient -from ogn.gateway.process import string_to_message +from ogn_python.client import AprsClient +from ogn_python.gateway.process import string_to_message from datetime import datetime -from ogn.gateway.process_tools import DbSaver -from ogn.commands.dbutils import session +from ogn_python.gateway.process_tools import DbSaver +from ogn_python.commands.dbutils import session manager = Manager() diff --git a/ogn/gateway/process.py b/ogn_python/gateway/process.py similarity index 90% rename from ogn/gateway/process.py rename to ogn_python/gateway/process.py index fc68ee9..68e4ff7 100644 --- a/ogn/gateway/process.py +++ b/ogn_python/gateway/process.py @@ -2,10 +2,10 @@ import logging from mgrs import MGRS -from ogn.commands.dbutils import session -from ogn.model import Location -from ogn.parser import parse, ParseError -from ogn.gateway.process_tools import DbSaver, AIRCRAFT_BEACON_TYPES, RECEIVER_BEACON_TYPES +from ogn_python.commands.dbutils import session +from ogn_python.model import Location +from ogn_python.parser import parse, ParseError +from ogn_python.gateway.process_tools import DbSaver, AIRCRAFT_BEACON_TYPES, RECEIVER_BEACON_TYPES logger = logging.getLogger(__name__) diff --git a/ogn/gateway/process_tools.py b/ogn_python/gateway/process_tools.py similarity index 98% rename from ogn/gateway/process_tools.py rename to ogn_python/gateway/process_tools.py index c07a8c3..54098f1 100644 --- a/ogn/gateway/process_tools.py +++ b/ogn_python/gateway/process_tools.py @@ -1,6 +1,6 @@ from datetime import datetime, timedelta -from ogn.model import AircraftBeacon, ReceiverBeacon -from ogn.collect.database import upsert +from ogn_python.model import AircraftBeacon, ReceiverBeacon +from ogn_python.collect.database import upsert # define message types we want to proceed AIRCRAFT_BEACON_TYPES = ['aprs_aircraft', 'flarm', 'tracker', 'fanet', 'lt24', 'naviter', 'skylines', 'spider', 'spot'] diff --git a/ogn/model/__init__.py b/ogn_python/model/__init__.py similarity index 100% rename from ogn/model/__init__.py rename to ogn_python/model/__init__.py diff --git a/ogn/model/aircraft_beacon.py b/ogn_python/model/aircraft_beacon.py similarity index 99% rename from ogn/model/aircraft_beacon.py rename to ogn_python/model/aircraft_beacon.py index 69db821..acf5858 100644 --- a/ogn/model/aircraft_beacon.py +++ b/ogn_python/model/aircraft_beacon.py @@ -1,7 +1,7 @@ from sqlalchemy.sql import func from .beacon import Beacon -from ogn import db +from ogn_python import db class AircraftBeacon(Beacon): diff --git a/ogn/model/aircraft_type.py b/ogn_python/model/aircraft_type.py similarity index 100% rename from ogn/model/aircraft_type.py rename to ogn_python/model/aircraft_type.py diff --git a/ogn/model/airport.py b/ogn_python/model/airport.py similarity index 97% rename from ogn/model/airport.py rename to ogn_python/model/airport.py index 24ab452..7f9504c 100644 --- a/ogn/model/airport.py +++ b/ogn_python/model/airport.py @@ -1,6 +1,6 @@ from geoalchemy2.types import Geometry -from ogn import db +from ogn_python import db class Airport(db.Model): diff --git a/ogn/model/beacon.py b/ogn_python/model/beacon.py similarity index 97% rename from ogn/model/beacon.py rename to ogn_python/model/beacon.py index cba8e4e..a394f8c 100644 --- a/ogn/model/beacon.py +++ b/ogn_python/model/beacon.py @@ -5,7 +5,7 @@ from sqlalchemy.ext.hybrid import hybrid_property from .geo import Location -from ogn import db +from ogn_python import db class Beacon(AbstractConcreteBase, db.Model): diff --git a/ogn/model/country.py b/ogn_python/model/country.py similarity index 97% rename from ogn/model/country.py rename to ogn_python/model/country.py index 93b00a6..2b16304 100644 --- a/ogn/model/country.py +++ b/ogn_python/model/country.py @@ -1,6 +1,6 @@ from geoalchemy2.types import Geometry -from ogn import db +from ogn_python import db class Country(db.Model): diff --git a/ogn/model/device.py b/ogn_python/model/device.py similarity index 96% rename from ogn/model/device.py rename to ogn_python/model/device.py index 21288a2..8251cf8 100644 --- a/ogn/model/device.py +++ b/ogn_python/model/device.py @@ -1,4 +1,4 @@ -from ogn import db +from ogn_python import db class Device(db.Model): diff --git a/ogn/model/device_info.py b/ogn_python/model/device_info.py similarity index 97% rename from ogn/model/device_info.py rename to ogn_python/model/device_info.py index fa06f0d..6060506 100644 --- a/ogn/model/device_info.py +++ b/ogn_python/model/device_info.py @@ -1,4 +1,4 @@ -from ogn import db +from ogn_python import db class DeviceInfo(db.Model): diff --git a/ogn/model/device_info_origin.py b/ogn_python/model/device_info_origin.py similarity index 100% rename from ogn/model/device_info_origin.py rename to ogn_python/model/device_info_origin.py diff --git a/ogn/model/device_stats.py b/ogn_python/model/device_stats.py similarity index 98% rename from ogn/model/device_stats.py rename to ogn_python/model/device_stats.py index 6bb3078..34f5277 100644 --- a/ogn/model/device_stats.py +++ b/ogn_python/model/device_stats.py @@ -1,4 +1,4 @@ -from ogn import db +from ogn_python import db class DeviceStats(db.Model): diff --git a/ogn/model/flights2d.py b/ogn_python/model/flights2d.py similarity index 97% rename from ogn/model/flights2d.py rename to ogn_python/model/flights2d.py index d7cf29b..8267848 100644 --- a/ogn/model/flights2d.py +++ b/ogn_python/model/flights2d.py @@ -1,6 +1,6 @@ from geoalchemy2.types import Geometry -from ogn import db +from ogn_python import db class Flight2D(db.Model): diff --git a/ogn/model/geo.py b/ogn_python/model/geo.py similarity index 100% rename from ogn/model/geo.py rename to ogn_python/model/geo.py diff --git a/ogn/model/logbook.py b/ogn_python/model/logbook.py similarity index 98% rename from ogn/model/logbook.py rename to ogn_python/model/logbook.py index ca34f04..40eef16 100644 --- a/ogn/model/logbook.py +++ b/ogn_python/model/logbook.py @@ -1,6 +1,6 @@ from sqlalchemy.ext.hybrid import hybrid_property -from ogn import db +from ogn_python import db class Logbook(db.Model): diff --git a/ogn/model/receiver.py b/ogn_python/model/receiver.py similarity index 97% rename from ogn/model/receiver.py rename to ogn_python/model/receiver.py index 8a72a78..97d5e71 100644 --- a/ogn/model/receiver.py +++ b/ogn_python/model/receiver.py @@ -3,7 +3,7 @@ from geoalchemy2.types import Geometry from .geo import Location -from ogn import db +from ogn_python import db class Receiver(db.Model): diff --git a/ogn/model/receiver_beacon.py b/ogn_python/model/receiver_beacon.py similarity index 99% rename from ogn/model/receiver_beacon.py rename to ogn_python/model/receiver_beacon.py index 67e3859..e50fdb5 100644 --- a/ogn/model/receiver_beacon.py +++ b/ogn_python/model/receiver_beacon.py @@ -1,7 +1,7 @@ from sqlalchemy.sql import func from .beacon import Beacon -from ogn import db +from ogn_python import db class ReceiverBeacon(Beacon): diff --git a/ogn/model/receiver_coverage.py b/ogn_python/model/receiver_coverage.py similarity index 97% rename from ogn/model/receiver_coverage.py rename to ogn_python/model/receiver_coverage.py index 9c41425..5883039 100644 --- a/ogn/model/receiver_coverage.py +++ b/ogn_python/model/receiver_coverage.py @@ -1,4 +1,4 @@ -from ogn import db +from ogn_python import db class ReceiverCoverage(db.Model): diff --git a/ogn/model/receiver_stats.py b/ogn_python/model/receiver_stats.py similarity index 98% rename from ogn/model/receiver_stats.py rename to ogn_python/model/receiver_stats.py index 9d733fb..b66a795 100644 --- a/ogn/model/receiver_stats.py +++ b/ogn_python/model/receiver_stats.py @@ -1,6 +1,6 @@ from geoalchemy2.types import Geometry -from ogn import db +from ogn_python import db class ReceiverStats(db.Model): diff --git a/ogn/model/relation_stats.py b/ogn_python/model/relation_stats.py similarity index 97% rename from ogn/model/relation_stats.py rename to ogn_python/model/relation_stats.py index b041fb4..413b755 100644 --- a/ogn/model/relation_stats.py +++ b/ogn_python/model/relation_stats.py @@ -1,4 +1,4 @@ -from ogn import db +from ogn_python import db class RelationStats(db.Model): diff --git a/ogn/model/takeoff_landing.py b/ogn_python/model/takeoff_landing.py similarity index 96% rename from ogn/model/takeoff_landing.py rename to ogn_python/model/takeoff_landing.py index 18da439..a463c5c 100644 --- a/ogn/model/takeoff_landing.py +++ b/ogn_python/model/takeoff_landing.py @@ -1,4 +1,4 @@ -from ogn import db +from ogn_python import db class TakeoffLanding(db.Model): diff --git a/ogn/navigation.py b/ogn_python/navigation.py similarity index 100% rename from ogn/navigation.py rename to ogn_python/navigation.py diff --git a/ogn/routes.py b/ogn_python/routes.py similarity index 97% rename from ogn/routes.py rename to ogn_python/routes.py index 614fb23..f13c3f9 100644 --- a/ogn/routes.py +++ b/ogn_python/routes.py @@ -1,9 +1,9 @@ from flask import request, render_template -from ogn import app -from ogn import db +from ogn_python import app +from ogn_python import db -from ogn.model import * +from ogn_python.model import * @app.route('/') diff --git a/ogn/static/css/flags/LICENSE b/ogn_python/static/css/flags/LICENSE similarity index 100% rename from ogn/static/css/flags/LICENSE rename to ogn_python/static/css/flags/LICENSE diff --git a/ogn/static/css/flags/flags.css b/ogn_python/static/css/flags/flags.css similarity index 100% rename from ogn/static/css/flags/flags.css rename to ogn_python/static/css/flags/flags.css diff --git a/ogn/static/css/flags/flags.png b/ogn_python/static/css/flags/flags.png similarity index 100% rename from ogn/static/css/flags/flags.png rename to ogn_python/static/css/flags/flags.png diff --git a/ogn/static/img/Blank.gif b/ogn_python/static/img/Blank.gif similarity index 100% rename from ogn/static/img/Blank.gif rename to ogn_python/static/img/Blank.gif diff --git a/ogn/static/img/Transparent.gif b/ogn_python/static/img/Transparent.gif similarity index 100% rename from ogn/static/img/Transparent.gif rename to ogn_python/static/img/Transparent.gif diff --git a/ogn/templates/airports.html b/ogn_python/templates/airports.html similarity index 100% rename from ogn/templates/airports.html rename to ogn_python/templates/airports.html diff --git a/ogn/templates/base.html b/ogn_python/templates/base.html similarity index 100% rename from ogn/templates/base.html rename to ogn_python/templates/base.html diff --git a/ogn/templates/device_detail.html b/ogn_python/templates/device_detail.html similarity index 100% rename from ogn/templates/device_detail.html rename to ogn_python/templates/device_detail.html diff --git a/ogn/templates/devices.html b/ogn_python/templates/devices.html similarity index 100% rename from ogn/templates/devices.html rename to ogn_python/templates/devices.html diff --git a/ogn/templates/logbook.html b/ogn_python/templates/logbook.html similarity index 100% rename from ogn/templates/logbook.html rename to ogn_python/templates/logbook.html diff --git a/ogn/templates/ogn_live.html b/ogn_python/templates/ogn_live.html similarity index 100% rename from ogn/templates/ogn_live.html rename to ogn_python/templates/ogn_live.html diff --git a/ogn/templates/receivers.html b/ogn_python/templates/receivers.html similarity index 100% rename from ogn/templates/receivers.html rename to ogn_python/templates/receivers.html diff --git a/ogn/templates/records.html b/ogn_python/templates/records.html similarity index 100% rename from ogn/templates/records.html rename to ogn_python/templates/records.html diff --git a/ogn/utils.py b/ogn_python/utils.py similarity index 100% rename from ogn/utils.py rename to ogn_python/utils.py diff --git a/setup.py b/setup.py index 29a9473..1b88a59 100644 --- a/setup.py +++ b/setup.py @@ -33,13 +33,12 @@ setup( packages=find_packages(exclude=['tests', 'tests.*']), install_requires=[ 'Flask==1.0.2', - 'flask-bootstrap==3.3.7.1', 'flask-sqlalchemy==2.3.2', + 'Flask-Migrate==2.3.1', + 'flask-bootstrap==3.3.7.1', 'flask-nav==0.6', 'geopy==1.17.0', - 'manage.py==0.2.10', 'celery[redis]==4.2.1', - 'alembic==1.0.0', 'aerofiles==0.4.1', 'geoalchemy2==0.5.0', 'shapely>=1.5.17,<1.6', diff --git a/tests/backend/test_backends.py b/tests/backend/test_backends.py index 06312cd..d9ea103 100644 --- a/tests/backend/test_backends.py +++ b/tests/backend/test_backends.py @@ -5,11 +5,11 @@ from datetime import datetime from xmlunittest import XmlTestMixin -from ogn.model import AircraftBeacon, Receiver, Device, DeviceInfo +from ogn_python.model import AircraftBeacon, Receiver, Device, DeviceInfo -from ogn.backend.liveglidernet import rec, lxml -from ogn.backend.ognrange import stations2_filtered_pl -from ogn.model.aircraft_type import AircraftType +from ogn_python.backend.liveglidernet import rec, lxml +from ogn_python.backend.ognrange import stations2_filtered_pl +from ogn_python.model.aircraft_type import AircraftType class TestDB(unittest.TestCase, XmlTestMixin): @@ -19,11 +19,11 @@ class TestDB(unittest.TestCase, XmlTestMixin): def setUp(self): os.environ['OGN_CONFIG_MODULE'] = 'config.test' - from ogn.commands.dbutils import engine, session + from ogn_python.commands.dbutils import engine, session self.session = session self.engine = engine - from ogn.commands.database import init + from ogn_python.commands.database import init init() # Prepare Beacons diff --git a/tests/base.py b/tests/base.py index 220945a..b36cba2 100644 --- a/tests/base.py +++ b/tests/base.py @@ -10,14 +10,14 @@ class TestBaseDB(unittest.TestCase): @classmethod def setUpClass(cls): - from ogn.commands.dbutils import engine, session + from ogn_python.commands.dbutils import engine, session cls.session = session cls.engine = engine - from ogn.commands.database import drop + from ogn_python.commands.database import drop drop(sure='y') - from ogn.commands.database import init + from ogn_python.commands.database import init init() def setUp(self): diff --git a/tests/collect/test_database.py b/tests/collect/test_database.py index 4fba4ed..8df47b0 100644 --- a/tests/collect/test_database.py +++ b/tests/collect/test_database.py @@ -2,8 +2,8 @@ import unittest from tests.base import TestBaseDB -from ogn.model import AircraftBeacon, ReceiverBeacon, Device, Receiver -from ogn.collect.database import add_missing_devices, add_missing_receivers, upsert +from ogn_python.model import AircraftBeacon, ReceiverBeacon, Device, Receiver +from ogn_python.collect.database import add_missing_devices, add_missing_receivers, upsert class TestDatabase(TestBaseDB): diff --git a/tests/collect/test_logbook.py b/tests/collect/test_logbook.py index 7f021e2..3ca7eef 100644 --- a/tests/collect/test_logbook.py +++ b/tests/collect/test_logbook.py @@ -2,8 +2,8 @@ import unittest from tests.base import TestBaseDB -from ogn.model import Logbook, Airport, Device, TakeoffLanding -from ogn.collect.logbook import update_logbook +from ogn_python.model import Logbook, Airport, Device, TakeoffLanding +from ogn_python.collect.logbook import update_logbook class TestLogbook(TestBaseDB): diff --git a/tests/collect/test_ognrange.py b/tests/collect/test_ognrange.py index 99f87a2..297bc29 100644 --- a/tests/collect/test_ognrange.py +++ b/tests/collect/test_ognrange.py @@ -3,8 +3,8 @@ from datetime import date from tests.base import TestBaseDB -from ogn.model import AircraftBeacon, Receiver, ReceiverCoverage, Device -from ogn.collect.ognrange import create_receiver_coverage +from ogn_python.model import AircraftBeacon, Receiver, ReceiverCoverage, Device +from ogn_python.collect.ognrange import create_receiver_coverage class TestOGNrange(TestBaseDB): diff --git a/tests/collect/test_stats.py b/tests/collect/test_stats.py index 91b6f20..cd11b41 100644 --- a/tests/collect/test_stats.py +++ b/tests/collect/test_stats.py @@ -3,9 +3,9 @@ from datetime import datetime, date from tests.base import TestBaseDB -from ogn.model import AircraftBeacon, ReceiverBeacon, Receiver, Device, DeviceStats +from ogn_python.model import AircraftBeacon, ReceiverBeacon, Receiver, Device, DeviceStats -from ogn.collect.stats import create_device_stats +from ogn_python.collect.stats import create_device_stats class TestStats(TestBaseDB): diff --git a/tests/collect/test_takeoff_landing.py b/tests/collect/test_takeoff_landing.py index 8141a8d..67624c3 100644 --- a/tests/collect/test_takeoff_landing.py +++ b/tests/collect/test_takeoff_landing.py @@ -2,9 +2,9 @@ import unittest from tests.base import TestBaseDB -from ogn.model import TakeoffLanding +from ogn_python.model import TakeoffLanding -from ogn.collect.takeoff_landings import update_takeoff_landings +from ogn_python.collect.takeoff_landings import update_takeoff_landings class TestTakeoffLanding(TestBaseDB): diff --git a/tests/commands/test_database.py b/tests/commands/test_database.py index ef9ec09..6e705fa 100644 --- a/tests/commands/test_database.py +++ b/tests/commands/test_database.py @@ -3,8 +3,8 @@ import os from tests.base import TestBaseDB -from ogn.model import DeviceInfo -from ogn.commands.database import import_file +from ogn_python.model import DeviceInfo +from ogn_python.commands.database import import_file class TestDatabase(TestBaseDB): diff --git a/tests/gateway/test_saver.py b/tests/gateway/test_saver.py index 11ae227..90929a7 100644 --- a/tests/gateway/test_saver.py +++ b/tests/gateway/test_saver.py @@ -2,7 +2,7 @@ import datetime import unittest from unittest.mock import MagicMock -from ogn.gateway.process_tools import DbSaver +from ogn_python.gateway.process_tools import DbSaver class DbSaverTest(unittest.TestCase): diff --git a/tests/test_utils.py b/tests/test_utils.py index 7c89d01..166cf26 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -2,8 +2,8 @@ import os import unittest from datetime import date -from ogn.model import AircraftType -from ogn.utils import get_days, get_ddb, get_trackable, get_airports +from ogn_python.model import AircraftType +from ogn_python.utils import get_days, get_ddb, get_trackable, get_airports class TestStringMethods(unittest.TestCase):