import os from django.conf import settings from django.contrib.auth import get_user_model from django.contrib.auth.hashers import make_password from django.contrib.auth.models import Group from django.db.models.signals import post_migrate from django.dispatch import receiver from tickets.models import Ticket, TicketList from datetime import datetime from core.settings_vars import GENERATE_TEST_USERS User = get_user_model() @receiver(post_migrate) def create_test_users(sender, **kwargs): """ Создает тестовых пользователей, если: - В файле settings_vers.py переменная GENERATE_TEST_USERS = True - Или была задана переменная окружения TEST_USERS=true """ if os.getenv('TEST_USERS') == 'true' or GENERATE_TEST_USERS: # Создание админа if not get_user_model().objects.filter(phone_number="11111111111").exists(): admin = get_user_model().objects.create_superuser( 'admin', 'admin@admin.com', 'Sharix!', phone_number="11111111111" ) password = make_password("sharix-open-test") test_group = Group.objects.get(pk=99) # Группа, в которой надо создать пользователя и их количество test_users = [ ('METASERVICE-ADMIN', 1), ('METASERVICE-SUPERVISOR', 3), ('METASERVICE-SUPPORT', 3), ('METASERVICE-TECHSUPPORT', 3), ('PARTNER-ADMIN', 1), ('PARTNER-SUPERVISOR', 3), ('PARTNER-SUPPORT', 3), ('PARTNER-TECHSUPPORT', 3), ('PROVIDER', 3), ('CLIENT', 3), ('GUEST', 3) ] for test_user in test_users: group_name = test_user[0] group = Group.objects.get(name=group_name) for i in range(1, test_user[1] + 1): user, created = User.objects.get_or_create( phone_number=f"{group.pk}0{i}", defaults={ 'last_name': i, 'first_name': group_name, 'email': f"test-{group_name.lower()}-{i}@domain.org", 'username': f"test-{group_name.lower()}-{i}", 'middle_name': "Test", 'password': password } ) if created: user.groups.add( test_group, group ) # Создание тикета о создании пользователей if Ticket.objects.all().exists(): # test-metaservice-admin-1 user = get_user_model().objects.filter(phone_number=2101).get() ticket_list = TicketList.objects.get(pk=2103) Ticket.objects.create( title=f"Создание тестовых пользователей", ticket_list=ticket_list, ticket_type=1, # ST_REQUEST due_date=datetime.now().date(), created_by=user, note=f""" Успешное создание тестовых пользователей """ ) # Откючаем тестовых пользователей (если такие есть), если DEBUG=False и наоброт try: if Group.objects.filter(name="TEST").exists(): test_group = Group.objects.get(name="TEST") users_in_test_group = User.objects.filter(groups=test_group) if users_in_test_group: users_in_test_group.update(is_active=settings.DEBUG) except: print("Test user validation is not available. Models have not been created yet")