Coverage for backend/django/flowsheetInternals/unitops/models/FlowsheetEditOperation.py: 100%
38 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-07-22 05:22 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-07-22 05:22 +0000
1from django.conf import settings
2from django.db import models
4from core.managers import IdentityAccessControlManager
7class FlowsheetEditOperation(models.Model):
8 """A durable, reversible user edit applied to one flowsheet."""
10 class Kind(models.TextChoices):
11 Add = "add", "Add"
12 Delete = "delete", "Delete"
13 Move = "move", "Move"
14 Group = "group", "Group"
15 Ungroup = "ungroup", "Ungroup"
16 Connection = "connection", "Connection"
17 MergeStreams = "merge_streams", "Merge streams"
18 PortAnchor = "port_anchor", "Port anchor"
19 Duplicate = "duplicate", "Duplicate"
20 SwitchVariant = "switch_variant", "Switch variant"
21 FieldPatch = "field_patch", "Field patch"
23 class State(models.TextChoices):
24 Applied = "applied", "Applied"
25 Undone = "undone", "Undone"
26 Invalidated = "invalidated", "Invalidated"
28 flowsheet = models.ForeignKey(
29 "core_auxiliary.Flowsheet",
30 on_delete=models.CASCADE,
31 related_name="edit_operations",
32 )
33 user = models.ForeignKey(
34 settings.AUTH_USER_MODEL,
35 on_delete=models.SET_NULL,
36 null=True,
37 related_name="flowsheet_edit_operations",
38 )
39 kind = models.CharField(max_length=32, choices=Kind.choices)
40 label_key = models.CharField(max_length=64)
41 revision = models.PositiveBigIntegerField()
42 last_revision = models.PositiveBigIntegerField()
43 state = models.CharField(
44 max_length=16,
45 choices=State.choices,
46 default=State.Applied,
47 )
48 schema_version = models.PositiveIntegerField(default=1)
49 forward_payload = models.JSONField(default=dict)
50 inverse_payload = models.JSONField(default=dict)
51 affected_object_ids = models.JSONField(default=list)
52 affected_group_ids = models.JSONField(default=list)
53 created_at = models.DateTimeField(auto_now_add=True)
54 updated_at = models.DateTimeField(auto_now=True)
56 objects = IdentityAccessControlManager()
58 class Meta:
59 ordering = ["revision"]
60 constraints = [
61 models.UniqueConstraint(
62 fields=["flowsheet", "revision"],
63 name="unique_flowsheet_edit_revision",
64 )
65 ]