utils.py: kontrola, že clanek.cislo je konsistentní se strukturou TreeNodů
This commit is contained in:
		
							parent
							
								
									7c54079394
								
							
						
					
					
						commit
						2064bd8103
					
				
					 1 changed files with 29 additions and 2 deletions
				
			
		|  | @ -3,8 +3,10 @@ | |||
| import datetime | ||||
| from django.contrib.auth.decorators import user_passes_test | ||||
| from html.parser import HTMLParser  | ||||
| from django.contrib.contenttypes.models import ContentType | ||||
| 
 | ||||
| import seminar.models as m | ||||
| import seminar.treelib as t | ||||
| 
 | ||||
| staff_member_required = user_passes_test(lambda u: u.is_staff) | ||||
| 
 | ||||
|  | @ -86,6 +88,31 @@ def seznam_problemu(): | |||
| #        if not r.email: | ||||
| #            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 | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Anet
						Anet