Browse Source

Merge branch 'fix_dvojosoby_orgu' into data_migrations

middleware_test
Pavel "LEdoian" Turinsky 4 years ago
parent
commit
b4ebe51b88
  1. 33
      seminar/migrations/0001_squashed_0067_auto_20190814_0805.py
  2. 37
      seminar/migrations/0052_user_to_organizator.py

33
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(): for org in Organizator.objects.all():
# Spárování organizátora s osobou # 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 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.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) resitele = Resitel.objects.filter(user=user)
if resitele.count() != 0: if resitele.count() != 0 and user is not None:
osoba = resitele.first().osoba osoba = resitele.first().osoba
else: 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) osoba = Osoba(user=user)
except EndException: pass
# Přesun informací z usera do osoby # Přesun informací z usera do osoby
# pro řešitele již v minule migraci # pro řešitele již v minule migraci
@ -142,7 +168,10 @@ def fix_problem(apps, schema_editor):
else: else:
pr.autor = None pr.autor = None
if pr.opravovatel is not None: if pr.opravovatel is not None:
if Organizator.objects.filter(osoba__user=pr.opravovatel).first() is not None:
pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first()) 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() pr.save()
def fix_pohadka(apps, schema_editor): def fix_pohadka(apps, schema_editor):

37
seminar/migrations/0052_user_to_organizator.py

@ -4,6 +4,10 @@ from __future__ import unicode_literals
from django.db import migrations from django.db import migrations
import logging
logger = logging.getLogger(__name__)
def spoj_k_organizatorum_osoby(apps, scema_editor): def spoj_k_organizatorum_osoby(apps, scema_editor):
Organizator = apps.get_model('seminar', 'Organizator') Organizator = apps.get_model('seminar', 'Organizator')
Resitel = apps.get_model('seminar', 'Resitel') Resitel = apps.get_model('seminar', 'Resitel')
@ -11,12 +15,38 @@ def spoj_k_organizatorum_osoby(apps, scema_editor):
for org in Organizator.objects.all(): for org in Organizator.objects.all():
# Spárování organizátora s osobou # 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 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.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) resitele = Resitel.objects.filter(user=user)
if resitele.count() != 0: if resitele.count() != 0 and user is not None:
osoba = resitele.first().osoba osoba = resitele.first().osoba
else: 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) osoba = Osoba(user=user)
except EndException: pass
# Přesun informací z usera do osoby # Přesun informací z usera do osoby
# pro řešitele již v minule migraci # pro řešitele již v minule migraci
@ -46,7 +76,10 @@ def fix_problem(apps, schema_editor):
else: else:
pr.autor = None pr.autor = None
if pr.opravovatel is not None: if pr.opravovatel is not None:
if Organizator.objects.filter(osoba__user=pr.opravovatel).first() is not None:
pr.opravovatele.add(Organizator.objects.filter(osoba__user=pr.opravovatel).first()) 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() pr.save()
def fix_pohadka(apps, schema_editor): def fix_pohadka(apps, schema_editor):

Loading…
Cancel
Save