# Created manually import logging import os from typing import Dict, List from django.conf import settings from django.contrib.auth import get_user_model from django.core.management.sql import emit_post_migrate_signal from django.db import migrations from django.utils import timezone logger = logging.getLogger(__name__) ENV_USERNAME = "MORDOR_ADMIN_USERNAME" ENV_PASSWORD = "MORDOR_ADMIN_PASSWORD" def create_superuser(apps, schema_editor): superuser = get_user_model()( is_superuser=True, is_staff=True, username=os.environ.get(ENV_USERNAME, "admin"), last_login=timezone.now(), ) dev_password = "admin" password = os.environ.get(ENV_PASSWORD, dev_password) if password == dev_password: log = logger.warning if settings.DEBUG else logger.error log( f"Admin password is '{password}'. This is not for use in production. Set environment variable {ENV_PASSWORD} to choose a different password." ) if not settings.DEBUG: raise Exception("Development admin password used in production") superuser.set_password(password) superuser.save() kers_group_permissions: Dict[str, List] = { "Bestuur": [ # "add_event", # "delete_event", # "change_event", ] } def add_group_permissions(apps, schema_editor): db_alias = schema_editor.connection.alias emit_post_migrate_signal(2, False, db_alias) Group = apps.get_model("auth", "Group") Permission = apps.get_model("auth", "Permission") for group in kers_group_permissions: role, created = Group.objects.get_or_create(name=group) logger.info(f'{group} Group {"created" if created else "exists"}') for perm in kers_group_permissions[group]: role.permissions.add(Permission.objects.get(codename=perm)) logger.info(f"Permitting {group} to {perm}") role.save() class Migration(migrations.Migration): dependencies = [ ("users", "0001_initial"), ] operations = [ migrations.RunPython(create_superuser), migrations.RunPython(add_group_permissions), ]