From fec62b8c5e036f5b867081d25aa4834b75b4b794 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 20 Apr 2021 19:42:27 +0200 Subject: [PATCH 1/3] Migr 0052: debug prints --- .../migrations/0052_user_to_organizator.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/seminar/migrations/0052_user_to_organizator.py b/seminar/migrations/0052_user_to_organizator.py index db3827ce..a4326eb5 100644 --- a/seminar/migrations/0052_user_to_organizator.py +++ b/seminar/migrations/0052_user_to_organizator.py @@ -4,6 +4,10 @@ from __future__ import unicode_literals from django.db import migrations +import logging + +logger = logging.getLogger(__name__) + def spoj_k_organizatorum_osoby(apps, scema_editor): Organizator = apps.get_model('seminar', 'Organizator') Resitel = apps.get_model('seminar', 'Resitel') @@ -12,11 +16,18 @@ def spoj_k_organizatorum_osoby(apps, scema_editor): # Spárování organizátora s osobou user = org.user - resitele = Resitel.objects.filter(user=user) - if resitele.count() != 0: - osoba = resitele.first().osoba - else: + if user is None: + logger.error(f'Org {org} nemá uživatele!') osoba = Osoba(user=user) + else: + logger.info(f'Org {org} má uživatele {user}') + resitele = Resitel.objects.filter(user=user) + if resitele.count() != 0: + osoba = resitele.first().osoba + logger.info(f'Našel jsem řešitele {resitle.first()}, používám jeho Osobu') + else: + logger.warning(f'Org neměl řešitele, zakládám novou Osobu.') + osoba = Osoba(user=user) # Přesun informací z usera do osoby # pro řešitele již v minule migraci From 978b87203ac71d00efa721dc602e1ef420211ca1 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 20 Apr 2021 22:03:14 +0200 Subject: [PATCH 2/3] More fix, dunno --- .../migrations/0052_user_to_organizator.py | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/seminar/migrations/0052_user_to_organizator.py b/seminar/migrations/0052_user_to_organizator.py index a4326eb5..6518ca69 100644 --- a/seminar/migrations/0052_user_to_organizator.py +++ b/seminar/migrations/0052_user_to_organizator.py @@ -15,19 +15,38 @@ def spoj_k_organizatorum_osoby(apps, scema_editor): for org in Organizator.objects.all(): # Spárování organizátora s osobou + # Myšlenka: Když najdeme řešitele pro daného uživatele, tak se vezme Osoba příslušná uživateli, + # Pokud nenajdeme uživatele, tak ještě zkusíme dohledat Osobu podle e-mailu user = org.user if user is None: logger.error(f'Org {org} nemá uživatele!') + # Je to podezřelé, ale prostě vyrobíme novou osobu. osoba = Osoba(user=user) else: - logger.info(f'Org {org} má uživatele {user}') - resitele = Resitel.objects.filter(user=user) - if resitele.count() != 0: - osoba = resitele.first().osoba - logger.info(f'Našel jsem řešitele {resitle.first()}, používám jeho Osobu') - else: + logger.info(f'Org {org.user.email}(ID: {org.id}) má uživatele {user}') + # 💢💢💢 Python nemá goto, ale prý má výjimky… 💢💢💢 + class EndException(Exception): pass + try: + # Hledáme podle uživatele + resitele = Resitel.objects.filter(user=user) + if resitele.count() != 0 and user is not None: + osoba = resitele.first().osoba + logger.info(f'Našel jsem řešitele {resitele.first().email} podle uživatele, používám jeho Osobu') + raise EndException + + # Hledáme podle e-mailu + osoby = Osoba.objects.filter(email=user.email) + if osoby.count() != 0 and user.email != '': + osoba = osoby.first() + if osoba.user is None: + osoba.user = user + logger.info(f'Našel jsem Osobu {osoby.first().email} podle e-mailu') + raise EndException + + # Fallback logger.warning(f'Org neměl řešitele, zakládám novou Osobu.') osoba = Osoba(user=user) + except EndException: pass # Přesun informací z usera do osoby # pro řešitele již v minule migraci @@ -57,7 +76,10 @@ def fix_problem(apps, schema_editor): else: pr.autor = None if pr.opravovatel is not None: - pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first()) + if Organizator.objects.filter(osoba__user=pr.opravovatel).first() is not None: + pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first()) + else: + logger.error(f'WTF, nespárovaný opravovatel {pr.opravovatel} problému {pr}') pr.save() def fix_pohadka(apps, schema_editor): From 3324afcba4162b15f6ac9e395d4fdd8990ecaad9 Mon Sep 17 00:00:00 2001 From: "Pavel \"LEdoian\" Turinsky" Date: Tue, 20 Apr 2021 22:28:06 +0200 Subject: [PATCH 3/3] =?UTF-8?q?Stejn=C3=BD=20fix=20i=20ve=20squashed=20mig?= =?UTF-8?q?raci?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0001_squashed_0067_auto_20190814_0805.py | 39 ++++++++++++++++--- 1 file changed, 34 insertions(+), 5 deletions(-) diff --git a/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py b/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py index f819f047..5e79c390 100644 --- a/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py +++ b/seminar/migrations/0001_squashed_0067_auto_20190814_0805.py @@ -107,12 +107,38 @@ def spoj_k_organizatorum_osoby(apps, scema_editor): for org in Organizator.objects.all(): # Spárování organizátora s osobou + # Myšlenka: Když najdeme řešitele pro daného uživatele, tak se vezme Osoba příslušná uživateli, + # Pokud nenajdeme uživatele, tak ještě zkusíme dohledat Osobu podle e-mailu user = org.user - resitele = Resitel.objects.filter(user=user) - if resitele.count() != 0: - osoba = resitele.first().osoba - else: + if user is None: + logger.error(f'Org {org} nemá uživatele!') + # Je to podezřelé, ale prostě vyrobíme novou osobu. osoba = Osoba(user=user) + else: + logger.info(f'Org {org.user.email}(ID: {org.id}) má uživatele {user}') + # 💢💢💢 Python nemá goto, ale prý má výjimky… 💢💢💢 + class EndException(Exception): pass + try: + # Hledáme podle uživatele + resitele = Resitel.objects.filter(user=user) + if resitele.count() != 0 and user is not None: + osoba = resitele.first().osoba + logger.info(f'Našel jsem řešitele {resitele.first().email} podle uživatele, používám jeho Osobu') + raise EndException + + # Hledáme podle e-mailu + osoby = Osoba.objects.filter(email=user.email) + if osoby.count() != 0 and user.email != '': + osoba = osoby.first() + if osoba.user is None: + osoba.user = user + logger.info(f'Našel jsem Osobu {osoby.first().email} podle e-mailu') + raise EndException + + # Fallback + logger.warning(f'Org neměl řešitele, zakládám novou Osobu.') + osoba = Osoba(user=user) + except EndException: pass # Přesun informací z usera do osoby # pro řešitele již v minule migraci @@ -142,7 +168,10 @@ def fix_problem(apps, schema_editor): else: pr.autor = None if pr.opravovatel is not None: - pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first()) + if Organizator.objects.filter(osoba__user=pr.opravovatel).first() is not None: + pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first()) + else: + logger.error(f'WTF, nespárovaný opravovatel {pr.opravovatel} problému {pr}') pr.save() def fix_pohadka(apps, schema_editor):