This was originally five patches, but they are all needed to pass any of the test jobs now, so they have been squashed into one: Co-Authored-By: Dan Smith (dms@danplanet.com) First: The autoload argument was removed[1] in SQLAlchemy and only the autoload_with argument should be passed. The autoload argument is set according to the autoload_with argument automatically even in SQLAlchemy 1.x[2] so is not at all needed. [1]c932123bac[2]ad8f921e96Second: Remove _warn_on_bytestring for newer SA, AFAICT, this flag has been removed from SQLAlchemy and that is why watcher-db-manage fails to initialize the DB for me on jammy. This migration was passing the default value (=False) anyway, so I assume this is the right "fix". Third: Fix joinedload passing string attribute names Fourth: Fix engine.select pattern to use begin() per the migration guide. Fifth: Override the apscheduler get_next_run_time() which appears to be trivially not compatible with SQLAlchemy 2.0 because of a return type from scalar(). Change-Id: I000e5e78f97f82ed4ea64d42f1c38354c3252e08
44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
"""Add apscheduler_jobs table to store background jobs
|
|
|
|
Revision ID: 0f6042416884
|
|
Revises: 001
|
|
Create Date: 2017-03-24 11:21:29.036532
|
|
|
|
"""
|
|
from alembic import op
|
|
from sqlalchemy import inspect
|
|
import sqlalchemy as sa
|
|
|
|
from watcher.db.sqlalchemy import models
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision = '0f6042416884'
|
|
down_revision = '001'
|
|
|
|
def _table_exists(table_name):
|
|
bind = op.get_context().bind
|
|
insp = inspect(bind)
|
|
names = insp.get_table_names()
|
|
return any(t == table_name for t in names)
|
|
|
|
|
|
def upgrade():
|
|
if _table_exists('apscheduler_jobs'):
|
|
return
|
|
|
|
op.create_table(
|
|
'apscheduler_jobs',
|
|
sa.Column('id', sa.Unicode(191),
|
|
nullable=False),
|
|
sa.Column('next_run_time', sa.Float(25), index=True),
|
|
sa.Column('job_state', sa.LargeBinary, nullable=False),
|
|
sa.Column('service_id', sa.Integer(), nullable=False),
|
|
sa.Column('tag', models.JSONEncodedDict(), nullable=True),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
sa.ForeignKeyConstraint(['service_id'], ['services.id'])
|
|
)
|
|
|
|
|
|
def downgrade():
|
|
op.drop_table('apscheduler_jobs')
|