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):