Skip to content

Commit 9774cd4

Browse files
Jens Kürtenclaude
andcommitted
Feat: add part_created and document_created events
Add PartCreatedEvent and DocumentCreatedEvent, fired after a part or document has been created (POST create). Wire them into the event unions, exports, JSON schema and reference docs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent a504106 commit 9774cd4

7 files changed

Lines changed: 195 additions & 2 deletions

File tree

‎csfunctions/events/__init__.py‎

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
)
2020
from .dialog_data import DocumentReleasedDialogData, PartReleasedDialogData
2121
from .document_create_check import DocumentCreateCheckData, DocumentCreateCheckEvent
22+
from .document_created import DocumentCreatedData, DocumentCreatedEvent
2223
from .document_field_calculation import DocumentFieldCalculationData, DocumentFieldCalculationEvent
2324
from .document_modify_check import DocumentModifyCheckData, DocumentModifyCheckEvent
2425
from .document_release_check import DocumentReleaseCheckData, DocumentReleaseCheckEvent
@@ -33,16 +34,19 @@
3334
from .engineering_change_status_changed import EngineeringChangeStatusChangedData, EngineeringChangeStatusChangedEvent
3435
from .field_value_calculation import FieldValueCalculationData, FieldValueCalculationEvent
3536
from .part_create_check import PartCreateCheckData, PartCreateCheckEvent
37+
from .part_created import PartCreatedData, PartCreatedEvent
3638
from .part_field_calculation import PartFieldCalculationData, PartFieldCalculationEvent
3739
from .part_modify_check import PartModifyCheckData, PartModifyCheckEvent
3840
from .part_release_check import PartReleaseCheckData, PartReleaseCheckEvent
3941
from .part_released import PartReleasedData, PartReleasedEvent
4042
from .workflow_task_trigger import WorkflowTaskTriggerEvent, WorkflowTaskTriggerEventData
4143

4244
Event = Annotated[
43-
DocumentReleasedEvent
45+
DocumentCreatedEvent
46+
| DocumentReleasedEvent
4447
| DocumentReleaseCheckEvent
4548
| DocumentFieldCalculationEvent
49+
| PartCreatedEvent
4650
| PartReleasedEvent
4751
| PartReleaseCheckEvent
4852
| PartFieldCalculationEvent
@@ -71,9 +75,11 @@
7175
Field(discriminator="name"),
7276
]
7377
EventData = (
74-
DocumentReleasedData
78+
DocumentCreatedData
79+
| DocumentReleasedData
7580
| DocumentReleaseCheckData
7681
| DocumentFieldCalculationData
82+
| PartCreatedData
7783
| PartReleasedData
7884
| PartReleaseCheckData
7985
| PartFieldCalculationData
@@ -102,9 +108,11 @@
102108
)
103109

