59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
from django.db import migrations
|
|
|
|
|
|
# Before the submissions -> opus_magnum rename, this app owned the opus magnum
|
|
# tables and its 0001_initial was already applied. The new 0001_initial has the
|
|
# same name, so on those databases Django skipped it and kept the legacy
|
|
# submissions_submission / submissions_submissionfile layout (is_validated NOT
|
|
# NULL, response_id, ...) and never created submissions_imagecrop.
|
|
LEGACY_TABLES = [
|
|
"submissions_imagecrop",
|
|
"submissions_submissionfile",
|
|
"submissions_puzzleresponse",
|
|
"submissions_submission",
|
|
"submissions_steamcollectionitem",
|
|
"submissions_steamcollection",
|
|
"submissions_steamapikey",
|
|
]
|
|
|
|
|
|
def repair_legacy_tables(apps, schema_editor):
|
|
connection = schema_editor.connection
|
|
|
|
with connection.cursor() as cursor:
|
|
columns = {
|
|
col.name
|
|
for col in connection.introspection.get_table_description(
|
|
cursor, "submissions_submission"
|
|
)
|
|
}
|
|
|
|
if "is_validated" not in columns:
|
|
return
|
|
|
|
# Data was copied to opus_magnum (0015) and 0007 wiped submissions, so
|
|
# this should be empty: refuse to drop anything otherwise.
|
|
cursor.execute("SELECT COUNT(*) FROM submissions_submission")
|
|
if cursor.fetchone()[0]:
|
|
raise RuntimeError(
|
|
"submissions_submission has the legacy layout but is not empty"
|
|
)
|
|
|
|
existing_tables = set(connection.introspection.table_names())
|
|
for table in LEGACY_TABLES:
|
|
if table in existing_tables:
|
|
schema_editor.execute(f"DROP TABLE {schema_editor.quote_name(table)}")
|
|
|
|
for model_name in ["Submission", "SubmissionFile", "ImageCrop"]:
|
|
schema_editor.create_model(apps.get_model("submissions", model_name))
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
dependencies = [
|
|
("submissions", "0008_remove_submission_game"),
|
|
]
|
|
|
|
operations = [
|
|
migrations.RunPython(repair_legacy_tables, migrations.RunPython.noop),
|
|
]
|