"""Export the image's schema requirements with networking disabled. Never changes a DB.""" import json import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "alpha.settings") import django django.setup() from django.apps import apps from django.db import connection from django.db.migrations.loader import MigrationLoader def sql_type(value): return value.replace("varchar", "character varying").replace("timestamptz", "timestamp with time zone") loader = MigrationLoader(None, replace_migrations=False) replacements = {"/".join(key): [list(p) for p in m.replaces] for key, m in loader.disk_migrations.items() if m.replaces} tables = {} for model in apps.get_models(include_auto_created=True): opts = model._meta if not opts.managed or opts.proxy or opts.swapped: continue columns = {} for field in opts.local_fields: kind = field.db_type(connection) if kind: columns[field.column] = {"type": sql_type(kind), "nullable": bool(field.null)} tables[opts.db_table] = columns print(json.dumps({"migrations": sorted([list(key) for key in loader.disk_migrations]), "replacements": replacements, "tables": tables}))