Browse Source

More fix, dunno

middleware_test
Pavel "LEdoian" Turinsky 4 years ago
parent
commit
978b87203a
  1. 30
      seminar/migrations/0052_user_to_organizator.py

30
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(): 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: if user is None:
logger.error(f'Org {org} nemá uživatele!') logger.error(f'Org {org} nemá uživatele!')
# Je to podezřelé, ale prostě vyrobíme novou osobu.
osoba = Osoba(user=user) osoba = Osoba(user=user)
else: else:
logger.info(f'Org {org} má uživatele {user}') 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
logger.info(f'Našel jsem řešitele {resitle.first()}, používám jeho Osobu') logger.info(f'Našel jsem řešitele {resitele.first().email} podle uživatele, používám jeho Osobu')
else: 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.') 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
@ -57,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