diff --git a/seminar/migrations/0059_spoj_stromy.py b/seminar/migrations/0059_spoj_stromy.py index f3ed0acc..1c68a68d 100644 --- a/seminar/migrations/0059_spoj_stromy.py +++ b/seminar/migrations/0059_spoj_stromy.py @@ -4,11 +4,17 @@ from __future__ import unicode_literals from django.db import migrations +from django.db.models import Q + def pridej_potomka(rodic, potomek): # Daný vrchol bude posledním potomkem rodiče uz_ma_deti = False posledni = None + # Přidávaný potomek by neměl mít následovníka -- přidáváme potomka, ne podles. + if potomek.succ: + raise ValueError("Potomek má následovníka, to je velmi podezřelé!") + # Najdeme aktuálně posledního potomka: if rodic.first_child: uz_ma_deti = True @@ -35,20 +41,65 @@ def pokacej_les(apps, schema_editor): # pak články a konfery, pak vzoráky, všechno setříděné podle kódu (FIXME?) # Kopírování je častým zdrojem chyb! - CisloNode = apps.get_model('seminar', 'CisloNode') - TemaVCisleNode = apps.get_model('seminar', 'TemaVCisleNode') - KonferaNode = apps.get_model('seminar', 'KonferaNode') - ClanekNode = apps.get_model('seminar', 'ClanekNode') - UlohaZadaniNode = apps.get_model('seminar', 'UlohaZadaniNode') - UlohaVzorakNode = apps.get_model('seminar', 'UlohaVzorakNode') + Cislo = apps.get_model('seminar', 'Cislo') Tema = apps.get_model('seminar', 'Tema') Konfera = apps.get_model('seminar', 'Konfera') Clanek = apps.get_model('seminar', 'Clanek') Uloha = apps.get_model('seminar', 'Uloha') Problem = apps.get_model('seminar', 'Problem') + Pohadka = apps.get_model('seminar', 'Pohadka') + + for c in Cislo.objects.all().reverse(): + cnode = c.cislonode + + # Témata a seriály: + relevantni_temata = Tema.objects.filter(Q(cislo_zadani = c) | Q(cislo_reseni = c)).order_by('kod'): + # Téma dáme do prvního čísla, kde se vyskytne + for t in relevantni_temata: + tnode = t.temavcislenode + if t.cislo_zadani and t.cislo_reseni: + assert(t.cislo_zadani <= t.cislo_reseni) + if t.cislo_reseni == c: + # Už by mělo být přidané do čísla zadání + continue + else: + # Patří sem (buď je to jediné číslo, nebo je to číslo zadání) + pridej_potomka(cnode, tnode) + + # Úložky (zadání) a pohádky + for u in Uloha.objects.filter(cislo_zadani = c).order_by('kod'): + unode = u.ulohazadaninode + pohadky_pred = Pohadka.objects.filter(uloha_old = u.problem, pred = True) + pohadky_po = Pohadka.objects.filter(uloha_old = u.problem, pred = False) + for p in pohadky_pred: + # FIXME: Chceme pohádku do stromu? + print('!!! !!! !!! !!! !!!') + print('FIXME: Jak uložit pohádku??') + print('!!! !!! !!! !!! !!!') + pridej_potomka(cnode, unode) + for p in pohadky_po: + # FIXME: Chceme pohádku do stromu? + print('!!! !!! !!! !!! !!!') + print('FIXME: Jak uložit pohádku??') + print('!!! !!! !!! !!! !!!') + + # Články + for cl in Clanek.objects.filter(cislo = c).order_by('kod'): + clnode = cl.claneknode + pridej_potomka(cnode, clnode) + + # Konfery + for k in Konfera.objects.all(): + knode = k.konferanode + if k.reseni and knode.root is None: + # Takováhle konfera nejspíš neexistuje + raise NotImplementedError("Konfery neumím zapojit do stromu") + + # Vzoráky + for u in Uloha.objects.filter(cislo_reseni = c).order_by('kod'): + unode = u.ulohavzoraknode + pridej_potomka(cnode, unode) - #TODO! - raise NotYetImplemented("Ještě než se smaže Franken-model, je potřeba spojit stromečky správně!") class Migration(migrations.Migration):