ConceptPortal-public/rsconcept/backend/apps/rsform/models/Synthesis.py

150 lines
3.6 KiB
Python
Raw Normal View History

''' Models: Synthesis. '''
2024-06-05 21:34:04 +03:00
from django.db.models import (
CASCADE,
SET_NULL,
BooleanField,
CharField,
ForeignKey,
IntegerField,
Model,
TextChoices
2024-06-05 21:34:04 +03:00
)
2024-06-21 18:47:46 +03:00
class OperationStatus(TextChoices):
''' Operation status enumeration. '''
2024-06-05 21:34:04 +03:00
DRAFT = 'Draft',
COMPLETED = 'Completed',
2024-06-21 18:47:46 +03:00
WARNING = 'Warning',
2024-06-05 21:34:04 +03:00
FAILED = 'Failed'
2024-06-21 18:47:46 +03:00
class GraphStatus(TextChoices):
''' Graph status enumeration. '''
2024-06-05 21:34:04 +03:00
DRAFT = 'Draft',
COMPLETED = 'Completed',
WARNING = 'Warning',
FAILED = 'Failed'
2024-06-21 18:47:46 +03:00
class SynthesisGraph(Model):
status: CharField = CharField(
verbose_name='Статус операции слияния',
2024-06-05 21:34:04 +03:00
max_length=20,
2024-06-21 18:47:46 +03:00
choices=GraphStatus
2024-06-05 21:34:04 +03:00
)
2024-06-21 18:47:46 +03:00
class InputNode(Model):
graph_id: ForeignKey = ForeignKey(
verbose_name='Схема синтеза',
to=SynthesisGraph,
on_delete=CASCADE
2024-06-05 21:34:04 +03:00
)
2024-06-21 18:47:46 +03:00
vertical_coordinate: IntegerField = IntegerField(
2024-06-05 21:34:04 +03:00
verbose_name='Вертикальная координата звена',
)
2024-06-21 18:47:46 +03:00
horizontal_coordinate: IntegerField = IntegerField(
2024-06-05 21:34:04 +03:00
verbose_name='Горизонтальная координата звена',
)
2024-06-21 18:47:46 +03:00
rsform_id: IntegerField = IntegerField(
2024-06-05 21:34:04 +03:00
verbose_name='Схема',
2024-06-21 18:47:46 +03:00
null=True
2024-06-05 21:34:04 +03:00
)
2024-06-21 18:47:46 +03:00
class OperationNode(InputNode):
2024-06-05 21:34:04 +03:00
name: CharField = CharField(
verbose_name='Название',
max_length=20
)
2024-06-21 18:47:46 +03:00
2024-06-05 21:34:04 +03:00
status: CharField = CharField(
2024-06-21 18:47:46 +03:00
verbose_name='Статус операции слияния',
2024-06-05 21:34:04 +03:00
max_length=20,
2024-06-21 18:47:46 +03:00
choices=OperationStatus
)
left_parent: ForeignKey = ForeignKey(
verbose_name='Левый предок',
to='rsform.LibraryItem',
related_name='rsform_library_item_left',
on_delete=SET_NULL,
null=True
)
right_parent: ForeignKey = ForeignKey(
verbose_name='Правый предок',
to='rsform.LibraryItem',
related_name='rsform_library_item_right',
on_delete=SET_NULL,
null=True
)
class SynthesisSubstitution(Model):
graph_id: ForeignKey = ForeignKey(
verbose_name='Схема синтеза',
to=SynthesisGraph,
on_delete=CASCADE
)
operation_id: ForeignKey = ForeignKey(
verbose_name='Операция синтеза',
to=OperationNode,
on_delete=CASCADE
)
leftCst: ForeignKey = ForeignKey(
verbose_name='Конституента',
to='Constituenta',
related_name='constituenta_original',
on_delete=SET_NULL,
null=True
)
rightCst: ForeignKey = ForeignKey(
verbose_name='Подстановка',
to='Constituenta',
related_name='constituenta_substitution',
on_delete=SET_NULL,
null=True
)
deleteRight: BooleanField = BooleanField(
verbose_name='Удалить правую'
)
takeLeftTerm: BooleanField = BooleanField(
verbose_name='Использовать термин левой'
2024-06-05 21:34:04 +03:00
)
class SynthesisEdge(Model):
2024-06-21 18:47:46 +03:00
decoded_id: CharField = CharField(
verbose_name='Id ребра на фронте',
max_length=30,
)
source_handle: CharField = CharField(
verbose_name='',
max_length=30,
)
graph_id: ForeignKey = ForeignKey(
2024-06-05 21:34:04 +03:00
verbose_name='Схема синтеза',
to=SynthesisGraph,
2024-06-21 18:47:46 +03:00
on_delete=CASCADE
2024-06-05 21:34:04 +03:00
)
2024-06-21 18:47:46 +03:00
node_from: IntegerField = IntegerField(
2024-06-05 21:34:04 +03:00
verbose_name='Звено-предок',
)
2024-06-21 18:47:46 +03:00
node_to: IntegerField = IntegerField(
2024-06-05 21:34:04 +03:00
verbose_name='Звено-наследник',
)