kopia lustrzana https://github.com/glidernet/ogn-python
Integrate Flask-Migrate
rodzic
df0f32dc30
commit
0638ff42e0
|
@ -1,71 +0,0 @@
|
||||||
import os
|
|
||||||
import importlib
|
|
||||||
|
|
||||||
from alembic import context
|
|
||||||
from sqlalchemy import engine_from_config, pool
|
|
||||||
from logging.config import fileConfig
|
|
||||||
|
|
||||||
|
|
||||||
# Provides access to the values within the .ini file in use.
|
|
||||||
alembic_config = context.config
|
|
||||||
|
|
||||||
# Interpret the config file for Python logging.
|
|
||||||
# This line sets up loggers basically.
|
|
||||||
fileConfig(alembic_config.config_file_name)
|
|
||||||
|
|
||||||
# Get database path from ogn config
|
|
||||||
os.environ.setdefault('OGN_CONFIG_MODULE', 'config.default')
|
|
||||||
ogn_config = importlib.import_module(os.environ['OGN_CONFIG_MODULE'])
|
|
||||||
|
|
||||||
alembic_config.set_main_option('sqlalchemy.url', ogn_config.SQLALCHEMY_DATABASE_URI)
|
|
||||||
|
|
||||||
# Import metadata for autogeneration of migrations
|
|
||||||
from ogn.model import Base
|
|
||||||
target_metadata = Base.metadata
|
|
||||||
|
|
||||||
|
|
||||||
def run_migrations_offline():
|
|
||||||
"""Run migrations in 'offline' mode.
|
|
||||||
|
|
||||||
This configures the context with just a URL
|
|
||||||
and not an Engine, though an Engine is acceptable
|
|
||||||
here as well. By skipping the Engine creation
|
|
||||||
we don't even need a DBAPI to be available.
|
|
||||||
|
|
||||||
Calls to context.execute() here emit the given string to the
|
|
||||||
script output.
|
|
||||||
|
|
||||||
"""
|
|
||||||
url = config.get_main_option("sqlalchemy.url")
|
|
||||||
context.configure(
|
|
||||||
url=url, target_metadata=target_metadata, literal_binds=True)
|
|
||||||
|
|
||||||
with context.begin_transaction():
|
|
||||||
context.run_migrations()
|
|
||||||
|
|
||||||
|
|
||||||
def run_migrations_online():
|
|
||||||
"""Run migrations in 'online' mode.
|
|
||||||
|
|
||||||
In this scenario we need to create an Engine
|
|
||||||
and associate a connection with the context.
|
|
||||||
|
|
||||||
"""
|
|
||||||
connectable = engine_from_config(
|
|
||||||
alembic_config.get_section(alembic_config.config_ini_section),
|
|
||||||
prefix='sqlalchemy.',
|
|
||||||
poolclass=pool.NullPool)
|
|
||||||
|
|
||||||
with connectable.connect() as connection:
|
|
||||||
context.configure(
|
|
||||||
connection=connection,
|
|
||||||
target_metadata=target_metadata
|
|
||||||
)
|
|
||||||
|
|
||||||
with context.begin_transaction():
|
|
||||||
context.run_migrations()
|
|
||||||
|
|
||||||
if context.is_offline_mode():
|
|
||||||
run_migrations_offline()
|
|
||||||
else:
|
|
||||||
run_migrations_online()
|
|
|
@ -1,27 +0,0 @@
|
||||||
"""TakeoffLanding: add status, remove duration
|
|
||||||
|
|
||||||
Revision ID: 0c66dabb0be9
|
|
||||||
Revises: 5717cf8e17c
|
|
||||||
Create Date: 2016-10-31 17:54:24.170607
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '0c66dabb0be9'
|
|
||||||
down_revision = '5717cf8e17c'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.add_column('aircraft_beacon', sa.Column('status', sa.SmallInteger))
|
|
||||||
op.create_index('ix_aircraft_beacon_status', 'aircraft_beacon', ['status'])
|
|
||||||
op.drop_column('logbook', 'duration')
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.drop_column('aircraft_beacon', 'status')
|
|
||||||
op.add_column('logbook', sa.Column('duration', sa.Interval))
|
|
|
@ -1,24 +0,0 @@
|
||||||
"""receiver_device to receiver
|
|
||||||
|
|
||||||
Revision ID: 104107d119d
|
|
||||||
Revises: 46bc73c49e0
|
|
||||||
Create Date: 2015-11-16 20:07:19.569378
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '104107d119d'
|
|
||||||
down_revision = '46bc73c49e0'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.rename_table('receiver_device', 'receiver')
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.rename_table('receiver', 'receiver_device')
|
|
|
@ -1,26 +0,0 @@
|
||||||
"""remove unused fields from takeoff_landing
|
|
||||||
|
|
||||||
Revision ID: 163f6213d3f
|
|
||||||
Revises: 258a3f6bbdc
|
|
||||||
Create Date: 2016-06-03 20:05:20.749369
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '163f6213d3f'
|
|
||||||
down_revision = '258a3f6bbdc'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.drop_column('takeoff_landing', 'altitude')
|
|
||||||
op.drop_column('takeoff_landing', 'ground_speed')
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.add_column('takeoff_landing', sa.Column('altitude', sa.Integer))
|
|
||||||
op.add_column('takeoff_landing', sa.Column('ground_speed', sa.Float))
|
|
|
@ -1,34 +0,0 @@
|
||||||
"""remove unnecessary pre postgis columns
|
|
||||||
|
|
||||||
Revision ID: 2004ce1566c
|
|
||||||
Revises: 277aca1b810
|
|
||||||
Create Date: 2016-04-28 18:24:14.912833
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '2004ce1566c'
|
|
||||||
down_revision = '277aca1b810'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
import geoalchemy2 as ga
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
# POSTGIS is fast enough, so lets forget radius, theta and phi
|
|
||||||
op.drop_column('aircraft_beacon', 'radius')
|
|
||||||
op.drop_column('aircraft_beacon', 'theta')
|
|
||||||
op.drop_column('aircraft_beacon', 'phi')
|
|
||||||
|
|
||||||
# ... and flight_state is not used
|
|
||||||
op.drop_column('aircraft_beacon', 'flight_state')
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.add_column('aircraft_beacon', sa.Column('radius', sa.Float))
|
|
||||||
op.add_column('aircraft_beacon', sa.Column('theta', sa.Float))
|
|
||||||
op.add_column('aircraft_beacon', sa.Column('phi', sa.Float))
|
|
||||||
op.add_column('aircraft_beacon', sa.Column('flight_state', sa.SmallInteger))
|
|
|
@ -1,28 +0,0 @@
|
||||||
"""add aircraft_type to device
|
|
||||||
|
|
||||||
Revision ID: 258a3f6bbdc
|
|
||||||
Revises: 7585491482
|
|
||||||
Create Date: 2016-05-25 20:16:57.990249
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '258a3f6bbdc'
|
|
||||||
down_revision = '7585491482'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.add_column('device', sa.Column('aircraft_type', sa.Integer))
|
|
||||||
op.create_index('ix_device_aircraft_type', 'device', ['aircraft_type'])
|
|
||||||
op.create_index('ix_aircraft_beacon_aircraft_type', 'aircraft_beacon', ['aircraft_type'])
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.drop_index('ix_aircraft_beacon_aircraft_type', 'aircraft_beacon')
|
|
||||||
op.drop_index('ix_device_aircraft_type', 'device')
|
|
||||||
op.drop_column('device', 'aircraft_type')
|
|
|
@ -1,37 +0,0 @@
|
||||||
"""Full receiver beacon info
|
|
||||||
|
|
||||||
Revision ID: 269ec1bcf99
|
|
||||||
Revises: 2c7144443d8
|
|
||||||
Create Date: 2016-01-19 22:22:50.275615
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '269ec1bcf99'
|
|
||||||
down_revision = '2c7144443d8'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.add_column('receiver_beacon', sa.Column('cpu_load', sa.Float))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('cpu_temp', sa.Float))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('free_ram', sa.Float))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('total_ram', sa.Float))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('ntp_error', sa.Float))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('rt_crystal_correction', sa.Float))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('rec_input_noise', sa.Float))
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.drop_column('receiver_beacon', 'cpu_load')
|
|
||||||
op.drop_column('receiver_beacon', 'cpu_temp')
|
|
||||||
op.drop_column('receiver_beacon', 'free_ram')
|
|
||||||
op.drop_column('receiver_beacon', 'total_ram')
|
|
||||||
op.drop_column('receiver_beacon', 'ntp_error')
|
|
||||||
op.drop_column('receiver_beacon', 'rt_crystal_correction')
|
|
||||||
op.drop_column('receiver_beacon', 'rec_input_noise')
|
|
||||||
|
|
|
@ -1,86 +0,0 @@
|
||||||
"""Migrate to PostGIS
|
|
||||||
|
|
||||||
Revision ID: 277aca1b810
|
|
||||||
Revises: 3a0765c9a2
|
|
||||||
Create Date: 2016-04-23 08:01:49.059187
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '277aca1b810'
|
|
||||||
down_revision = '3a0765c9a2'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
import geoalchemy2 as ga
|
|
||||||
|
|
||||||
UPGRADE_QUERY = """
|
|
||||||
UPDATE {table_name}
|
|
||||||
SET
|
|
||||||
location = ST_SetSRID(ST_MakePoint(longitude, latitude), 4326);
|
|
||||||
"""
|
|
||||||
|
|
||||||
DOWNGRADE_QUERY = """
|
|
||||||
UPDATE {table_name}
|
|
||||||
SET
|
|
||||||
latitude = ST_Y(ST_TRANSFORM(location, 4326)),
|
|
||||||
longitude = ST_X(ST_TRANSFORM(location, 4326));
|
|
||||||
"""
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.execute("CREATE EXTENSION IF NOT EXISTS postgis;");
|
|
||||||
op.add_column('airport', sa.Column('location', ga.Geometry('POINT', srid=4326)))
|
|
||||||
op.execute(UPGRADE_QUERY.format(table_name='airport'))
|
|
||||||
op.drop_column('airport', 'latitude')
|
|
||||||
op.drop_column('airport', 'longitude')
|
|
||||||
|
|
||||||
op.add_column('aircraft_beacon', sa.Column('location', ga.Geometry('POINT', srid=4326)))
|
|
||||||
op.execute(UPGRADE_QUERY.format(table_name='aircraft_beacon'))
|
|
||||||
op.drop_column('aircraft_beacon', 'latitude')
|
|
||||||
op.drop_column('aircraft_beacon', 'longitude')
|
|
||||||
|
|
||||||
op.add_column('receiver_beacon', sa.Column('location', ga.Geometry('POINT', srid=4326)))
|
|
||||||
op.execute(UPGRADE_QUERY.format(table_name='receiver_beacon'))
|
|
||||||
op.drop_column('receiver_beacon', 'latitude')
|
|
||||||
op.drop_column('receiver_beacon', 'longitude')
|
|
||||||
|
|
||||||
op.add_column('receiver', sa.Column('location', ga.Geometry('POINT', srid=4326)))
|
|
||||||
op.execute(UPGRADE_QUERY.format(table_name='receiver'))
|
|
||||||
op.drop_column('receiver', 'latitude')
|
|
||||||
op.drop_column('receiver', 'longitude')
|
|
||||||
|
|
||||||
op.add_column('takeoff_landing', sa.Column('location', ga.Geometry('POINT', srid=4326)))
|
|
||||||
op.execute(UPGRADE_QUERY.format(table_name='takeoff_landing'))
|
|
||||||
op.drop_column('takeoff_landing', 'latitude')
|
|
||||||
op.drop_column('takeoff_landing', 'longitude')
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.add_column('airport', sa.Column('latitude', sa.FLOAT))
|
|
||||||
op.add_column('airport', sa.Column('longitude', sa.FLOAT))
|
|
||||||
op.execute(DOWNGRADE_QUERY.format(table_name='airport'))
|
|
||||||
op.drop_column('airport', 'location')
|
|
||||||
|
|
||||||
op.add_column('aircraft_beacon', sa.Column('latitude', sa.FLOAT))
|
|
||||||
op.add_column('aircraft_beacon', sa.Column('longitude', sa.FLOAT))
|
|
||||||
op.execute(DOWNGRADE_QUERY.format(table_name='aircraft_beacon'))
|
|
||||||
op.drop_column('aircraft_beacon', 'location')
|
|
||||||
|
|
||||||
op.add_column('receiver_beacon', sa.Column('latitude', sa.FLOAT))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('longitude', sa.FLOAT))
|
|
||||||
op.execute(DOWNGRADE_QUERY.format(table_name='receiver_beacon'))
|
|
||||||
op.drop_column('receiver_beacon', 'location')
|
|
||||||
|
|
||||||
op.add_column('receiver', sa.Column('latitude', sa.FLOAT))
|
|
||||||
op.add_column('receiver', sa.Column('longitude', sa.FLOAT))
|
|
||||||
op.execute(DOWNGRADE_QUERY.format(table_name='receiver'))
|
|
||||||
op.drop_column('receiver', 'location')
|
|
||||||
|
|
||||||
op.add_column('takeoff_landing', sa.Column('latitude', sa.FLOAT))
|
|
||||||
op.add_column('takeoff_landing', sa.Column('longitude', sa.FLOAT))
|
|
||||||
op.execute(DOWNGRADE_QUERY.format(table_name='takeoff_landing'))
|
|
||||||
op.drop_column('takeoff_landing', 'location')
|
|
||||||
|
|
||||||
op.execute("DROP EXTENSION postgis;");
|
|
|
@ -1,28 +0,0 @@
|
||||||
"""logbook changes
|
|
||||||
|
|
||||||
Revision ID: 2c7144443d8
|
|
||||||
Revises: 104107d119d
|
|
||||||
Create Date: 2015-11-27 22:05:31.417449
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '2c7144443d8'
|
|
||||||
down_revision = '104107d119d'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.alter_column('aircraft_beacon', 'real_id', new_column_name='real_address')
|
|
||||||
op.add_column('aircraft_beacon', sa.Column('flight_state', sa.SmallInteger))
|
|
||||||
op.create_index('ix_aircraft_beacon_flight_state', 'aircraft_beacon', ['flight_state'])
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.alter_column('aircraft_beacon', 'real_address', new_column_name='real_id')
|
|
||||||
op.drop_column('aircraft_beacon', 'flight_state')
|
|
||||||
op.drop_index('ix_aircraft_beacon_flight_state', 'aircraft_beacon')
|
|
|
@ -1,32 +0,0 @@
|
||||||
"""hardware version hex to dec
|
|
||||||
|
|
||||||
Revision ID: 3a0765c9a2
|
|
||||||
Revises: 269ec1bcf99
|
|
||||||
Create Date: 2016-02-20 10:31:55.520815
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '3a0765c9a2'
|
|
||||||
down_revision = '269ec1bcf99'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
conn = op.get_bind()
|
|
||||||
res = conn.execute("UPDATE aircraft_beacon "
|
|
||||||
"SET hardware_version = "
|
|
||||||
"16 * (hardware_version / 10) + (hardware_version % 10) "
|
|
||||||
"WHERE hardware_version IS NOT NULL")
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
conn = op.get_bind()
|
|
||||||
res = conn.execute("UPDATE aircraft_beacon "
|
|
||||||
"SET hardware_version = "
|
|
||||||
"10 * (hardware_version / 16) + (hardware_version % 16) "
|
|
||||||
"WHERE hardware_version IS NOT NULL")
|
|
|
@ -1,24 +0,0 @@
|
||||||
"""flarm to device
|
|
||||||
|
|
||||||
Revision ID: 46bc73c49e0
|
|
||||||
Revises:
|
|
||||||
Create Date: 2015-11-16 19:44:37.934741
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '46bc73c49e0'
|
|
||||||
down_revision = None
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.rename_table('flarm', 'device')
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.rename_table('device', 'flarm')
|
|
|
@ -1,83 +0,0 @@
|
||||||
"""Create relations
|
|
||||||
|
|
||||||
Revision ID: 46d818bc09b
|
|
||||||
Revises: 2004ce1566c
|
|
||||||
Create Date: 2016-05-18 21:00:24.832298
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '46d818bc09b'
|
|
||||||
down_revision = '2004ce1566c'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
import geoalchemy2 as ga
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.add_column('aircraft_beacon', sa.Column('device_id', sa.Integer))
|
|
||||||
op.create_foreign_key("aircraft_beacon_device_id_fkey", "aircraft_beacon", "device", ["device_id"], ["id"], ondelete="SET NULL")
|
|
||||||
op.create_index('ix_aircraft_beacon_device_id', 'aircraft_beacon', ['device_id'])
|
|
||||||
|
|
||||||
op.add_column('aircraft_beacon', sa.Column('receiver_id', sa.Integer))
|
|
||||||
op.create_foreign_key("aircraft_beacon_receiver_id_fkey", "aircraft_beacon", "receiver", ["receiver_id"], ["id"], ondelete="SET NULL")
|
|
||||||
op.create_index('ix_aircraft_beacon_receiver_id', 'aircraft_beacon', ['receiver_id'])
|
|
||||||
|
|
||||||
op.drop_index('ix_aircraft_beacon_address', 'aircraft_beacon')
|
|
||||||
|
|
||||||
op.add_column('receiver_beacon', sa.Column('receiver_id', sa.Integer))
|
|
||||||
op.create_foreign_key("receiver_beacon_receiver_id_fkey", "receiver_beacon", "receiver", ["receiver_id"], ["id"], ondelete="SET NULL")
|
|
||||||
op.create_index('ix_receiver_beacon_receiver_id', 'receiver_beacon', ['receiver_id'])
|
|
||||||
|
|
||||||
|
|
||||||
op.add_column('takeoff_landing', sa.Column('airport_id', sa.Integer))
|
|
||||||
op.create_foreign_key("takeoff_landing_airport_id_fkey", "takeoff_landing", "airport", ["airport_id"], ["id"], ondelete="SET NULL")
|
|
||||||
op.create_index('ix_takeoff_landing_airport_id', 'takeoff_landing', ['airport_id'])
|
|
||||||
|
|
||||||
op.add_column('takeoff_landing', sa.Column('device_id', sa.Integer))
|
|
||||||
op.create_foreign_key('takeoff_landing_device_id_fkey', 'takeoff_landing', 'device', ['device_id'], ['id'], ondelete="SET NULL")
|
|
||||||
op.create_index('ix_takeoff_landing_device_id', 'takeoff_landing', ['device_id'])
|
|
||||||
|
|
||||||
op.drop_index('ix_takeoff_landing_address', 'takeoff_landing')
|
|
||||||
op.drop_index('idx_takeoff_landing_location', 'takeoff_landing')
|
|
||||||
op.drop_column('takeoff_landing', 'address')
|
|
||||||
op.drop_column('takeoff_landing', 'name')
|
|
||||||
op.drop_column('takeoff_landing', 'receiver_name')
|
|
||||||
op.drop_column('takeoff_landing', 'location')
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.drop_index('ix_aircraft_beacon_device_id', 'aircraft_beacon')
|
|
||||||
op.drop_foreign_key("aircraft_beacon_device_id_fkey", "aircraft_beacon")
|
|
||||||
op.drop_column('aircraft_beacon', 'device_id')
|
|
||||||
|
|
||||||
op.drop_index('ix_aircraft_beacon_receiver_id', 'aircraft_beacon')
|
|
||||||
op.drop_foreign_key("aircraft_beacon_receiver_id_fkey", "aircraft_beacon")
|
|
||||||
op.drop_column('aircraft_beacon', 'receiver_id')
|
|
||||||
|
|
||||||
op.create_index('ix_aircraft_beacon_address', sa.Column('address', sa.String))
|
|
||||||
|
|
||||||
|
|
||||||
op.drop_index('ix_receiver_beacon_receiver_id', 'receiver_beacon')
|
|
||||||
op.drop_foreign_key("ix_receiver_beacon_receiver_id", "receiver_beacon")
|
|
||||||
op.drop_column('receiver_beacon', 'receiver_id')
|
|
||||||
|
|
||||||
|
|
||||||
op.drop_index('ix_takeoff_landing_airport_id', 'takeoff_landing')
|
|
||||||
op.drop_foreign_key("takeoff_landing_airport_id_fkey", "takeoff_landing")
|
|
||||||
op.drop_column('takeoff_landing', 'airport_id')
|
|
||||||
|
|
||||||
op.drop_index('ix_takeoff_landing_device_id', 'takeoff_landing')
|
|
||||||
op.drop_foreign_key("takeoff_landing_device_id_fkey", "takeoff_landing")
|
|
||||||
op.drop_column('takeoff_landing', 'device_id')
|
|
||||||
|
|
||||||
op.add_column('takeoff_landing', sa.Column('name', sa.String))
|
|
||||||
op.add_column('takeoff_landing', sa.Column('receiver_name', sa.String(9)))
|
|
||||||
op.add_column('takeoff_landing', sa.Column('address', sa.String(6)))
|
|
||||||
op.add_column('takeoff_landing', sa.Column('location', ga.Geometry('POINT', srid=4326)))
|
|
||||||
op.create_index('ix_takeoff_landing_address', 'takeoff_landing', ['address'])
|
|
||||||
op.create_index('idx_takeoff_landing_location', 'takeoff_landing', ['location'])
|
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
"""Added DeviceInfo
|
|
||||||
|
|
||||||
Revision ID: 4ebfb325db6
|
|
||||||
Revises: 163f6213d3f
|
|
||||||
Create Date: 2016-06-04 11:11:00.546524
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '4ebfb325db6'
|
|
||||||
down_revision = '163f6213d3f'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.execute("CREATE TABLE device_info AS SELECT * FROM device;")
|
|
||||||
op.create_index('ix_device_info_address', 'device_info', ['address'])
|
|
||||||
op.drop_column('device_info', 'name')
|
|
||||||
op.drop_column('device_info', 'airport')
|
|
||||||
op.drop_column('device_info', 'frequency')
|
|
||||||
|
|
||||||
op.drop_column('device', 'address_origin')
|
|
||||||
op.drop_column('device', 'name')
|
|
||||||
op.drop_column('device', 'airport')
|
|
||||||
op.drop_column('device', 'aircraft')
|
|
||||||
op.drop_column('device', 'registration')
|
|
||||||
op.drop_column('device', 'competition')
|
|
||||||
op.drop_column('device', 'frequency')
|
|
||||||
op.drop_column('device', 'tracked')
|
|
||||||
op.drop_column('device', 'identified')
|
|
||||||
|
|
||||||
op.add_column('device', sa.Column('stealth', sa.Boolean))
|
|
||||||
op.add_column('device', sa.Column('software_version', sa.Float))
|
|
||||||
op.add_column('device', sa.Column('hardware_version', sa.SmallInteger))
|
|
||||||
op.add_column('device', sa.Column('real_address', sa.String(6)))
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.add_column('device', sa.Column('address_origin', sa.SmallInteger))
|
|
||||||
op.add_column('device', sa.Column('name', sa.Unicode))
|
|
||||||
op.add_column('device', sa.Column('airport', sa.String))
|
|
||||||
op.add_column('device', sa.Column('aircraft', sa.String))
|
|
||||||
op.add_column('device', sa.Column('registration', sa.String(7)))
|
|
||||||
op.add_column('device', sa.Column('competition', sa.String(3)))
|
|
||||||
op.add_column('device', sa.Column('frequency', sa.String))
|
|
||||||
op.add_column('device', sa.Column('tracked', sa.Boolean))
|
|
||||||
op.add_column('device', sa.Column('identified', sa.Boolean))
|
|
||||||
|
|
||||||
op.create_index('ix_device_info_registration', 'device', ['registration'])
|
|
||||||
|
|
||||||
op.drop_column('device', 'stealth')
|
|
||||||
op.drop_column('device', 'software_version')
|
|
||||||
op.drop_column('device', 'hardware_version')
|
|
||||||
op.drop_column('device', 'real_address')
|
|
||||||
|
|
||||||
# transfer from device_info to device costs too much...
|
|
||||||
op.execute("DROP TABLE device_info;")
|
|
||||||
pass
|
|
|
@ -1,48 +0,0 @@
|
||||||
"""update protocol to v0.2.5
|
|
||||||
|
|
||||||
Revision ID: 5717cf8e17c
|
|
||||||
Revises: 4ebfb325db6
|
|
||||||
Create Date: 2016-10-17 19:16:38.632097
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '5717cf8e17c'
|
|
||||||
down_revision = '4ebfb325db6'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.alter_column('aircraft_beacon', 'signal_strength', new_column_name='signal_quality')
|
|
||||||
op.add_column('aircraft_beacon', sa.Column('signal_power', sa.Float))
|
|
||||||
|
|
||||||
op.add_column('receiver_beacon', sa.Column('senders_visible', sa.Integer))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('senders_total', sa.Integer))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('senders_signal', sa.Float))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('senders_messages', sa.Integer))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('good_senders_signal', sa.Float))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('good_senders', sa.Integer))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('good_and_bad_senders', sa.Integer))
|
|
||||||
|
|
||||||
op.add_column('receiver_beacon', sa.Column('voltage', sa.Float))
|
|
||||||
op.add_column('receiver_beacon', sa.Column('amperage', sa.Float))
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.alter_column('aircraft_beacon', 'signal_quality', new_column_name='signal_strength')
|
|
||||||
op.drop_column('aircraft_beacon', 'signal_power')
|
|
||||||
|
|
||||||
op.drop_column('receiver_beacon', 'senders_visible')
|
|
||||||
op.drop_column('receiver_beacon', 'senders_total')
|
|
||||||
op.drop_column('receiver_beacon', 'senders_signal')
|
|
||||||
op.drop_column('receiver_beacon', 'senders_messages')
|
|
||||||
op.drop_column('receiver_beacon', 'good_senders_signal')
|
|
||||||
op.drop_column('receiver_beacon', 'good_senders')
|
|
||||||
op.drop_column('receiver_beacon', 'good_and_bad_senders')
|
|
||||||
|
|
||||||
op.drop_column('receiver_beacon', 'voltage')
|
|
||||||
op.drop_column('receiver_beacon', 'amperage')
|
|
|
@ -1,24 +0,0 @@
|
||||||
"""correct airport scheme
|
|
||||||
|
|
||||||
Revision ID: 7585491482
|
|
||||||
Revises: 46d818bc09b
|
|
||||||
Create Date: 2016-05-21 20:19:24.865915
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '7585491482'
|
|
||||||
down_revision = '46d818bc09b'
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.execute('ALTER TABLE airport ALTER COLUMN code TYPE varchar(6)')
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.execute('ALTER TABLE airport ALTER COLUMN code TYPE varchar(5)')
|
|
|
@ -1,9 +1,13 @@
|
||||||
# A single database configuration,
|
# A generic, single database configuration.
|
||||||
# sqlalchemy.url defined in env.py
|
|
||||||
|
|
||||||
[alembic]
|
[alembic]
|
||||||
# path to migration scripts
|
# template used to generate migration files
|
||||||
script_location = alembic
|
# file_template = %%(rev)s_%%(slug)s
|
||||||
|
|
||||||
|
# set to 'true' to run the environment during
|
||||||
|
# the 'revision' command, regardless of autogenerate
|
||||||
|
# revision_environment = false
|
||||||
|
|
||||||
|
|
||||||
# Logging configuration
|
# Logging configuration
|
||||||
[loggers]
|
[loggers]
|
|
@ -0,0 +1,90 @@
|
||||||
|
from __future__ import with_statement
|
||||||
|
from alembic import context
|
||||||
|
from sqlalchemy import engine_from_config, pool
|
||||||
|
from logging.config import fileConfig
|
||||||
|
import logging
|
||||||
|
|
||||||
|
# this is the Alembic Config object, which provides
|
||||||
|
# access to the values within the .ini file in use.
|
||||||
|
config = context.config
|
||||||
|
|
||||||
|
# Interpret the config file for Python logging.
|
||||||
|
# This line sets up loggers basically.
|
||||||
|
fileConfig(config.config_file_name)
|
||||||
|
logger = logging.getLogger('alembic.env')
|
||||||
|
|
||||||
|
# add your model's MetaData object here
|
||||||
|
# for 'autogenerate' support
|
||||||
|
# from myapp import mymodel
|
||||||
|
# target_metadata = mymodel.Base.metadata
|
||||||
|
from flask import current_app
|
||||||
|
config.set_main_option('sqlalchemy.url',
|
||||||
|
current_app.config.get('SQLALCHEMY_DATABASE_URI'))
|
||||||
|
target_metadata = current_app.extensions['migrate'].db.metadata
|
||||||
|
|
||||||
|
# other values from the config, defined by the needs of env.py,
|
||||||
|
# can be acquired:
|
||||||
|
# my_important_option = config.get_main_option("my_important_option")
|
||||||
|
# ... etc.
|
||||||
|
|
||||||
|
|
||||||
|
def run_migrations_offline():
|
||||||
|
"""Run migrations in 'offline' mode.
|
||||||
|
|
||||||
|
This configures the context with just a URL
|
||||||
|
and not an Engine, though an Engine is acceptable
|
||||||
|
here as well. By skipping the Engine creation
|
||||||
|
we don't even need a DBAPI to be available.
|
||||||
|
|
||||||
|
Calls to context.execute() here emit the given string to the
|
||||||
|
script output.
|
||||||
|
|
||||||
|
"""
|
||||||
|
url = config.get_main_option("sqlalchemy.url")
|
||||||
|
context.configure(url=url)
|
||||||
|
|
||||||
|
with context.begin_transaction():
|
||||||
|
context.run_migrations()
|
||||||
|
|
||||||
|
|
||||||
|
def run_migrations_online():
|
||||||
|
"""Run migrations in 'online' mode.
|
||||||
|
|
||||||
|
In this scenario we need to create an Engine
|
||||||
|
and associate a connection with the context.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# this callback is used to prevent an auto-migration from being generated
|
||||||
|
# when there are no changes to the schema
|
||||||
|
# reference: http://alembic.zzzcomputing.com/en/latest/cookbook.html
|
||||||
|
def process_revision_directives(context, revision, directives):
|
||||||
|
if getattr(config.cmd_opts, 'autogenerate', False):
|
||||||
|
script = directives[0]
|
||||||
|
if script.upgrade_ops.is_empty():
|
||||||
|
directives[:] = []
|
||||||
|
logger.info('No changes in schema detected.')
|
||||||
|
|
||||||
|
engine = engine_from_config(config.get_section(config.config_ini_section),
|
||||||
|
prefix='sqlalchemy.',
|
||||||
|
poolclass=pool.NullPool)
|
||||||
|
|
||||||
|
connection = engine.connect()
|
||||||
|
context.configure(connection=connection,
|
||||||
|
target_metadata=target_metadata,
|
||||||
|
process_revision_directives=process_revision_directives,
|
||||||
|
**current_app.extensions['migrate'].configure_args)
|
||||||
|
|
||||||
|
try:
|
||||||
|
with context.begin_transaction():
|
||||||
|
context.run_migrations()
|
||||||
|
except Exception as exception:
|
||||||
|
logger.error(exception)
|
||||||
|
raise exception
|
||||||
|
finally:
|
||||||
|
connection.close()
|
||||||
|
|
||||||
|
if context.is_offline_mode():
|
||||||
|
run_migrations_offline()
|
||||||
|
else:
|
||||||
|
run_migrations_online()
|
|
@ -5,6 +5,9 @@ Revises: ${down_revision | comma,n}
|
||||||
Create Date: ${create_date}
|
Create Date: ${create_date}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
${imports if imports else ""}
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision = ${repr(up_revision)}
|
revision = ${repr(up_revision)}
|
||||||
|
@ -12,9 +15,6 @@ down_revision = ${repr(down_revision)}
|
||||||
branch_labels = ${repr(branch_labels)}
|
branch_labels = ${repr(branch_labels)}
|
||||||
depends_on = ${repr(depends_on)}
|
depends_on = ${repr(depends_on)}
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
${imports if imports else ""}
|
|
||||||
|
|
||||||
def upgrade():
|
def upgrade():
|
||||||
${upgrades if upgrades else "pass"}
|
${upgrades if upgrades else "pass"}
|
|
@ -1,6 +1,7 @@
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from flask_bootstrap import Bootstrap
|
from flask_bootstrap import Bootstrap
|
||||||
from flask_sqlalchemy import SQLAlchemy
|
from flask_sqlalchemy import SQLAlchemy
|
||||||
|
from flask_migrate import Migrate
|
||||||
from flask_caching import Cache
|
from flask_caching import Cache
|
||||||
from celery import Celery
|
from celery import Celery
|
||||||
|
|
||||||
|
@ -14,17 +15,10 @@ app = Flask(__name__)
|
||||||
#app.config.from_object('config.default')
|
#app.config.from_object('config.default')
|
||||||
app.config.from_envvar('OGN_CONFIG_MODULE')
|
app.config.from_envvar('OGN_CONFIG_MODULE')
|
||||||
|
|
||||||
# Bootstrap
|
# Initialize other things
|
||||||
bootstrap = Bootstrap(app)
|
bootstrap = Bootstrap(app)
|
||||||
|
|
||||||
# Sqlalchemy
|
|
||||||
db = SQLAlchemy(app)
|
db = SQLAlchemy(app)
|
||||||
|
migrate = Migrate(app, db)
|
||||||
# Cache
|
|
||||||
cache = Cache(app)
|
cache = Cache(app)
|
||||||
|
|
||||||
# Celery
|
|
||||||
celery = make_celery(app)
|
celery = make_celery(app)
|
||||||
|
|
||||||
# Navigation
|
|
||||||
nav.init_app(app)
|
nav.init_app(app)
|
||||||
|
|
Ładowanie…
Reference in New Issue