104110
__all__ = [
111+
"DocumentCreatedEvent",
105112
"DocumentReleasedEvent",
106113
"DocumentReleaseCheckEvent",
107114
"DocumentFieldCalculationEvent",
115+
"PartCreatedEvent",
108116
"PartReleasedEvent",
109117
"PartReleaseCheckEvent",
110118
"PartFieldCalculationEvent",
@@ -124,9 +132,11 @@
124132
"ChangeRequestStatusChangedEvent",
125133
"ChangeRequestStatusChangeCheckEvent",
126134
"WorkflowTaskTriggerEvent",
135+
"DocumentCreatedData",
127136
"DocumentReleasedData",
128137
"DocumentReleaseCheckData",
129138
"DocumentFieldCalculationData",
139+
"PartCreatedData",
130140
"PartReleasedData",
131141
"PartReleaseCheckData",
132142
"BOMItemFieldCalculationData",

‎csfunctions/events/base.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55

66
class EventNames(str, Enum):
77
DUMMY = "dummy"
8+
DOCUMENT_CREATED = "document_created"
89
DOCUMENT_RELEASED = "document_released"
910
DOCUMENT_RELEASE_CHECK = "document_release_check"
1011
DOCUMENT_FIELD_CALCULATION = "document_field_calculation"
12+
PART_CREATED = "part_created"
1113
PART_RELEASED = "part_released"
1214
PART_RELEASE_CHECK = "part_release_check"
1315
PART_FIELD_CALCULATION = "part_field_calculation"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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 DocumentCreatedData(BaseModel):
11+
documents: list[Document] = Field(..., description="List of documents that were created.")
12+
parts: list[Part] = Field(..., description="List of parts that belong to the documents.")
13+
14+
15+
class DocumentCreatedEvent(BaseEvent):
16+
name: Literal[EventNames.DOCUMENT_CREATED] = EventNames.DOCUMENT_CREATED
17+
data: DocumentCreatedData

‎csfunctions/events/part_created.py‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
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 PartCreatedData(BaseModel):
11+
parts: list[Part] = Field(..., description="List of parts that were created.")
12+
documents: list[Document] = Field(..., description="List of documents that are referenced by the parts.")
13+
14+
15+
class PartCreatedEvent(BaseEvent):
16+
name: Literal[EventNames.PART_CREATED] = EventNames.PART_CREATED
17+
data: PartCreatedData

‎docs/reference/events.md‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,24 @@ The event is triggered before any field calculations are performed.
2020
| documents | list[[Document](objects.md#document)] | List of documents that are about to be created. |
2121
| parts | list[[Part](objects.md#part)] | List of parts that belong to the documents. |
2222

23+
## DocumentCreatedEvent
24+
`csfunctions.events.DocumentCreatedEvent`
25+
26+
This event is fired **after** a document has been created. Raising an exception thus can not prevent the creation.
27+
28+
**Supported actions:**
29+
30+
- [StartWorkflowAction](actions.md#startworkflowaction)
31+
32+
**DocumentCreatedEvent.name:** document_created
33+
34+
**DocumentCreatedEvent.data:**
35+
36+
| Attribute | Type | Description |
37+
| --------- | ------------------------------------- | ------------------------------------------- |
38+
| documents | list[[Document](objects.md#document)] | List of documents that were created. |
39+
| parts | list[[Part](objects.md#part)] | List of parts that belong to the documents. |
40+
2341
## DocumentModifyCheckEvent
2442
`csfunctions.events.DocumentModifyCheckEvent`
2543

@@ -331,6 +349,24 @@ The event is triggered before any field calculations are performed.
331349
| parts | list[[Part](objects.md#part)] | List of parts that are about to be created. |
332350
| documents | list[[Document](objects.md#document)] | List of documents that are referenced by the parts. |
333351

352+
## PartCreatedEvent
353+
`csfunctions.events.PartCreatedEvent`
354+
355+
This event is fired **after** a part has been created. Raising an exception thus can not prevent the creation.
356+
357+
**Supported actions:**
358+
359+
- [StartWorkflowAction](actions.md#startworkflowaction)
360+
361+
**PartCreatedEvent.name:** part_created
362+
363+
**PartCreatedEvent.data:**
364+
365+
| Attribute | Type | Description |
366+
| --------- | ------------------------------------- | --------------------------------------------------- |
367+
| parts | list[[Part](objects.md#part)] | List of parts that were created. |
368+
| documents | list[[Document](objects.md#document)] | List of documents that are referenced by the parts. |
369+
334370
## PartModifyCheckEvent
335371
`csfunctions.events.PartModifyCheckEvent`
336372

‎docs/release_notes.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ hide:
33
- toc
44
---
55

6+
### Version 0.25.0
7+
- Feat: Add part_created and document_created events
8+
69
### Version 0.24.0
710
- Feat: Add maturity levels
811

‎json_schemas/request.json‎

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7077,6 +7077,56 @@
70777077
"title": "DocumentCreateCheckEvent",
70787078
"type": "object"
70797079
},
7080+
"DocumentCreatedData": {
7081+
"properties": {
7082+
"documents": {
7083+
"description": "List of documents that were created.",
7084+
"items": {
7085+
"$ref": "#/$defs/Document"
7086+
},
7087+
"title": "Documents",
7088+
"type": "array"
7089+
},
7090+
"parts": {
7091+
"description": "List of parts that belong to the documents.",
7092+
"items": {
7093+
"$ref": "#/$defs/Part"
7094+
},
7095+
"title": "Parts",
7096+
"type": "array"
7097+
}
7098+
},
7099+
"required": [
7100+
"documents",
7101+
"parts"
7102+
],
7103+
"title": "DocumentCreatedData",
7104+
"type": "object"
7105+
},
7106+
"DocumentCreatedEvent": {
7107+
"properties": {
7108+
"name": {
7109+
"const": "document_created",
7110+
"default": "document_created",
7111+
"title": "Name",
7112+
"type": "string"
7113+
},
7114+
"event_id": {
7115+
"description": "unique identifier",
7116+
"title": "Event Id",
7117+
"type": "string"
7118+
},
7119+
"data": {
7120+
"$ref": "#/$defs/DocumentCreatedData"
7121+
}
7122+
},
7123+
"required": [
7124+
"event_id",
7125+
"data"
7126+
],
7127+
"title": "DocumentCreatedEvent",
7128+
"type": "object"
7129+
},
70807130
"DocumentFieldCalculationData": {
70817131
"properties": {
70827132
"document": {
@@ -10671,6 +10721,56 @@
1067110721
"title": "PartCreateCheckEvent",
1067210722
"type": "object"
1067310723
},
10724+
"PartCreatedData": {
10725+
"properties": {
10726+
"parts": {
10727+
"description": "List of parts that were created.",
10728+
"items": {
10729+
"$ref": "#/$defs/Part"
10730+
},
10731+
"title": "Parts",
10732+
"type": "array"
10733+
},
10734+
"documents": {
10735+
"description": "List of documents that are referenced by the parts.",
10736+
"items": {
10737+
"$ref": "#/$defs/Document"
10738+
},
10739+
"title": "Documents",
10740+
"type": "array"
10741+
}
10742+
},
10743+
"required": [
10744+
"parts",
10745+
"documents"
10746+
],
10747+
"title": "PartCreatedData",
10748+
"type": "object"
10749+
},
10750+
"PartCreatedEvent": {
10751+
"properties": {
10752+
"name": {
10753+
"const": "part_created",
10754+
"default": "part_created",
10755+
"title": "Name",
10756+
"type": "string"
10757+
},
10758+
"event_id": {
10759+
"description": "unique identifier",
10760+
"title": "Event Id",
10761+
"type": "string"
10762+
},
10763+
"data": {
10764+
"$ref": "#/$defs/PartCreatedData"
10765+
}
10766+
},
10767+
"required": [
10768+
"event_id",
10769+
"data"
10770+
],
10771+
"title": "PartCreatedEvent",
10772+
"type": "object"
10773+
},
1067410774
"PartFieldCalculationData": {
1067510775
"properties": {
1067610776
"part": {
@@ -11135,6 +11235,7 @@
1113511235
"custom_operation_document": "#/$defs/CustomOperationDocumentEvent",
1113611236
"custom_operation_part": "#/$defs/CustomOperationPartEvent",
1113711237
"document_create_check": "#/$defs/DocumentCreateCheckEvent",
11238+
"document_created": "#/$defs/DocumentCreatedEvent",
1113811239
"document_field_calculation": "#/$defs/DocumentFieldCalculationEvent",
1113911240
"document_modify_check": "#/$defs/DocumentModifyCheckEvent",
1114011241
"document_release_check": "#/$defs/DocumentReleaseCheckEvent",
@@ -11146,6 +11247,7 @@
1114611247
"engineering_change_status_changed": "#/$defs/EngineeringChangeStatusChangedEvent",
1114711248
"field_value_calculation": "#/$defs/FieldValueCalculationEvent",
1114811249
"part_create_check": "#/$defs/PartCreateCheckEvent",
11250+
"part_created": "#/$defs/PartCreatedEvent",
1114911251
"part_field_calculation": "#/$defs/PartFieldCalculationEvent",
1115011252
"part_modify_check": "#/$defs/PartModifyCheckEvent",
1115111253
"part_release_check": "#/$defs/PartReleaseCheckEvent",
@@ -11155,6 +11257,9 @@
1115511257
"propertyName": "name"
1115611258
},
1115711259
"oneOf": [
11260+
{
11261+
"$ref": "#/$defs/DocumentCreatedEvent"
11262+
},
1115811263
{
1115911264
"$ref": "#/$defs/DocumentReleasedEvent"
1116011265
},
@@ -11164,6 +11269,9 @@
1116411269
{
1116511270
"$ref": "#/$defs/DocumentFieldCalculationEvent"
1116611271
},
11272+
{
11273+
"$ref": "#/$defs/PartCreatedEvent"
11274+
},
1116711275
{
1116811276
"$ref": "#/$defs/PartReleasedEvent"
1116911277
},

0 commit comments

Comments
 (0)