mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-11-15 17:21:38 +03:00
M: Improve restore ordering
This commit is contained in:
parent
81e61a945c
commit
8144db6249
|
|
@ -22,14 +22,11 @@ class OrderManager:
|
||||||
self._fix_semantic_children()
|
self._fix_semantic_children()
|
||||||
self._override_order()
|
self._override_order()
|
||||||
|
|
||||||
def _fix_topological(self) -> None:
|
|
||||||
sorted_ids = self._semantic.graph.sort_stable([cst.pk for cst in self._items])
|
|
||||||
sorted_items = [next(cst for cst in self._items if cst.pk == id) for id in sorted_ids]
|
|
||||||
self._items = sorted_items
|
|
||||||
|
|
||||||
def _fix_kernel(self) -> None:
|
def _fix_kernel(self) -> None:
|
||||||
result = [cst for cst in self._items if cst.cst_type == CstType.BASE]
|
result = [cst for cst in self._items if cst.cst_type == CstType.BASE]
|
||||||
result = result + [cst for cst in self._items if cst.cst_type == CstType.CONSTANT]
|
result = result + [cst for cst in self._items if cst.cst_type == CstType.CONSTANT]
|
||||||
|
result = result + \
|
||||||
|
[cst for cst in self._items if result.count(cst) == 0 and len(self._semantic.graph.inputs[cst.pk]) == 0]
|
||||||
kernel = [
|
kernel = [
|
||||||
cst.pk for cst in self._items if
|
cst.pk for cst in self._items if
|
||||||
cst.cst_type in [CstType.STRUCTURED, CstType.AXIOM] or
|
cst.cst_type in [CstType.STRUCTURED, CstType.AXIOM] or
|
||||||
|
|
@ -40,6 +37,11 @@ class OrderManager:
|
||||||
result = result + [cst for cst in self._items if result.count(cst) == 0]
|
result = result + [cst for cst in self._items if result.count(cst) == 0]
|
||||||
self._items = result
|
self._items = result
|
||||||
|
|
||||||
|
def _fix_topological(self) -> None:
|
||||||
|
sorted_ids = self._semantic.graph.sort_stable([cst.pk for cst in self._items])
|
||||||
|
sorted_items = [next(cst for cst in self._items if cst.pk == id) for id in sorted_ids]
|
||||||
|
self._items = sorted_items
|
||||||
|
|
||||||
def _fix_semantic_children(self) -> None:
|
def _fix_semantic_children(self) -> None:
|
||||||
result: list[Constituenta] = []
|
result: list[Constituenta] = []
|
||||||
marked: set[Constituenta] = set()
|
marked: set[Constituenta] = set()
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
''' Testing models: api_RSForm. '''
|
''' Testing models: RSForm. '''
|
||||||
from django.forms import ValidationError
|
from django.forms import ValidationError
|
||||||
|
|
||||||
from apps.rsform.models import Constituenta, CstType, RSForm
|
from apps.rsform.models import Constituenta, CstType, RSForm
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
''' Testing models: api_RSForm. '''
|
''' Testing models: RSFormCached. '''
|
||||||
from apps.rsform.models import Attribution, Constituenta, CstType, OrderManager, RSFormCached
|
from apps.rsform.models import Attribution, Constituenta, CstType, OrderManager, RSFormCached
|
||||||
from apps.users.models import User
|
from apps.users.models import User
|
||||||
from shared.DBTester import DBTester
|
from shared.DBTester import DBTester
|
||||||
|
|
@ -106,6 +106,25 @@ class TestRSFormCached(DBTester):
|
||||||
self.assertEqual(s2.definition_raw, '@{X11|plur}')
|
self.assertEqual(s2.definition_raw, '@{X11|plur}')
|
||||||
|
|
||||||
|
|
||||||
|
def test_insert_from(self):
|
||||||
|
self.schema.insert_last('X2')
|
||||||
|
self.schema.insert_last('D2')
|
||||||
|
self.schema.insert_last('X3')
|
||||||
|
self.schema.insert_last(
|
||||||
|
alias='D1',
|
||||||
|
definition_formal='X2 = X3'
|
||||||
|
)
|
||||||
|
test_ks = RSFormCached.create(title='Test')
|
||||||
|
test_ks.insert_from(self.schema.model.pk)
|
||||||
|
items = Constituenta.objects.filter(schema=test_ks.model).order_by('order')
|
||||||
|
self.assertEqual(len(items), 4)
|
||||||
|
self.assertEqual(items[0].alias, 'X2')
|
||||||
|
self.assertEqual(items[1].alias, 'D2')
|
||||||
|
self.assertEqual(items[2].alias, 'X3')
|
||||||
|
self.assertEqual(items[3].alias, 'D1')
|
||||||
|
self.assertEqual(items[3].definition_formal, 'X2 = X3')
|
||||||
|
|
||||||
|
|
||||||
def test_delete_cst(self):
|
def test_delete_cst(self):
|
||||||
x1 = self.schema.insert_last('X1')
|
x1 = self.schema.insert_last('X1')
|
||||||
x2 = self.schema.insert_last('X2')
|
x2 = self.schema.insert_last('X2')
|
||||||
|
|
@ -210,6 +229,10 @@ class TestRSFormCached(DBTester):
|
||||||
alias='A1',
|
alias='A1',
|
||||||
definition_formal=r'D3=∅',
|
definition_formal=r'D3=∅',
|
||||||
)
|
)
|
||||||
|
a2 = self.schema.insert_last(
|
||||||
|
alias='A2',
|
||||||
|
definition_formal=r'P1[S1]',
|
||||||
|
)
|
||||||
d3 = self.schema.insert_last(
|
d3 = self.schema.insert_last(
|
||||||
alias='D3',
|
alias='D3',
|
||||||
definition_formal=r'Pr2(S2)',
|
definition_formal=r'Pr2(S2)',
|
||||||
|
|
@ -226,6 +249,10 @@ class TestRSFormCached(DBTester):
|
||||||
alias='F2',
|
alias='F2',
|
||||||
definition_formal=r'[α∈ℬ(X1)] X1\α',
|
definition_formal=r'[α∈ℬ(X1)] X1\α',
|
||||||
)
|
)
|
||||||
|
p1 = self.schema.insert_last(
|
||||||
|
alias='P1',
|
||||||
|
definition_formal=r'[α∈ℬ(R1)] card(α)=0',
|
||||||
|
)
|
||||||
|
|
||||||
OrderManager(self.schema).restore_order()
|
OrderManager(self.schema).restore_order()
|
||||||
x1.refresh_from_db()
|
x1.refresh_from_db()
|
||||||
|
|
@ -240,19 +267,23 @@ class TestRSFormCached(DBTester):
|
||||||
f1.refresh_from_db()
|
f1.refresh_from_db()
|
||||||
f2.refresh_from_db()
|
f2.refresh_from_db()
|
||||||
a1.refresh_from_db()
|
a1.refresh_from_db()
|
||||||
|
a2.refresh_from_db()
|
||||||
|
p1.refresh_from_db()
|
||||||
|
|
||||||
self.assertEqual(x1.order, 0)
|
self.assertEqual(x1.order, 0)
|
||||||
self.assertEqual(x2.order, 1)
|
self.assertEqual(x2.order, 1)
|
||||||
self.assertEqual(c1.order, 2)
|
self.assertEqual(c1.order, 2)
|
||||||
self.assertEqual(s1.order, 3)
|
self.assertEqual(p1.order, 3)
|
||||||
self.assertEqual(d1.order, 4)
|
self.assertEqual(s1.order, 4)
|
||||||
self.assertEqual(s2.order, 5)
|
self.assertEqual(a2.order, 5)
|
||||||
self.assertEqual(d3.order, 6)
|
self.assertEqual(d1.order, 6)
|
||||||
self.assertEqual(a1.order, 7)
|
self.assertEqual(s2.order, 7)
|
||||||
self.assertEqual(d4.order, 8)
|
self.assertEqual(d3.order, 8)
|
||||||
self.assertEqual(d2.order, 9)
|
self.assertEqual(a1.order, 9)
|
||||||
self.assertEqual(f1.order, 10)
|
self.assertEqual(d4.order, 10)
|
||||||
self.assertEqual(f2.order, 11)
|
self.assertEqual(d2.order, 11)
|
||||||
|
self.assertEqual(f1.order, 12)
|
||||||
|
self.assertEqual(f2.order, 13)
|
||||||
|
|
||||||
|
|
||||||
def test_reset_aliases(self):
|
def test_reset_aliases(self):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user