Migrace Problému
This commit is contained in:
parent
a27ca3e753
commit
62ab92bd20
1 changed files with 159 additions and 0 deletions
159
seminar/migrations/0058_problem_to_uloha_tema_clanek.py
Normal file
159
seminar/migrations/0058_problem_to_uloha_tema_clanek.py
Normal file
|
@ -0,0 +1,159 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.20 on 2019-05-17 17:44
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
from django.db.models import Q
|
||||
|
||||
def poskladej_strom(apps, rodic, *texty):
|
||||
Text = apps.get_model('seminar', 'Text')
|
||||
TextNode = apps.get_model('seminar', 'TextNode')
|
||||
if not rodic:
|
||||
raise ValueError("Rodič musí být definovaný")
|
||||
|
||||
uz_ma_deti = False
|
||||
tn = None
|
||||
for txt in texty:
|
||||
if not txt:
|
||||
continue
|
||||
# Přidej do stromu:
|
||||
textobj = Text.objects.create(na_web = txt)
|
||||
textobj.save()
|
||||
textnode = TextNode.objects.create(text = textobj)
|
||||
textnode.save()
|
||||
if not uz_ma_deti:
|
||||
rodic.first_child = textnode
|
||||
rodic.save()
|
||||
tn = rodic.first_child
|
||||
uz_ma_deti = True
|
||||
else:
|
||||
tn.succ = textnode
|
||||
tn.save()
|
||||
tn = tn.succ
|
||||
|
||||
def uloha_to_Uloha(apps,schema_editor):
|
||||
Problem = apps.get_model('seminar', 'Problem')
|
||||
Uloha = apps.get_model('seminar', 'Uloha')
|
||||
Text = apps.get_model('seminar', 'Text')
|
||||
UlohaZadaniNode = apps.get_model('seminar', 'UlohaZadaniNode')
|
||||
UlohaVzorakNode = apps.get_model('seminar', 'UlohaVzorakNode')
|
||||
TextNode = apps.get_model('seminar', 'TextNode')
|
||||
|
||||
ulohy = Problem.objects.filter(typ = 'uloha')
|
||||
for uold in ulohy:
|
||||
unew = Uloha.objects.create(
|
||||
problem = uold,
|
||||
# Zakomentované fieldy by se už měly nacházet v příslušném problému
|
||||
#nazev = uold.nazev,
|
||||
#stav = uold.stav,
|
||||
#zamereni = uold.zamereni,
|
||||
#poznamka = uold.poznamka,
|
||||
#autor = uold.autor,
|
||||
#kod = uold.kod,
|
||||
cislo_zadani = uold.cislo_zadani_old,
|
||||
cislo_reseni = uold.cislo_reseni_old,
|
||||
max_body = uold.body,
|
||||
#vytvoreno = uold.vytvoreno,
|
||||
)
|
||||
# unew.opravovatele.add(*uold.opravovatele.all())
|
||||
unew.save()
|
||||
|
||||
# Nody:
|
||||
zadani_node = UlohaZadaniNode.objects.create(uloha = unew)
|
||||
poskladej_strom(apps, zadani_node, uold.text_zadani)
|
||||
zadani_node.save()
|
||||
vzorak_node = UlohaVzorakNode.objects.create(uloha = unew)
|
||||
poskladej_strom(apps, vzorak_node, uold.text_reseni)
|
||||
vzorak_node.save()
|
||||
|
||||
def konfery_rucne(apps, schema_editor):
|
||||
# Tohle dělat nebudu, máme aktuálně celou jednu. Ale "Errors should never pass silently"
|
||||
Problem = apps.get_model('seminar', 'Problem')
|
||||
pocet_konfer = Problem.objects.filter(typ = 'konfera').count()
|
||||
if pocet_konfer > 0:
|
||||
raise NotImplementedError("Zkonvertuj {} konfer na objekt Konfera ručně, prosím".format(pocet_konfer))
|
||||
|
||||
def clanek_to_Clanek(apps,schema_editor):
|
||||
Problem = apps.get_model('seminar', 'Problem')
|
||||
Clanek = apps.get_model('seminar', 'Clanek')
|
||||
ClanekNode = apps.get_model('seminar', 'ClanekNode')
|
||||
Text = apps.get_model('seminar', 'Text')
|
||||
TextNode = apps.get_model('seminar', 'TextNode')
|
||||
|
||||
clanky = Problem.objects.filter(Q(typ='org-clanek') | Q(typ='res-clanek'))
|
||||
for cl in clanky:
|
||||
# Vybereme vhodné číslo pro článek z čísla zadání a čísla řešení:
|
||||
if cl.cislo_zadani is None:
|
||||
cislo = cl.cislo_reseni
|
||||
elif cl.cislo_reseni is None:
|
||||
cislo = cl.cislo_zadani
|
||||
elif cl.cislo_reseni == cl.cislo_zadani:
|
||||
cislo = cl.cislo_zadani
|
||||
else:
|
||||
raise ValueError("Různá čísla zadání a řešení u článku!")
|
||||
|
||||
clnew = Clanek.objects.create(
|
||||
problem = cl,
|
||||
# Problém by nemělo být potřeba upravovat
|
||||
cislo = cislo,
|
||||
# Body ignorujeme, protože už jsou v hodnocení
|
||||
)
|
||||
clnew.save()
|
||||
|
||||
# Aktuálně nemáme v modelu informaci o tom, jestli je to org-článek
|
||||
# nebo řešitelský článek. Aby se neztratila informace, poznamenám to do
|
||||
# poznámky.
|
||||
cl.poznamka += "\nTyp:\t{}".format(cl.typ)
|
||||
cl.save()
|
||||
|
||||
# Vyrobíme nody:
|
||||
clnode = ClanekNode(clanek = clnew)
|
||||
poskladej_strom(apps, clnode, cl.text_zadani, cl.text_reseni)
|
||||
clnode.save()
|
||||
|
||||
def tema_to_Tema(apps, schema_editor):
|
||||
Problem = apps.get_model('seminar', 'Problem')
|
||||
Tema = apps.get_model('seminar', 'Tema')
|
||||
TemaVCisleNode = apps.get_model('seminar', 'TemaVCisleNode')
|
||||
Text = apps.get_model('seminar', 'Text')
|
||||
TextNode = apps.get_model('seminar', 'TextNode')
|
||||
|
||||
temata = Problem.objects.filter(Q(typ = 'tema') | Q(typ='serial'))
|
||||
for t in temata:
|
||||
# Vymyslíme správně ročník:
|
||||
if t.cislo_zadani is None:
|
||||
rocnik = t.cislo_reseni.rocnik
|
||||
elif t.cislo_reseni is None:
|
||||
rocnik = t.cislo_zadani.rocnik
|
||||
elif t.cislo_reseni.rocnik == t.cislo_zadani.rocnik:
|
||||
rocnik = t.cislo_zadani.rocnik
|
||||
else:
|
||||
raise ValueError("Nelze mít téma přes více ročníků!")
|
||||
|
||||
tnew = Tema.objects.create(
|
||||
problem = t,
|
||||
tema_typ = t.typ,
|
||||
rocnik = rocnik,
|
||||
)
|
||||
tnew.save()
|
||||
|
||||
# Nody:
|
||||
tnode = TemaVCisleNode(tema = tnew)
|
||||
poskladej_strom(apps, tnode, t.text_zadani, t.text_reseni)
|
||||
tnode.save()
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('seminar', '0057_reseni_to_reseni_hodnoceni'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
# ashes to Ashes, dust to Dust....
|
||||
migrations.RunPython(uloha_to_Uloha),
|
||||
migrations.RunPython(tema_to_Tema),
|
||||
migrations.RunPython(clanek_to_Clanek),
|
||||
migrations.RunPython(konfery_rucne),
|
||||
]
|
Loading…
Reference in a new issue