153 lines
4.2 KiB
Python
153 lines
4.2 KiB
Python
|
"""
|
||
|
Author: Michel Peltriaux
|
||
|
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
|
||
|
Contact: michel.peltriaux@sgdnord.rlp.de
|
||
|
Created on: 15.12.20
|
||
|
|
||
|
"""
|
||
|
from getpass import getpass
|
||
|
|
||
|
from django.contrib.auth.models import User
|
||
|
from django.core.management import BaseCommand
|
||
|
from django.db import transaction
|
||
|
|
||
|
from konova.management.commands.setup_test_data import TEST_ORGANISATION_DATA, TEST_ROLE_GROUPS_DATA
|
||
|
from konova.models import RoleType, RoleGroup
|
||
|
from organisation.enums import RoleTypeEnum
|
||
|
from organisation.models import Organisation
|
||
|
|
||
|
CREATED_TEMPLATE = "{} created"
|
||
|
|
||
|
|
||
|
class Command(BaseCommand):
|
||
|
help = "Initializes database with basic data"
|
||
|
|
||
|
def handle(self, *args, **options):
|
||
|
try:
|
||
|
with transaction.atomic():
|
||
|
self.__init_superuser()
|
||
|
self.__init_test_organisation()
|
||
|
self.__init_role_types()
|
||
|
self.__init_role_groups()
|
||
|
except KeyboardInterrupt:
|
||
|
self.__break_line()
|
||
|
exit(-1)
|
||
|
|
||
|
def __init_superuser(self):
|
||
|
""" Create a superuser by user prompt input
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
"""
|
||
|
self.stdout.write(
|
||
|
self.style.WARNING(
|
||
|
"--- Superuser ---",
|
||
|
)
|
||
|
)
|
||
|
username = input("Superuser name: ")
|
||
|
if User.objects.filter(username=username).exists():
|
||
|
self.stdout.write(
|
||
|
self.style.ERROR(
|
||
|
"Name already taken!"
|
||
|
)
|
||
|
)
|
||
|
exit(-1)
|
||
|
pw = getpass("Password: ")
|
||
|
pw_confirm = getpass("Confirm password : ")
|
||
|
if pw != pw_confirm:
|
||
|
self.stdout.write(
|
||
|
self.style.ERROR(
|
||
|
"Passwords did not match!"
|
||
|
)
|
||
|
)
|
||
|
exit(-1)
|
||
|
|
||
|
# Create superuser
|
||
|
superuser = User()
|
||
|
superuser.username = username
|
||
|
superuser.is_superuser = True
|
||
|
superuser.is_staff = True
|
||
|
superuser.set_password(pw)
|
||
|
superuser.save()
|
||
|
self.stdout.write(
|
||
|
self.style.SUCCESS(
|
||
|
"Superuser {} created".format(username)
|
||
|
)
|
||
|
)
|
||
|
self.__break_line()
|
||
|
|
||
|
def __init_role_types(self):
|
||
|
""" Initializes available role types according to RoleTypeEnum
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
"""
|
||
|
self.stdout.write(
|
||
|
self.style.WARNING(
|
||
|
"--- Role types ---"
|
||
|
)
|
||
|
)
|
||
|
for role_type_enum in RoleTypeEnum:
|
||
|
role_type = RoleType.objects.get_or_create(
|
||
|
type=role_type_enum.value
|
||
|
)[0]
|
||
|
self.stdout.write(
|
||
|
self.style.SUCCESS(
|
||
|
CREATED_TEMPLATE.format(role_type.type)
|
||
|
)
|
||
|
)
|
||
|
self.__break_line()
|
||
|
|
||
|
def __init_test_organisation(self):
|
||
|
""" Creates test organisations from predefined data
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
"""
|
||
|
self.stdout.write(
|
||
|
self.style.WARNING(
|
||
|
"--- Organisations ---"
|
||
|
)
|
||
|
)
|
||
|
for org in TEST_ORGANISATION_DATA:
|
||
|
db_org = Organisation.objects.get_or_create(
|
||
|
**org
|
||
|
)[0]
|
||
|
self.stdout.write(
|
||
|
self.style.SUCCESS(
|
||
|
CREATED_TEMPLATE.format(db_org.name)
|
||
|
)
|
||
|
)
|
||
|
self.__break_line()
|
||
|
|
||
|
def __init_role_groups(self):
|
||
|
""" Creates test role groups from predefined data
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
"""
|
||
|
self.stdout.write(
|
||
|
self.style.WARNING(
|
||
|
"--- Role Groups ---"
|
||
|
)
|
||
|
)
|
||
|
for group_data in TEST_ROLE_GROUPS_DATA:
|
||
|
group_data["organisation"] = Organisation.objects.get(name=group_data["organisation"])
|
||
|
group_data["role"] = RoleType.objects.get(type=group_data["role"])
|
||
|
group = RoleGroup.objects.get_or_create(
|
||
|
**group_data
|
||
|
)[0]
|
||
|
self.stdout.write(
|
||
|
self.style.SUCCESS(
|
||
|
CREATED_TEMPLATE.format(group.name)
|
||
|
)
|
||
|
)
|
||
|
self.__break_line()
|
||
|
|
||
|
def __break_line(self):
|
||
|
""" Simply prints a line break
|
||
|
|
||
|
Returns:
|
||
|
|
||
|
"""
|
||
|
self.stdout.write("\n")
|