✨ Merged database migrations into one
This commit is contained in:
@@ -1,33 +0,0 @@
|
|||||||
"""Added storage_used to User
|
|
||||||
|
|
||||||
Revision ID: 01d7a503e360
|
|
||||||
Revises: 1310317108bd
|
|
||||||
Create Date: 2023-05-29 19:05:04.142548
|
|
||||||
|
|
||||||
"""
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
import ormar
|
|
||||||
from sqlalchemy.orm import Session
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = "01d7a503e360"
|
|
||||||
down_revision = "1310317108bd"
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade() -> None:
|
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
|
||||||
op.add_column("users", sa.Column("storage_used", sa.BigInteger(), nullable=True))
|
|
||||||
conn = op.get_bind()
|
|
||||||
session = Session(bind=conn)
|
|
||||||
session.execute("UPDATE users SET storage_used=0 WHERE storage_used is NULL")
|
|
||||||
op.alter_column("users", "storage_used", nullable=False)
|
|
||||||
# ### end Alembic commands ###
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade() -> None:
|
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
|
||||||
op.drop_column("users", "storage_used")
|
|
||||||
# ### end Alembic commands ###
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
"""Added thumbhash and server StorageItem
|
|
||||||
|
|
||||||
Revision ID: 1310317108bd
|
|
||||||
Revises: b74382b2c6ad
|
|
||||||
Create Date: 2023-05-29 15:53:00.388788
|
|
||||||
|
|
||||||
"""
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
import ormar
|
|
||||||
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = "1310317108bd"
|
|
||||||
down_revision = "b74382b2c6ad"
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade() -> None:
|
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
|
||||||
op.add_column("storage_items", sa.Column("thumbhash", sa.Text(), nullable=True))
|
|
||||||
op.add_column("storage_items", sa.Column("server", sa.Text(), nullable=True))
|
|
||||||
op.add_column("storage_items", sa.Column("imported", sa.Boolean(), nullable=True))
|
|
||||||
# ### end Alembic commands ###
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade() -> None:
|
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
|
||||||
op.drop_column("storage_items", "imported")
|
|
||||||
op.drop_column("storage_items", "server")
|
|
||||||
op.drop_column("storage_items", "thumbhash")
|
|
||||||
# ### end Alembic commands ###
|
|
||||||
@@ -1,83 +0,0 @@
|
|||||||
"""Added StorageItem
|
|
||||||
|
|
||||||
Revision ID: 44255816ff7b
|
|
||||||
Revises: 8ac2bed1718e
|
|
||||||
Create Date: 2023-05-25 12:29:44.913484
|
|
||||||
|
|
||||||
"""
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
import ormar
|
|
||||||
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = "44255816ff7b"
|
|
||||||
down_revision = "8ac2bed1718e"
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade() -> None:
|
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
|
||||||
op.create_table(
|
|
||||||
"storage_items",
|
|
||||||
sa.Column("id", ormar.fields.sqlalchemy_uuid.CHAR(32), nullable=False),
|
|
||||||
sa.Column("uploaded_at", sa.DateTime(), nullable=False),
|
|
||||||
sa.Column("mime_type", sa.Text(), nullable=False),
|
|
||||||
sa.Column("hash", sa.LargeBinary(length=16), nullable=True),
|
|
||||||
sa.Column("user", ormar.fields.sqlalchemy_uuid.CHAR(32), nullable=True),
|
|
||||||
sa.Column("size", sa.BigInteger(), nullable=False),
|
|
||||||
sa.Column("storage_path", sa.Text(), nullable=True),
|
|
||||||
sa.Column("deleted_at", sa.DateTime(), nullable=True),
|
|
||||||
sa.Column("alt_text", sa.Text(), nullable=True),
|
|
||||||
sa.Column("filename", sa.Text(), nullable=True),
|
|
||||||
sa.ForeignKeyConstraint(["user"], ["users.id"], name="fk_storage_items_users_id_user"),
|
|
||||||
sa.PrimaryKeyConstraint("id"),
|
|
||||||
)
|
|
||||||
op.create_table(
|
|
||||||
"storageitems_quizs",
|
|
||||||
sa.Column("id", sa.Integer(), nullable=False),
|
|
||||||
sa.Column("quiz", ormar.fields.sqlalchemy_uuid.CHAR(32), nullable=True),
|
|
||||||
sa.Column("storageitem", ormar.fields.sqlalchemy_uuid.CHAR(32), nullable=True),
|
|
||||||
sa.ForeignKeyConstraint(
|
|
||||||
["quiz"], ["quiz.id"], name="fk_storageitems_quizs_quiz_quiz_id", onupdate="CASCADE", ondelete="CASCADE"
|
|
||||||
),
|
|
||||||
sa.ForeignKeyConstraint(
|
|
||||||
["storageitem"],
|
|
||||||
["storage_items.id"],
|
|
||||||
name="fk_storageitems_quizs_storage_items_storageitem_id",
|
|
||||||
onupdate="CASCADE",
|
|
||||||
ondelete="CASCADE",
|
|
||||||
),
|
|
||||||
sa.PrimaryKeyConstraint("id"),
|
|
||||||
)
|
|
||||||
op.create_table(
|
|
||||||
"storageitems_quiztivitys",
|
|
||||||
sa.Column("id", sa.Integer(), nullable=False),
|
|
||||||
sa.Column("quiztivity", ormar.fields.sqlalchemy_uuid.CHAR(32), nullable=True),
|
|
||||||
sa.Column("storageitem", ormar.fields.sqlalchemy_uuid.CHAR(32), nullable=True),
|
|
||||||
sa.ForeignKeyConstraint(
|
|
||||||
["quiztivity"],
|
|
||||||
["quiztivitys.id"],
|
|
||||||
name="fk_storageitems_quiztivitys_quiztivitys_quiztivity_id",
|
|
||||||
onupdate="CASCADE",
|
|
||||||
ondelete="CASCADE",
|
|
||||||
),
|
|
||||||
sa.ForeignKeyConstraint(
|
|
||||||
["storageitem"],
|
|
||||||
["storage_items.id"],
|
|
||||||
name="fk_storageitems_quiztivitys_storage_items_storageitem_id",
|
|
||||||
onupdate="CASCADE",
|
|
||||||
ondelete="CASCADE",
|
|
||||||
),
|
|
||||||
sa.PrimaryKeyConstraint("id"),
|
|
||||||
)
|
|
||||||
# ### end Alembic commands ###
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade() -> None:
|
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
|
||||||
op.drop_table("storageitems_quiztivitys")
|
|
||||||
op.drop_table("storageitems_quizs")
|
|
||||||
op.drop_table("storage_items")
|
|
||||||
# ### end Alembic commands ###
|
|
||||||
@@ -0,0 +1,160 @@
|
|||||||
|
"""New storage
|
||||||
|
|
||||||
|
Revision ID: 89c4b5d547aa
|
||||||
|
Revises: 01d7a503e360
|
||||||
|
Create Date: 2023-05-29 19:24:49.275211
|
||||||
|
|
||||||
|
"""
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
import ormar
|
||||||
|
import re
|
||||||
|
import json
|
||||||
|
|
||||||
|
from sqlalchemy.orm import Session
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "89c4b5d547aa"
|
||||||
|
down_revision = "8ac2bed1718e"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
magic_regex = r"/api/v1/storage/download/(.{36}--.{36})"
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade() -> None:
|
||||||
|
## ADDED STORAGE ITEM
|
||||||
|
op.create_table(
|
||||||
|
"storage_items",
|
||||||
|
sa.Column("id", ormar.fields.sqlalchemy_uuid.CHAR(32), nullable=False),
|
||||||
|
sa.Column("uploaded_at", sa.DateTime(), nullable=False),
|
||||||
|
sa.Column("mime_type", sa.Text(), nullable=False),
|
||||||
|
sa.Column("hash", sa.LargeBinary(length=16), nullable=True),
|
||||||
|
sa.Column("user", ormar.fields.sqlalchemy_uuid.CHAR(32), nullable=True),
|
||||||
|
sa.Column("size", sa.BigInteger(), nullable=False),
|
||||||
|
sa.Column("storage_path", sa.Text(), nullable=True),
|
||||||
|
sa.Column("deleted_at", sa.DateTime(), nullable=True),
|
||||||
|
sa.Column("alt_text", sa.Text(), nullable=True),
|
||||||
|
sa.Column("filename", sa.Text(), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(["user"], ["users.id"], name="fk_storage_items_users_id_user"),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
)
|
||||||
|
op.create_table(
|
||||||
|
"storageitems_quizs",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("quiz", ormar.fields.sqlalchemy_uuid.CHAR(32), nullable=True),
|
||||||
|
sa.Column("storageitem", ormar.fields.sqlalchemy_uuid.CHAR(32), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["quiz"], ["quiz.id"], name="fk_storageitems_quizs_quiz_quiz_id", onupdate="CASCADE", ondelete="CASCADE"
|
||||||
|
),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["storageitem"],
|
||||||
|
["storage_items.id"],
|
||||||
|
name="fk_storageitems_quizs_storage_items_storageitem_id",
|
||||||
|
onupdate="CASCADE",
|
||||||
|
ondelete="CASCADE",
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
)
|
||||||
|
op.create_table(
|
||||||
|
"storageitems_quiztivitys",
|
||||||
|
sa.Column("id", sa.Integer(), nullable=False),
|
||||||
|
sa.Column("quiztivity", ormar.fields.sqlalchemy_uuid.CHAR(32), nullable=True),
|
||||||
|
sa.Column("storageitem", ormar.fields.sqlalchemy_uuid.CHAR(32), nullable=True),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["quiztivity"],
|
||||||
|
["quiztivitys.id"],
|
||||||
|
name="fk_storageitems_quiztivitys_quiztivitys_quiztivity_id",
|
||||||
|
onupdate="CASCADE",
|
||||||
|
ondelete="CASCADE",
|
||||||
|
),
|
||||||
|
sa.ForeignKeyConstraint(
|
||||||
|
["storageitem"],
|
||||||
|
["storage_items.id"],
|
||||||
|
name="fk_storageitems_quiztivitys_storage_items_storageitem_id",
|
||||||
|
onupdate="CASCADE",
|
||||||
|
ondelete="CASCADE",
|
||||||
|
),
|
||||||
|
sa.PrimaryKeyConstraint("id"),
|
||||||
|
)
|
||||||
|
|
||||||
|
## DON'T INCLUDE HOST IN IMAGE URLS
|
||||||
|
from classquiz.config import settings
|
||||||
|
|
||||||
|
settings = settings()
|
||||||
|
conn = op.get_bind()
|
||||||
|
session = Session(bind=conn)
|
||||||
|
all_cover_images = session.execute("SELECT cover_image, id from quiz where cover_image is not null;")
|
||||||
|
for cover_image, id in all_cover_images:
|
||||||
|
try:
|
||||||
|
new_cover_image = re.search(magic_regex, cover_image).group(1)
|
||||||
|
session.execute(f"UPDATE quiz SET cover_image = '{new_cover_image}' WHERE id='{id}';")
|
||||||
|
except AttributeError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
all_background_images = session.execute("SELECT background_image, id from quiz where background_image is not null;")
|
||||||
|
for bg_image, id in all_background_images:
|
||||||
|
try:
|
||||||
|
new_bg_image = re.search(magic_regex, bg_image).group(1)
|
||||||
|
session.execute(f"UPDATE quiz SET cover_image = '{new_bg_image}' WHERE id='{id}';")
|
||||||
|
except AttributeError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
all_questions = session.execute("SELECT questions, id from quiz;")
|
||||||
|
question_image_regex = rf"{settings.root_address}/api/v1/storage/download/(?=.{{36}}--.{{36}})"
|
||||||
|
for question, id in all_questions:
|
||||||
|
question_as_json = json.dumps(question)
|
||||||
|
result = re.sub(question_image_regex, "", question_as_json)
|
||||||
|
session.execute(f"UPDATE quiz SET questions = '{result}' WHERE id='{id}';")
|
||||||
|
|
||||||
|
## ADDED THUMBHASH AND SERVER STORAGE ITEM
|
||||||
|
op.add_column("storage_items", sa.Column("thumbhash", sa.Text(), nullable=True))
|
||||||
|
op.add_column("storage_items", sa.Column("server", sa.Text(), nullable=True))
|
||||||
|
op.add_column("storage_items", sa.Column("imported", sa.Boolean(), nullable=True))
|
||||||
|
|
||||||
|
## ADDED STORAGE USED TO USER
|
||||||
|
op.add_column("users", sa.Column("storage_used", sa.BigInteger(), nullable=True))
|
||||||
|
conn = op.get_bind()
|
||||||
|
session = Session(bind=conn)
|
||||||
|
session.execute("UPDATE users SET storage_used=0 WHERE storage_used is NULL")
|
||||||
|
op.alter_column("users", "storage_used", nullable=False)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
## ADDED STORAGE USED TO USER
|
||||||
|
op.drop_column("users", "storage_used")
|
||||||
|
|
||||||
|
## ADDED THUMBHASH AND SERVER STORAGE ITEM
|
||||||
|
op.drop_column("storage_items", "imported")
|
||||||
|
op.drop_column("storage_items", "server")
|
||||||
|
op.drop_column("storage_items", "thumbhash")
|
||||||
|
|
||||||
|
## DON'T INCLUDE HOST IN IMAGE URLS
|
||||||
|
from classquiz.config import settings
|
||||||
|
|
||||||
|
settings = settings()
|
||||||
|
conn = op.get_bind()
|
||||||
|
session = Session(bind=conn)
|
||||||
|
all_cover_images = session.execute("SELECT cover_image, id from quiz where cover_image is not null;")
|
||||||
|
for cover_image, id in all_cover_images:
|
||||||
|
new_cover_image = f"{settings.root_address}/api/v1/storage/download/{cover_image}"
|
||||||
|
# print(new_cover_image, id)
|
||||||
|
session.execute(f"UPDATE quiz SET cover_image = '{new_cover_image}' WHERE id='{id}';")
|
||||||
|
|
||||||
|
all_background_images = session.execute("SELECT background_image, id from quiz where background_image is not null;")
|
||||||
|
for bg_image, id in all_background_images:
|
||||||
|
new_bg_image = f"{settings.root_address}/api/v1/storage/download/{bg_image}"
|
||||||
|
# print(new_cover_image, id)
|
||||||
|
session.execute(f"UPDATE quiz SET cover_image = '{new_bg_image}' WHERE id='{id}';")
|
||||||
|
|
||||||
|
all_questions = session.execute("SELECT questions, id from quiz;")
|
||||||
|
question_image_regex = r"(?=.{36}--.{36})"
|
||||||
|
for question, id in all_questions:
|
||||||
|
question_as_json = json.dumps(question)
|
||||||
|
result = re.sub(question_image_regex, f"{settings.root_address}/api/v1/storage/download/", question_as_json)
|
||||||
|
session.execute(f"UPDATE quiz SET questions = '{result}' WHERE id='{id}';")
|
||||||
|
|
||||||
|
## ADDED STORAGE ITEM
|
||||||
|
op.drop_table("storageitems_quiztivitys")
|
||||||
|
op.drop_table("storageitems_quizs")
|
||||||
|
op.drop_table("storage_items")
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
"""Dont include host in image urls anymore
|
|
||||||
|
|
||||||
Revision ID: b74382b2c6ad
|
|
||||||
Revises: 44255816ff7b
|
|
||||||
Create Date: 2023-05-25 16:25:11.646113
|
|
||||||
|
|
||||||
"""
|
|
||||||
import json
|
|
||||||
import re
|
|
||||||
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
import ormar
|
|
||||||
from sqlalchemy.orm import Session
|
|
||||||
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = "b74382b2c6ad"
|
|
||||||
down_revision = "44255816ff7b"
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
magic_regex = r"/api/v1/storage/download/(.{36}--.{36})"
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade() -> None:
|
|
||||||
from classquiz.config import settings
|
|
||||||
|
|
||||||
settings = settings()
|
|
||||||
conn = op.get_bind()
|
|
||||||
session = Session(bind=conn)
|
|
||||||
all_cover_images = session.execute("SELECT cover_image, id from quiz where cover_image is not null;")
|
|
||||||
for cover_image, id in all_cover_images:
|
|
||||||
try:
|
|
||||||
new_cover_image = re.search(magic_regex, cover_image).group(1)
|
|
||||||
session.execute(f"UPDATE quiz SET cover_image = '{new_cover_image}' WHERE id='{id}';")
|
|
||||||
except AttributeError:
|
|
||||||
continue
|
|
||||||
|
|
||||||
all_background_images = session.execute("SELECT background_image, id from quiz where background_image is not null;")
|
|
||||||
for bg_image, id in all_background_images:
|
|
||||||
try:
|
|
||||||
new_bg_image = re.search(magic_regex, bg_image).group(1)
|
|
||||||
session.execute(f"UPDATE quiz SET cover_image = '{new_bg_image}' WHERE id='{id}';")
|
|
||||||
except AttributeError:
|
|
||||||
continue
|
|
||||||
|
|
||||||
all_questions = session.execute("SELECT questions, id from quiz;")
|
|
||||||
question_image_regex = rf"{settings.root_address}/api/v1/storage/download/(?=.{{36}}--.{{36}})"
|
|
||||||
for question, id in all_questions:
|
|
||||||
question_as_json = json.dumps(question)
|
|
||||||
result = re.sub(question_image_regex, "", question_as_json)
|
|
||||||
session.execute(f"UPDATE quiz SET questions = '{result}' WHERE id='{id}';")
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade() -> None:
|
|
||||||
from classquiz.config import settings
|
|
||||||
|
|
||||||
settings = settings()
|
|
||||||
conn = op.get_bind()
|
|
||||||
session = Session(bind=conn)
|
|
||||||
all_cover_images = session.execute("SELECT cover_image, id from quiz where cover_image is not null;")
|
|
||||||
for cover_image, id in all_cover_images:
|
|
||||||
new_cover_image = f"{settings.root_address}/api/v1/storage/download/{cover_image}"
|
|
||||||
# print(new_cover_image, id)
|
|
||||||
session.execute(f"UPDATE quiz SET cover_image = '{new_cover_image}' WHERE id='{id}';")
|
|
||||||
|
|
||||||
all_background_images = session.execute("SELECT background_image, id from quiz where background_image is not null;")
|
|
||||||
for bg_image, id in all_background_images:
|
|
||||||
new_bg_image = f"{settings.root_address}/api/v1/storage/download/{bg_image}"
|
|
||||||
# print(new_cover_image, id)
|
|
||||||
session.execute(f"UPDATE quiz SET cover_image = '{new_bg_image}' WHERE id='{id}';")
|
|
||||||
|
|
||||||
all_questions = session.execute("SELECT questions, id from quiz;")
|
|
||||||
question_image_regex = r"(?=.{36}--.{36})"
|
|
||||||
for question, id in all_questions:
|
|
||||||
question_as_json = json.dumps(question)
|
|
||||||
result = re.sub(question_image_regex, f"{settings.root_address}/api/v1/storage/download/", question_as_json)
|
|
||||||
session.execute(f"UPDATE quiz SET questions = '{result}' WHERE id='{id}';")
|
|
||||||
Reference in New Issue
Block a user