Browse Source

Migrace: Spojení lesů do hlavního stromu

export_seznamu_prednasek
Pavel "LEdoian" Turinsky 5 years ago
parent
commit
83014d631e
  1. 67
      seminar/migrations/0059_spoj_stromy.py

67
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):

Loading…
Cancel
Save