Skip to content

Commit 0ca78b6

Browse files
jens-kuertenJens Kürten
and
Jens Kürten
authored
Feat: Document and Part Field Calculation Events (#22)
* feat: document field calculation event * feat: part field calculation event --------- Co-authored-by: Jens Kürten <[email protected]>
1 parent dfdedb2 commit 0ca78b6

File tree

6 files changed

+211
-0
lines changed

6 files changed

+211
-0
lines changed

csfunctions/events/__init__.py

+10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from .dialog_data import DocumentReleaseDialogData, PartReleaseDialogData
66
from .document_create_check import DocumentCreateCheckData, DocumentCreateCheckEvent
7+
from .document_field_calculation import DocumentFieldCalculationData, DocumentFieldCalculationEvent
78
from .document_modify_check import DocumentModifyCheckData, DocumentModifyCheckEvent
89
from .document_release import DocumentReleaseData, DocumentReleaseEvent
910
from .document_release_check import DocumentReleaseCheckData, DocumentReleaseCheckEvent
@@ -12,6 +13,7 @@
1213
from .engineering_change_release_check import EngineeringChangeReleaseCheck, EngineeringChangeReleaseCheckData
1314
from .field_value_calculation import FieldValueCalculationData, FieldValueCalculationEvent
1415
from .part_create_check import PartCreateCheckData, PartCreateCheckEvent
16+
from .part_field_calculation import PartFieldCalculationData, PartFieldCalculationEvent
1517
from .part_modify_check import PartModifyCheckData, PartModifyCheckEvent
1618
from .part_release import PartReleaseData, PartReleaseEvent
1719
from .part_release_check import PartReleaseCheckData, PartReleaseCheckEvent
@@ -21,8 +23,10 @@
2123
Union[
2224
DocumentReleaseEvent,
2325
DocumentReleaseCheckEvent,
26+
DocumentFieldCalculationEvent,
2427
PartReleaseEvent,
2528
PartReleaseCheckEvent,
29+
PartFieldCalculationEvent,
2630
FieldValueCalculationEvent,
2731
DummyEvent,
2832
EngineeringChangeRelease,
@@ -38,8 +42,10 @@
3842
EventData = Union[
3943
DocumentReleaseData,
4044
DocumentReleaseCheckData,
45+
DocumentFieldCalculationData,
4146
PartReleaseData,
4247
PartReleaseCheckData,
48+
PartFieldCalculationData,
4349
FieldValueCalculationData,
4450
DummyEventData,
4551
EngineeringChangeReleaseData,
@@ -54,15 +60,18 @@
5460
__all__ = [
5561
"DocumentReleaseEvent",
5662
"DocumentReleaseCheckEvent",
63+
"DocumentFieldCalculationEvent",
5764
"PartReleaseEvent",
5865
"PartReleaseCheckEvent",
66+
"PartFieldCalculationEvent",
5967
"FieldValueCalculationEvent",
6068
"DummyEvent",
6169
"EngineeringChangeRelease",
6270
"EngineeringChangeReleaseCheck",
6371
"WorkflowTaskTriggerEvent",
6472
"DocumentReleaseData",
6573
"DocumentReleaseCheckData",
74+
"DocumentFieldCalculationData",
6675
"PartReleaseData",
6776
"PartReleaseCheckData",
6877
"FieldValueCalculationData",
@@ -72,6 +81,7 @@
7281
"WorkflowTaskTriggerEventData",
7382
"DocumentReleaseDialogData",
7483
"PartReleaseDialogData",
84+
"PartFieldCalculationData",
7585
"DocumentCreateCheckData",
7686
"DocumentCreateCheckEvent",
7787
"DocumentModifyCheckData",

csfunctions/events/base.py

+2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ class EventNames(str, Enum):
77
DUMMY = "dummy"
88
DOCUMENT_RELEASE = "document_release"
99
DOCUMENT_RELEASE_CHECK = "document_release_check"
10+
DOCUMENT_FIELD_CALCULATION = "document_field_calculation"
1011
PART_RELEASE = "part_release"
1112
PART_RELEASE_CHECK = "part_release_check"
13+
PART_FIELD_CALCULATION = "part_field_calculation"
1214
ENGINEERING_CHANGE_RELEASE = "engineering_change_release"
1315
ENGINEERING_CHANGE_RELEASE_CHECK = "engineering_change_release_check"
1416
FIELD_VALUE_CALCULATION = "field_value_calculation"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from typing import Literal
2+
3+
from pydantic import BaseModel, Field
4+
5+
from csfunctions.objects import Document, Part
6+
7+
from .base import BaseEvent, EventNames
8+
9+
10+
class DocumentFieldCalculationData(BaseModel):
11+
document: Document = Field(..., description="Current state of the document")
12+
action: Literal["create", "modify", "copy", "index"] = Field(..., description="Action being performed")
13+
linked_parts: list[Part] = Field(..., description="Parts that belong to the document")
14+
15+
16+
class DocumentFieldCalculationEvent(BaseEvent):
17+
name: Literal[EventNames.DOCUMENT_FIELD_CALCULATION] = EventNames.DOCUMENT_FIELD_CALCULATION
18+
data: DocumentFieldCalculationData
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from typing import Literal
2+
3+
from pydantic import BaseModel, Field
4+
5+
from csfunctions.objects import Document, Part
6+
7+
from .base import BaseEvent, EventNames
8+
9+
10+
class PartFieldCalculationData(BaseModel):
11+
part: Part = Field(..., description="Current state of the part")
12+
action: Literal["create", "modify", "copy", "index"] = Field(..., description="Action being performed")
13+
14+
linked_documents: list[Document] = Field(..., description="List of documents that are referenced by the parts.")
15+
16+
17+
class PartFieldCalculationEvent(BaseEvent):
18+
name: Literal[EventNames.PART_FIELD_CALCULATION] = EventNames.PART_FIELD_CALCULATION
19+
data: PartFieldCalculationData

docs/reference/events.md

+38
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,26 @@ This event is fired **after** a document has been released. Raising an exception
9090
|cdb_ec_id|str \| None| Engineering Change ID|
9191

9292

93+
## DocumentFieldCalculationEvent
94+
`csfunctions.events.DocumentFieldCalculationEvent`
95+
96+
This event is fired when a document is created, modified, copied or indexed. It is triggered after the field calculations defined in the datasheet editor are performed.
97+
98+
The event expects a DataResponse containing a dictionary of field names and their new values. Fields that are not mentioned in the response are not updated.
99+
100+
101+
**DocumentFieldCalculationEvent.name:** document_field_calculation
102+
103+
**DocumentFieldCalculationEvent.data:**
104+
105+
|Attribute|Type|Description|
106+
|-|-|-|
107+
|document|[Document](objects.md#document)|Current state of the document|
108+
|action|Literal["create", "modify", "copy", "index"]|Action being performed|
109+
|linked_parts|list[[Part](objects.md#part)]|Parts that belong to the document|
110+
111+
112+
93113
## EngineeringChangeReleaseCheck
94114
`csfunctions.events.EngineeringChangeReleaseCheck`
95115

@@ -215,6 +235,24 @@ This event is fired **after** a part has been released. Raising an exception thu
215235
|cdb_ec_id|str \| None| Engineering Change ID|
216236

217237

238+
## PartFieldCalculationEvent
239+
`csfunctions.events.PartFieldCalculationEvent`
240+
241+
This event is fired when a part is created, modified, copied or indexed. It is triggered after the field calculations defined in the datasheet editor are performed.
242+
243+
The event expects a DataResponse containing a dictionary of field names and their new values. Fields that are not mentioned in the response are not updated.
244+
245+
**PartFieldCalculationEvent.name:** part_field_calculation
246+
247+
**PartFieldCalculationEvent.data:**
248+
249+
|Attribute|Type|Description|
250+
|-|-|-|
251+
|part|[Part](objects.md#part)|Current state of the part|
252+
|action|Literal["create", "modify", "copy", "index"]|Action being performed|
253+
|linked_documents| list[[Document](objects.md#document)]|List of documents that belong to the part|
254+
255+
218256
## WorkflowTaskTriggerEvent
219257
`csfunctions.events.WorkflowTaskTriggerEvent`
220258

json_schemas/request.json

+124
Original file line numberDiff line numberDiff line change
@@ -781,6 +781,64 @@
781781
"title": "DocumentCreateCheckEvent",
782782
"type": "object"
783783
},
784+
"DocumentFieldCalculationData": {
785+
"properties": {
786+
"document": {
787+
"$ref": "#/$defs/Document",
788+
"description": "Current state of the document"
789+
},
790+
"action": {
791+
"description": "Action being performed",
792+
"enum": [
793+
"create",
794+
"modify",
795+
"copy",
796+
"index"
797+
],
798+
"title": "Action",
799+
"type": "string"
800+
},
801+
"linked_parts": {
802+
"description": "Parts that belong to the document",
803+
"items": {
804+
"$ref": "#/$defs/Part"
805+
},
806+
"title": "Linked Parts",
807+
"type": "array"
808+
}
809+
},
810+
"required": [
811+
"document",
812+
"action",
813+
"linked_parts"
814+
],
815+
"title": "DocumentFieldCalculationData",
816+
"type": "object"
817+
},
818+
"DocumentFieldCalculationEvent": {
819+
"properties": {
820+
"name": {
821+
"const": "document_field_calculation",
822+
"default": "document_field_calculation",
823+
"title": "Name",
824+
"type": "string"
825+
},
826+
"event_id": {
827+
"description": "unique identifier",
828+
"title": "Event Id",
829+
"type": "string"
830+
},
831+
"data": {
832+
"$ref": "#/$defs/DocumentFieldCalculationData"
833+
}
834+
},
835+
"required": [
836+
"event_id",
837+
"data"
838+
],
839+
"title": "DocumentFieldCalculationEvent",
840+
"type": "object"
841+
},
784842
"DocumentModifyCheckData": {
785843
"properties": {
786844
"documents": {
@@ -2573,6 +2631,64 @@
25732631
"title": "PartCreateCheckEvent",
25742632
"type": "object"
25752633
},
2634+
"PartFieldCalculationData": {
2635+
"properties": {
2636+
"part": {
2637+
"$ref": "#/$defs/Part",
2638+
"description": "Current state of the part"
2639+
},
2640+
"action": {
2641+
"description": "Action being performed",
2642+
"enum": [
2643+
"create",
2644+
"modify",
2645+
"copy",
2646+
"index"
2647+
],
2648+
"title": "Action",
2649+
"type": "string"
2650+
},
2651+
"linked_documents": {
2652+
"description": "List of documents that are referenced by the parts.",
2653+
"items": {
2654+
"$ref": "#/$defs/Document"
2655+
},
2656+
"title": "Linked Documents",
2657+
"type": "array"
2658+
}
2659+
},
2660+
"required": [
2661+
"part",
2662+
"action",
2663+
"linked_documents"
2664+
],
2665+
"title": "PartFieldCalculationData",
2666+
"type": "object"
2667+
},
2668+
"PartFieldCalculationEvent": {
2669+
"properties": {
2670+
"name": {
2671+
"const": "part_field_calculation",
2672+
"default": "part_field_calculation",
2673+
"title": "Name",
2674+
"type": "string"
2675+
},
2676+
"event_id": {
2677+
"description": "unique identifier",
2678+
"title": "Event Id",
2679+
"type": "string"
2680+
},
2681+
"data": {
2682+
"$ref": "#/$defs/PartFieldCalculationData"
2683+
}
2684+
},
2685+
"required": [
2686+
"event_id",
2687+
"data"
2688+
],
2689+
"title": "PartFieldCalculationEvent",
2690+
"type": "object"
2691+
},
25762692
"PartModifyCheckData": {
25772693
"properties": {
25782694
"parts": {
@@ -2950,6 +3066,7 @@
29503066
"discriminator": {
29513067
"mapping": {
29523068
"document_create_check": "#/$defs/DocumentCreateCheckEvent",
3069+
"document_field_calculation": "#/$defs/DocumentFieldCalculationEvent",
29533070
"document_modify_check": "#/$defs/DocumentModifyCheckEvent",
29543071
"document_release": "#/$defs/DocumentReleaseEvent",
29553072
"document_release_check": "#/$defs/DocumentReleaseCheckEvent",
@@ -2958,6 +3075,7 @@
29583075
"engineering_change_release_check": "#/$defs/EngineeringChangeReleaseCheck",
29593076
"field_value_calculation": "#/$defs/FieldValueCalculationEvent",
29603077
"part_create_check": "#/$defs/PartCreateCheckEvent",
3078+
"part_field_calculation": "#/$defs/PartFieldCalculationEvent",
29613079
"part_modify_check": "#/$defs/PartModifyCheckEvent",
29623080
"part_release": "#/$defs/PartReleaseEvent",
29633081
"part_release_check": "#/$defs/PartReleaseCheckEvent",
@@ -2972,12 +3090,18 @@
29723090
{
29733091
"$ref": "#/$defs/DocumentReleaseCheckEvent"
29743092
},
3093+
{
3094+
"$ref": "#/$defs/DocumentFieldCalculationEvent"
3095+
},
29753096
{
29763097
"$ref": "#/$defs/PartReleaseEvent"
29773098
},
29783099
{
29793100
"$ref": "#/$defs/PartReleaseCheckEvent"
29803101
},
3102+
{
3103+
"$ref": "#/$defs/PartFieldCalculationEvent"
3104+
},
29813105
{
29823106
"$ref": "#/$defs/FieldValueCalculationEvent"
29833107
},

0 commit comments

Comments
 (0)