|
@ -3,8 +3,10 @@ |
|
|
import datetime |
|
|
import datetime |
|
|
from django.contrib.auth.decorators import user_passes_test |
|
|
from django.contrib.auth.decorators import user_passes_test |
|
|
from html.parser import HTMLParser |
|
|
from html.parser import HTMLParser |
|
|
|
|
|
from django.contrib.contenttypes.models import ContentType |
|
|
|
|
|
|
|
|
import seminar.models as m |
|
|
import seminar.models as m |
|
|
|
|
|
import seminar.treelib as t |
|
|
|
|
|
|
|
|
staff_member_required = user_passes_test(lambda u: u.is_staff) |
|
|
staff_member_required = user_passes_test(lambda u: u.is_staff) |
|
|
|
|
|
|
|
@ -86,6 +88,31 @@ def seznam_problemu(): |
|
|
# if not r.email: |
|
|
# if not r.email: |
|
|
# prb(Resitel, u'Neznámý email', [r]) |
|
|
# prb(Resitel, u'Neznámý email', [r]) |
|
|
|
|
|
|
|
|
|
|
|
## Kontroly konzistence databáze a TreeNodů |
|
|
|
|
|
|
|
|
|
|
|
# Články |
|
|
|
|
|
for clanek in m.Clanek.objects.all(): |
|
|
|
|
|
# získáme řešení svázané se článkem a z něj node ve stromě |
|
|
|
|
|
reseni = clanek.reseni_set |
|
|
|
|
|
if (reseni.count() != 1): |
|
|
|
|
|
raise ValueError("Článek k sobě má nejedno řešení!") |
|
|
|
|
|
r = reseni.first() |
|
|
|
|
|
clanek_node = r.text_cely # vazba na ReseniNode z Reseni |
|
|
|
|
|
# content type je věc pomáhající rozeznávat různé typy objektů v django-polymorphic |
|
|
|
|
|
# protože isinstance vrátí vždy jen TreeNode |
|
|
|
|
|
# https://django-polymorphic.readthedocs.io/en/stable/migrating.html |
|
|
|
|
|
cislonode_ct = ContentType.objects.get_for_model(m.CisloNode) |
|
|
|
|
|
node = clanek_node |
|
|
|
|
|
while node is not None: |
|
|
|
|
|
node_ct = node.polymorphic_ctype |
|
|
|
|
|
if node_ct == cislonode_ct: # dostali jsme se k CisloNode |
|
|
|
|
|
# zkontrolujeme, že stromové číslo odpovídá atributu |
|
|
|
|
|
# .cislonode je opačná vazba k treenode_ptr, abychom z TreeNode dostali |
|
|
|
|
|
# CisloNode |
|
|
|
|
|
if clanek.cislo != node.cislonode.cislo: |
|
|
|
|
|
prb(m.Clanek, "Číslo otištění uložené u článku nesedí s " |
|
|
|
|
|
"číslem otištění podle struktury treenodů.", [clanek]) |
|
|
|
|
|
break |
|
|
|
|
|
node = t.get_parent(node) |
|
|
|
|
|
|
|
|
return problemy |
|
|
return problemy |
|
|
|
|
|
|
|
|
|
|
|
|
|
|