a ton of fun happened, refactored alot
This commit is contained in:
@ -1,66 +1,108 @@
|
||||
from __future__ import with_statement
|
||||
# File: migrations/env.py
|
||||
|
||||
import os
|
||||
import logging
|
||||
import glob
|
||||
import sys
|
||||
import json
|
||||
import importlib
|
||||
|
||||
from alembic import context
|
||||
from sqlalchemy import engine_from_config, pool
|
||||
from logging.config import fileConfig
|
||||
from sqlalchemy import create_engine, pool
|
||||
from alembic import context
|
||||
|
||||
from flask import current_app
|
||||
from app import db
|
||||
# ─── Ensure we can load .env and app code ────────────────────────────────────
|
||||
project_root = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
|
||||
sys.path.insert(0, project_root)
|
||||
|
||||
# -----------------------------
|
||||
# 🔍 Automatically import all plugin models under their real package name
|
||||
# -----------------------------
|
||||
plugin_model_paths = glob.glob(os.path.join("plugins", "*", "models.py"))
|
||||
|
||||
for path in plugin_model_paths:
|
||||
rel = path[len("plugins/") : -len("/models.py")]
|
||||
pkg = f"plugins.{rel}.models"
|
||||
try:
|
||||
importlib.import_module(pkg)
|
||||
print(f"✅ Loaded: {pkg}")
|
||||
except Exception as e:
|
||||
print(f"❌ Failed to load {pkg}: {e}")
|
||||
# -----------------------------
|
||||
# ─── Load .env (so MYSQL_* and other vars are available) ─────────────────────
|
||||
from dotenv import load_dotenv, find_dotenv
|
||||
dotenv_path = find_dotenv() # looks in project root or parents
|
||||
if dotenv_path:
|
||||
load_dotenv(dotenv_path, override=True)
|
||||
|
||||
# ─── Alembic Config & Logging ────────────────────────────────────────────────
|
||||
config = context.config
|
||||
fileConfig(config.config_file_name)
|
||||
logger = logging.getLogger("alembic.env")
|
||||
logger.setLevel(logging.WARN) # optional: silence alembic spam
|
||||
|
||||
# ─── Import your app’s metadata for 'autogenerate' support ─────────────────
|
||||
from app import db
|
||||
target_metadata = db.metadata
|
||||
|
||||
# ─── Dynamically import all plugin models listed in plugin.json ─────────────
|
||||
plugins_dir = os.path.join(project_root, "plugins")
|
||||
for plugin in sorted(os.listdir(plugins_dir)):
|
||||
manifest = os.path.join(plugins_dir, plugin, "plugin.json")
|
||||
if not os.path.isfile(manifest):
|
||||
continue
|
||||
try:
|
||||
meta = json.load(open(manifest))
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
for model_mod in meta.get("models", []):
|
||||
try:
|
||||
importlib.import_module(model_mod)
|
||||
except ImportError:
|
||||
pass
|
||||
for sp in meta.get("subplugins", []):
|
||||
for model_mod in sp.get("models", []):
|
||||
try:
|
||||
importlib.import_module(model_mod)
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
# ─── Build or retrieve the database URL ──────────────────────────────────────
|
||||
def get_database_url():
|
||||
# 1) alembic.ini setting
|
||||
url = config.get_main_option("sqlalchemy.url")
|
||||
if url:
|
||||
return url
|
||||
|
||||
# 2) Generic DATABASE_URL env var
|
||||
url = os.environ.get("DATABASE_URL")
|
||||
if url:
|
||||
return url
|
||||
|
||||
# 3) MySQL env vars (from .env or docker-compose)
|
||||
user = os.environ.get("MYSQL_USER")
|
||||
pwd = os.environ.get("MYSQL_PASSWORD")
|
||||
host = os.environ.get("MYSQL_HOST", "db")
|
||||
port = os.environ.get("MYSQL_PORT", "3306")
|
||||
dbn = os.environ.get("MYSQL_DATABASE")
|
||||
if user and pwd and dbn:
|
||||
return f"mysql+pymysql://{user}:{pwd}@{host}:{port}/{dbn}"
|
||||
|
||||
raise RuntimeError(
|
||||
"Database URL not configured for Alembic migrations; "
|
||||
"set 'sqlalchemy.url' in alembic.ini, or DATABASE_URL, "
|
||||
"or MYSQL_USER/MYSQL_PASSWORD/MYSQL_DATABASE in the environment"
|
||||
)
|
||||
|
||||
# ─── Offline migration ───────────────────────────────────────────────────────
|
||||
def run_migrations_offline():
|
||||
url = get_database_url()
|
||||
context.configure(
|
||||
url=current_app.config.get("SQLALCHEMY_DATABASE_URI"),
|
||||
url=url,
|
||||
target_metadata=target_metadata,
|
||||
literal_binds=True,
|
||||
dialect_opts={"paramstyle": "named"},
|
||||
sort_tables=True,
|
||||
render_as_batch=True, # ✅ important!
|
||||
)
|
||||
with context.begin_transaction():
|
||||
context.run_migrations()
|
||||
|
||||
# ─── Online migration ────────────────────────────────────────────────────────
|
||||
def run_migrations_online():
|
||||
connectable = db.engine
|
||||
url = get_database_url()
|
||||
connectable = create_engine(url, poolclass=pool.NullPool)
|
||||
with connectable.connect() as connection:
|
||||
context.configure(
|
||||
connection=connection,
|
||||
target_metadata=target_metadata,
|
||||
compare_type=True,
|
||||
sort_tables=True,
|
||||
render_as_batch=True,
|
||||
compare_server_default=True,
|
||||
)
|
||||
with context.begin_transaction():
|
||||
context.run_migrations()
|
||||
|
||||
print("🧠 Alembic sees these tables:")
|
||||
print(sorted(db.metadata.tables.keys()))
|
||||
|
||||
if context.is_offline_mode():
|
||||
run_migrations_offline()
|
||||
else:
|
||||
|
28
migrations/versions/06234a515bde_auto_migrate.py
Normal file
28
migrations/versions/06234a515bde_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 06234a515bde
|
||||
Revises: 87c6df96bef3
|
||||
Create Date: 2025-06-30 09:44:06.865642
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '06234a515bde'
|
||||
down_revision = '87c6df96bef3'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/076bfc1a441b_auto_migrate.py
Normal file
28
migrations/versions/076bfc1a441b_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 076bfc1a441b
|
||||
Revises: 7229fe50de09
|
||||
Create Date: 2025-06-30 08:22:10.087506
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '076bfc1a441b'
|
||||
down_revision = '7229fe50de09'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/0964777a3294_auto_migrate.py
Normal file
28
migrations/versions/0964777a3294_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 0964777a3294
|
||||
Revises: 53d0e3d0cd47
|
||||
Create Date: 2025-06-30 09:37:40.005273
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '0964777a3294'
|
||||
down_revision = '53d0e3d0cd47'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/10e39b33d4e7_auto_migrate.py
Normal file
28
migrations/versions/10e39b33d4e7_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 10e39b33d4e7
|
||||
Revises: ee4be515bb55
|
||||
Create Date: 2025-06-30 10:06:13.159708
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '10e39b33d4e7'
|
||||
down_revision = 'ee4be515bb55'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/12cc29f97b11_auto_migrate.py
Normal file
28
migrations/versions/12cc29f97b11_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 12cc29f97b11
|
||||
Revises: dcc114909948
|
||||
Create Date: 2025-06-30 07:59:46.612023
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '12cc29f97b11'
|
||||
down_revision = 'dcc114909948'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/12ef820b5618_auto_migrate.py
Normal file
28
migrations/versions/12ef820b5618_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 12ef820b5618
|
||||
Revises: 228e71f1a33b
|
||||
Create Date: 2025-06-30 08:45:15.427549
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '12ef820b5618'
|
||||
down_revision = '228e71f1a33b'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/228e71f1a33b_auto_migrate.py
Normal file
28
migrations/versions/228e71f1a33b_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 228e71f1a33b
|
||||
Revises: 493fbb46e881
|
||||
Create Date: 2025-06-30 08:40:05.646744
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '228e71f1a33b'
|
||||
down_revision = '493fbb46e881'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
36
migrations/versions/24de4aa78a43_auto_migrate.py
Normal file
36
migrations/versions/24de4aa78a43_auto_migrate.py
Normal file
@ -0,0 +1,36 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 24de4aa78a43
|
||||
Revises: 4082065b932b
|
||||
Create Date: 2025-06-28 23:24:05.909001
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '24de4aa78a43'
|
||||
down_revision = '4082065b932b'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.create_table('zip_jobs',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('user_id', sa.Integer(), nullable=False),
|
||||
sa.Column('filename', sa.String(length=255), nullable=False),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=True),
|
||||
sa.Column('status', sa.String(length=20), nullable=True),
|
||||
sa.Column('error', sa.Text(), nullable=True),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_table('zip_jobs')
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/27f1b3976f3f_auto_migrate.py
Normal file
28
migrations/versions/27f1b3976f3f_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 27f1b3976f3f
|
||||
Revises: 10e39b33d4e7
|
||||
Create Date: 2025-06-30 10:09:47.442196
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '27f1b3976f3f'
|
||||
down_revision = '10e39b33d4e7'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/2d11e31941d9_auto_migrate.py
Normal file
28
migrations/versions/2d11e31941d9_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 2d11e31941d9
|
||||
Revises: acd3093204e7
|
||||
Create Date: 2025-06-30 07:45:03.061969
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '2d11e31941d9'
|
||||
down_revision = 'acd3093204e7'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/310f500a3d2f_auto_migrate.py
Normal file
28
migrations/versions/310f500a3d2f_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 310f500a3d2f
|
||||
Revises: d49ee8d82364
|
||||
Create Date: 2025-06-30 10:13:54.468427
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '310f500a3d2f'
|
||||
down_revision = 'd49ee8d82364'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/493fbb46e881_auto_migrate.py
Normal file
28
migrations/versions/493fbb46e881_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 493fbb46e881
|
||||
Revises: faeca4f53b04
|
||||
Create Date: 2025-06-30 08:28:50.667633
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '493fbb46e881'
|
||||
down_revision = 'faeca4f53b04'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/53d0e3d0cd47_auto_migrate.py
Normal file
28
migrations/versions/53d0e3d0cd47_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 53d0e3d0cd47
|
||||
Revises: c6fad4522e3c
|
||||
Create Date: 2025-06-30 09:32:22.487970
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '53d0e3d0cd47'
|
||||
down_revision = 'c6fad4522e3c'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/7229fe50de09_auto_migrate.py
Normal file
28
migrations/versions/7229fe50de09_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 7229fe50de09
|
||||
Revises: 12cc29f97b11
|
||||
Create Date: 2025-06-30 08:20:50.414985
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '7229fe50de09'
|
||||
down_revision = '12cc29f97b11'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/87c6df96bef3_auto_migrate.py
Normal file
28
migrations/versions/87c6df96bef3_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: 87c6df96bef3
|
||||
Revises: f34b5e058563
|
||||
Create Date: 2025-06-30 09:43:22.353321
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '87c6df96bef3'
|
||||
down_revision = 'f34b5e058563'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/a5cb08298ee4_auto_migrate.py
Normal file
28
migrations/versions/a5cb08298ee4_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: a5cb08298ee4
|
||||
Revises: 0964777a3294
|
||||
Create Date: 2025-06-30 09:40:06.234651
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'a5cb08298ee4'
|
||||
down_revision = '0964777a3294'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/acd3093204e7_auto_migrate.py
Normal file
28
migrations/versions/acd3093204e7_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: acd3093204e7
|
||||
Revises: f741addef1a1
|
||||
Create Date: 2025-06-30 07:29:07.401797
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'acd3093204e7'
|
||||
down_revision = 'f741addef1a1'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/b1e37dc718f2_auto_migrate.py
Normal file
28
migrations/versions/b1e37dc718f2_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: b1e37dc718f2
|
||||
Revises: c92477263320
|
||||
Create Date: 2025-06-30 09:46:40.791979
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'b1e37dc718f2'
|
||||
down_revision = 'c92477263320'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/b57c767ad0d6_auto_migrate.py
Normal file
28
migrations/versions/b57c767ad0d6_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: b57c767ad0d6
|
||||
Revises: 310f500a3d2f
|
||||
Create Date: 2025-06-30 10:15:24.093788
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'b57c767ad0d6'
|
||||
down_revision = '310f500a3d2f'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/b684611b27b1_auto_migrate.py
Normal file
28
migrations/versions/b684611b27b1_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: b684611b27b1
|
||||
Revises: 12ef820b5618
|
||||
Create Date: 2025-06-30 08:51:21.461638
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'b684611b27b1'
|
||||
down_revision = '12ef820b5618'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/c6fad4522e3c_auto_migrate.py
Normal file
28
migrations/versions/c6fad4522e3c_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: c6fad4522e3c
|
||||
Revises: dd2492e0ede0
|
||||
Create Date: 2025-06-30 09:30:35.084623
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'c6fad4522e3c'
|
||||
down_revision = 'dd2492e0ede0'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/c92477263320_auto_migrate.py
Normal file
28
migrations/versions/c92477263320_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: c92477263320
|
||||
Revises: fa34eb3f6084
|
||||
Create Date: 2025-06-30 09:45:35.016682
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'c92477263320'
|
||||
down_revision = 'fa34eb3f6084'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/d49ee8d82364_auto_migrate.py
Normal file
28
migrations/versions/d49ee8d82364_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: d49ee8d82364
|
||||
Revises: 27f1b3976f3f
|
||||
Create Date: 2025-06-30 10:12:13.065540
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'd49ee8d82364'
|
||||
down_revision = '27f1b3976f3f'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/d647dd4d3fbd_auto_migrate.py
Normal file
28
migrations/versions/d647dd4d3fbd_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: d647dd4d3fbd
|
||||
Revises: b684611b27b1
|
||||
Create Date: 2025-06-30 08:54:56.276182
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'd647dd4d3fbd'
|
||||
down_revision = 'b684611b27b1'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/dcc114909948_auto_migrate.py
Normal file
28
migrations/versions/dcc114909948_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: dcc114909948
|
||||
Revises: 2d11e31941d9
|
||||
Create Date: 2025-06-30 07:49:55.919638
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'dcc114909948'
|
||||
down_revision = '2d11e31941d9'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/dd2492e0ede0_auto_migrate.py
Normal file
28
migrations/versions/dd2492e0ede0_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: dd2492e0ede0
|
||||
Revises: d647dd4d3fbd
|
||||
Create Date: 2025-06-30 09:18:20.337888
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'dd2492e0ede0'
|
||||
down_revision = 'd647dd4d3fbd'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/ee4be515bb55_auto_migrate.py
Normal file
28
migrations/versions/ee4be515bb55_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: ee4be515bb55
|
||||
Revises: b1e37dc718f2
|
||||
Create Date: 2025-06-30 09:57:22.706206
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'ee4be515bb55'
|
||||
down_revision = 'b1e37dc718f2'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/f34b5e058563_auto_migrate.py
Normal file
28
migrations/versions/f34b5e058563_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: f34b5e058563
|
||||
Revises: a5cb08298ee4
|
||||
Create Date: 2025-06-30 09:40:49.692944
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'f34b5e058563'
|
||||
down_revision = 'a5cb08298ee4'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
59
migrations/versions/f741addef1a1_auto_migrate.py
Normal file
59
migrations/versions/f741addef1a1_auto_migrate.py
Normal file
@ -0,0 +1,59 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: f741addef1a1
|
||||
Revises: 24de4aa78a43
|
||||
Create Date: 2025-06-29 10:16:35.487343
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.dialects import mysql
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'f741addef1a1'
|
||||
down_revision = '24de4aa78a43'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
op.drop_table('update_images')
|
||||
op.drop_table('plant_updates')
|
||||
with op.batch_alter_table('grow_logs', schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column('media_id', sa.Integer(), nullable=True))
|
||||
batch_op.create_foreign_key(None, 'media', ['media_id'], ['id'])
|
||||
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
with op.batch_alter_table('grow_logs', schema=None) as batch_op:
|
||||
batch_op.drop_constraint(None, type_='foreignkey')
|
||||
batch_op.drop_column('media_id')
|
||||
|
||||
op.create_table('plant_updates',
|
||||
sa.Column('id', mysql.INTEGER(), autoincrement=True, nullable=False),
|
||||
sa.Column('growlog_id', mysql.INTEGER(), autoincrement=False, nullable=False),
|
||||
sa.Column('description', mysql.TEXT(), nullable=True),
|
||||
sa.Column('created_at', mysql.DATETIME(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['growlog_id'], ['grow_logs.id'], name=op.f('plant_updates_ibfk_1')),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
mysql_collate='utf8mb4_0900_ai_ci',
|
||||
mysql_default_charset='utf8mb4',
|
||||
mysql_engine='InnoDB'
|
||||
)
|
||||
op.create_table('update_images',
|
||||
sa.Column('id', mysql.INTEGER(), autoincrement=True, nullable=False),
|
||||
sa.Column('update_id', mysql.INTEGER(), autoincrement=False, nullable=False),
|
||||
sa.Column('media_id', mysql.INTEGER(), autoincrement=False, nullable=False),
|
||||
sa.Column('created_at', mysql.DATETIME(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['media_id'], ['media.id'], name=op.f('update_images_ibfk_2')),
|
||||
sa.ForeignKeyConstraint(['update_id'], ['plant_updates.id'], name=op.f('update_images_ibfk_1')),
|
||||
sa.PrimaryKeyConstraint('id'),
|
||||
mysql_collate='utf8mb4_0900_ai_ci',
|
||||
mysql_default_charset='utf8mb4',
|
||||
mysql_engine='InnoDB'
|
||||
)
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/fa34eb3f6084_auto_migrate.py
Normal file
28
migrations/versions/fa34eb3f6084_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: fa34eb3f6084
|
||||
Revises: 06234a515bde
|
||||
Create Date: 2025-06-30 09:44:53.445644
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'fa34eb3f6084'
|
||||
down_revision = '06234a515bde'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
28
migrations/versions/faeca4f53b04_auto_migrate.py
Normal file
28
migrations/versions/faeca4f53b04_auto_migrate.py
Normal file
@ -0,0 +1,28 @@
|
||||
"""auto-migrate
|
||||
|
||||
Revision ID: faeca4f53b04
|
||||
Revises: 076bfc1a441b
|
||||
Create Date: 2025-06-30 08:27:15.001657
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'faeca4f53b04'
|
||||
down_revision = '076bfc1a441b'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
pass
|
||||
# ### end Alembic commands ###
|
Reference in New Issue
Block a user