diff --git a/sync/signals.py b/sync/signals.py index ea6756b..af602ee 100644 --- a/sync/signals.py +++ b/sync/signals.py @@ -62,9 +62,9 @@ def synchronization_notifications(sender, instance, created=False, **kwargs): process_foreign_key_changes(sender, instance, **kwargs) - signal = kwargs.get('signal') - save_model_log_if_possible(instance, signal, created) - notify_impacted_users(instance) + # signal = kwargs.get('signal') + # save_model_log_if_possible(instance, signal, created) + # notify_impacted_users(instance) def notify_impacted_users(instance): user_ids = set() @@ -251,7 +251,7 @@ def related_users(instance): # look in hierarchy related_instances = instance.related_instances() - print(f'related_instances = {related_instances}') + # print(f'related_instances = {related_instances}') related_users = [ri.related_user for ri in related_instances if isinstance(ri, BaseModel)] users.update(related_users) diff --git a/tournaments/views.py b/tournaments/views.py index 92e62f7..a3dfa5f 100644 --- a/tournaments/views.py +++ b/tournaments/views.py @@ -8,6 +8,7 @@ from django.utils.encoding import force_str from django.utils.http import urlsafe_base64_decode from django.urls import reverse from django.conf import settings +from django.db import transaction from django.views.decorators.csrf import csrf_exempt from django.contrib.admin.views.decorators import staff_member_required @@ -878,22 +879,50 @@ def tournament_import_view(request): if request.method == 'POST': zip_file = request.FILES.get('tournament_zip') if zip_file: + print('yes') + try: tournament_id = os.path.splitext(zip_file.name)[0] tournament = Tournament.objects.get(id=tournament_id) # Delete existing relationships + print('round delete') + + rounds = Round.objects.filter(tournament=tournament,parent=None) + for round in rounds: + round.delete_dependencies() + for gs in tournament.group_stages.all(): + gs.delete_dependencies() + for tr in tournament.team_registrations.all(): + tr.delete_dependencies() + + # with transaction.atomic(): + # for round in tournament.rounds.all(): + # round.delete() tournament.rounds.all().delete() tournament.group_stages.all().delete() tournament.team_registrations.all().delete() + # tournament.player_registrations.all().delete() + # tournament.matches.all().delete() + # tournament.team_scores.all().delete() + + print(f'round count = {tournament.rounds.count()}') + print(f'group_stages count = {tournament.group_stages.count()}') + print(f'team_registrations count = {tournament.team_registrations.count()}') + + print(f'PR count = {PlayerRegistration.objects.count()}') + print(f'TS count = {TeamScore.objects.count()}') + print(f'M count = {Match.objects.count()}') with zipfile.ZipFile(zip_file) as z: # First, process rounds rounds_data = get_file_data(z, f"{tournament_id}/rounds.json") - rounds_data = get_file_data(z, f"{tournament_id}/rounds.json") + # print(f'rounds count = {len(rounds_data)}') + if rounds_data: # First pass: Create rounds with preserved UUIDs for item in rounds_data: + # print('round #1 create') item['tournament'] = tournament.id round_id = item['id'] # Preserve the original UUID Round.objects.create( @@ -908,6 +937,8 @@ def tournament_import_view(request): # Second pass: Set parent relationships for item in rounds_data: + # print('round #2 set parent') + if item.get('parent'): round_obj = Round.objects.get(id=item['id']) round_obj.parent_id = item['parent'] @@ -915,6 +946,7 @@ def tournament_import_view(request): # Then process all other files serializer_mapping = { + # 'rounds.json': RoundSerializer, 'group-stages.json': GroupStageSerializer, 'team-registrations.json': TeamRegistrationSerializer, 'matches.json': MatchSerializer, @@ -929,6 +961,7 @@ def tournament_import_view(request): return JsonResponse({'status': 'success'}) except Exception as e: + print(f'error = {str(e)}') return JsonResponse({'status': 'error', 'message': str(e)}) else: return render(request, 'tournaments/admin/tournament_cleaner.html') @@ -936,13 +969,16 @@ def tournament_import_view(request): def process_file(zip_file, filename, tournament_id, tournament, serializer_class): """Helper function to process individual files""" try: + print(f'process {filename}') file_path = f"{tournament_id}/{filename}" json_data = get_file_data(zip_file, file_path) if json_data: # Add tournament to each item for item in json_data: + # print(f'process {item}') item['tournament'] = tournament.id + item['store_id'] = str(tournament.id) serializer = serializer_class(data=json_data, many=True) serializer.is_valid(raise_exception=True)