Skip to content
Snippets Groups Projects
Commit 3c948809 authored by Andréas Livet's avatar Andréas Livet Committed by blenzi
Browse files

Change processing_status failed=>failure and add revoked

parent 2b5726c7
Branches
Tags
No related merge requests found
"""processing status is failure
Revision ID: bb5b4cdab369
Revises: b6e2cf2d4ee5
Create Date: 2025-01-31 16:32:07.197844
"""
from alembic import op
import sqlalchemy as sa
import sqlmodel.sql.sqltypes
# revision identifiers, used by Alembic.
revision = 'bb5b4cdab369'
down_revision = 'b6e2cf2d4ee5'
branch_labels = None
depends_on = None
def upgrade():
bind = op.get_bind()
old_enum = sa.Enum('unknown', 'failed', 'pending', 'retry', 'started', 'success', name='processingstatus')
new_enum = sa.Enum('unknown', 'failure', 'pending', 'retry', 'started', 'success', 'revoked', name='processingstatus_new')
new_enum.create(bind, checkfirst=True)
op.execute("ALTER TYPE processingstatus ADD VALUE 'failure'")
op.execute("COMMIT")
op.execute("ALTER TABLE document ALTER COLUMN processing_status DROP DEFAULT")
op.execute(
sa.text("UPDATE document SET processing_status = 'failure' WHERE processing_status = 'failed'")
)
op.alter_column(
'document', 'processing_status',
type_=new_enum,
existing_type=old_enum,
postgresql_using="processing_status::text::processingstatus_new"
)
old_enum.drop(bind, checkfirst=True)
op.execute("ALTER TYPE processingstatus_new RENAME TO processingstatus")
op.execute("ALTER TABLE document ALTER COLUMN processing_status SET DEFAULT 'unknown'")
def downgrade():
bind = op.get_bind()
old_enum = sa.Enum('unknown', 'failed', 'pending', 'retry', 'started', 'success', name='processingstatus_old')
new_enum = sa.Enum('unknown', 'failure', 'pending', 'retry', 'started', 'success', 'revoked', name='processingstatus')
old_enum.create(bind, checkfirst=True)
op.execute("ALTER TYPE processingstatus ADD VALUE 'failed'")
op.execute("COMMIT")
op.execute("ALTER TABLE document ALTER COLUMN processing_status DROP DEFAULT")
op.execute(
sa.text("UPDATE document SET processing_status = 'failed' WHERE processing_status = 'failure'")
)
op.alter_column(
'document', 'processing_status',
type_=old_enum,
existing_type=new_enum,
postgresql_using="processing_status::text::processingstatus_old"
)
new_enum.drop(bind, checkfirst=True)
op.execute("ALTER TYPE processingstatus_old RENAME TO processingstatus")
op.execute("ALTER TABLE document ALTER COLUMN processing_status SET DEFAULT 'unknown'")
...@@ -201,13 +201,13 @@ def update_processing_status(session: SessionDep, current_user: CurrentUser, id: ...@@ -201,13 +201,13 @@ def update_processing_status(session: SessionDep, current_user: CurrentUser, id:
detail="No processing task id, you need to call /document/{id}/process before.", detail="No processing task id, you need to call /document/{id}/process before.",
) )
# Return the value in DB if processing in ready state # Return the value in DB if processing in ready state
if document.processing_status in [ProcessingStatus.failed, ProcessingStatus.success]: if document.processing_status in [ProcessingStatus.failure, ProcessingStatus.success]:
return ProcessingStatusPublic(status=document.processing_status, details=document.processing_status_details) return ProcessingStatusPublic(status=document.processing_status, details=document.processing_status_details)
new_status = document.processing_status new_status = document.processing_status
details = None details = None
if settings.CHAT.fake: if settings.CHAT.fake:
possible_status = [ possible_status = [
ProcessingStatus.failed, ProcessingStatus.failure,
ProcessingStatus.success, ProcessingStatus.success,
ProcessingStatus.pending, ProcessingStatus.pending,
ProcessingStatus.started, ProcessingStatus.started,
......
...@@ -22,7 +22,8 @@ class UserRole(str, Enum): ...@@ -22,7 +22,8 @@ class UserRole(str, Enum):
class ProcessingStatus(str, Enum): class ProcessingStatus(str, Enum):
unknown = "UNKNOWN" unknown = "UNKNOWN"
failed = "FAILED" failure = "FAILURE"
revoked = "REVOKED"
pending = "PENDING" pending = "PENDING"
retry = "RETRY" retry = "RETRY"
started = "STARTED" started = "STARTED"
......
import uuid
from sqlalchemy.engine import Engine
from sqlmodel import Session, text
from app.tests.migrations.conftest import create_collection, create_group, create_user, load_migration_as_module
# Load migration as module
migration = load_migration_as_module("bb5b4cdab369_processing_status_is_failure.py")
rev_base = migration.down_revision
rev_head: str = migration.revision
document_id = uuid.uuid4()
def on_init(engine: Engine) -> None:
"""
Create rows in users table before migration is applied
"""
global document_id
document_id = uuid.uuid4()
with Session(engine) as session:
group_id = create_group(session)
user_id = create_user(session, group_id)
collection_id = create_collection(session, group_id, user_id)
query = text(f"""insert into public.document(id, filename, content_length, collection_id, created_at, updated_at, processing_status)
values('{document_id}', 'test.pdf', 1000, '{collection_id}', current_timestamp, current_timestamp, 'failed');""")
session.execute(query)
session.commit()
def on_upgrade(engine: Engine) -> None:
"""
Ensure that data was successfully migrated
"""
global document_id
with Session(engine) as session:
query = text(f"select * from public.document where id='{document_id}'")
res = session.execute(query).first()
assert res and res.processing_status == "failure"
def on_downgrade(engine: Engine) -> None:
"""
Ensure that data changes were rolled back
"""
global document_id
with Session(engine) as session:
query = text(f"select * from public.document where id='{document_id}'")
res = session.execute(query).first()
assert res and res.processing_status == "failed"
...@@ -11,14 +11,14 @@ from alembic.config import Config ...@@ -11,14 +11,14 @@ from alembic.config import Config
from sqlalchemy import Engine, create_engine from sqlalchemy import Engine, create_engine
from app.tests.migrations.conftest import MigrationValidationParamsGroup, make_validation_params_groups from app.tests.migrations.conftest import MigrationValidationParamsGroup, make_validation_params_groups
from app.tests.migrations.data_migrations import migration_11d362313208, migration_b6e2cf2d4ee5 from app.tests.migrations.data_migrations import migration_11d362313208, migration_b6e2cf2d4ee5, migration_bb5b4cdab369
def get_data_migrations() -> list[MigrationValidationParamsGroup]: def get_data_migrations() -> list[MigrationValidationParamsGroup]:
""" """
Returns tests for data migrations, from tests/data_migrations folder. Returns tests for data migrations, from tests/data_migrations folder.
""" """
return make_validation_params_groups(migration_11d362313208, migration_b6e2cf2d4ee5) return make_validation_params_groups(migration_11d362313208, migration_b6e2cf2d4ee5, migration_bb5b4cdab369)
@pytest.mark.parametrize(("rev_base", "rev_head", "on_init", "on_upgrade", "on_downgrade"), get_data_migrations()) @pytest.mark.parametrize(("rev_base", "rev_head", "on_init", "on_upgrade", "on_downgrade"), get_data_migrations())
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment