privaterelay/migrations/0008_socialaccount_provider_add_default.py (29 lines of code) (raw):
# Generated by Django 4.2.7 on 2023-12-18 18:00
from django.db import migrations
def add_db_default_forward_func(apps, schema_editor):
"""
Add database defaults for new fields provider_id and settings in table socialapp.
This field was added by 0004_app_provider_id_settings.
https://github.com/pennersr/django-allauth/blob/32c9eaf2d70cfae4f52f8e51b0ac4cd1523c5915/allauth/socialaccount/migrations/0004_app_provider_id_settings.py
The database default is used by our migrations tests. In practice, it is unlikely
and unwise to add a new SocialApp in the middle of a deployment.
`./manage.py sqlmigrate` did not work, so the sqlite3 steps are manual.
"""
if schema_editor.connection.vendor.startswith("postgres"):
schema_editor.execute(
"""
ALTER TABLE "socialaccount_socialapp"
ALTER COLUMN "provider_id" SET DEFAULT '';
"""
)
schema_editor.execute(
"""
ALTER TABLE "socialaccount_socialapp"
ALTER COLUMN "settings" SET DEFAULT '{}';
"""
)
elif schema_editor.connection.vendor.startswith("sqlite"):
schema_editor.execute(
"""
CREATE TABLE "new__socialaccount_socialapp" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"provider" varchar(30) NOT NULL,
"name" varchar(40) NOT NULL,
"client_id" varchar(191) NOT NULL,
"secret" varchar(191) NOT NULL,
"key" varchar(191) NOT NULL,
"provider_id" varchar(200) NOT NULL DEFAULT '', -- Add default
"settings" text NOT NULL
DEFAULT '{}'
CHECK ((JSON_VALID("settings") OR "settings" IS NULL))
);
"""
)
schema_editor.execute(
"""
INSERT INTO "new__socialaccount_socialapp"
("id", "provider", "name", "client_id", "secret", "key", "provider_id",
"settings")
SELECT
"id", "provider", "name", "client_id", "secret", "key", "provider_id",
"settings"
FROM "socialaccount_socialapp";
"""
)
schema_editor.execute('DROP TABLE "socialaccount_socialapp";')
schema_editor.execute(
"""
ALTER TABLE "new__socialaccount_socialapp"
RENAME TO "socialaccount_socialapp";
"""
)
else:
raise Exception(f'Unknown database vendor "{schema_editor.connection.vendor}"')
class Migration(migrations.Migration):
dependencies = [
("privaterelay", "0007_set_verified_email"),
("socialaccount", "0004_app_provider_id_settings"),
]
operations = [
migrations.RunPython(
code=add_db_default_forward_func,
reverse_code=migrations.RunPython.noop,
elidable=True,
),
]