Skip to content

Commit b9db1c9

Browse files
jens-kuertenJens Kürtenclaude
authored
Feat: add document and part "created" events (#48)
* 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> * fix: release notes * Feat: add part_indexed and document_indexed events Add PartIndexedEvent and DocumentIndexedEvent, fired after a part or document has been indexed (a new version created). Wire them into the event unions, exports, JSON schema and reference docs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * remove reference to new version created * Refactor: clean up objects documentation and consolidate change order/request sections * revert unintended change * revert unintended change * update release notes --------- Co-authored-by: Jens Kürten <jens.kuerten@contact-software.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 1bd1a3f commit b9db1c9

10 files changed

Lines changed: 384 additions & 4 deletions

File tree

csfunctions/events/__init__.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020
from .dialog_data import DocumentReleasedDialogData, PartReleasedDialogData
2121
from .document_blocked import DocumentBlockedData, DocumentBlockedEvent
2222
from .document_create_check import DocumentCreateCheckData, DocumentCreateCheckEvent
23+
from .document_created import DocumentCreatedData, DocumentCreatedEvent
2324
from .document_field_calculation import DocumentFieldCalculationData, DocumentFieldCalculationEvent
25+
from .document_indexed import DocumentIndexedData, DocumentIndexedEvent
2426
from .document_modify_check import DocumentModifyCheckData, DocumentModifyCheckEvent
2527
from .document_release_check import DocumentReleaseCheckData, DocumentReleaseCheckEvent
2628
from .document_released import DocumentReleasedData, DocumentReleasedEvent
@@ -35,17 +37,23 @@
3537
from .field_value_calculation import FieldValueCalculationData, FieldValueCalculationEvent
3638
from .part_blocked import PartBlockedData, PartBlockedEvent
3739
from .part_create_check import PartCreateCheckData, PartCreateCheckEvent
40+
from .part_created import PartCreatedData, PartCreatedEvent
3841
from .part_field_calculation import PartFieldCalculationData, PartFieldCalculationEvent
42+
from .part_indexed import PartIndexedData, PartIndexedEvent
3943
from .part_modify_check import PartModifyCheckData, PartModifyCheckEvent
4044
from .part_release_check import PartReleaseCheckData, PartReleaseCheckEvent
4145
from .part_released import PartReleasedData, PartReleasedEvent
4246
from .workflow_task_trigger import WorkflowTaskTriggerEvent, WorkflowTaskTriggerEventData
4347

4448
Event = Annotated[
45-
DocumentBlockedEvent
49+
DocumentCreatedEvent
50+
| DocumentIndexedEvent
51+
| DocumentBlockedEvent
4652
| DocumentReleasedEvent
4753
| DocumentReleaseCheckEvent
4854
| DocumentFieldCalculationEvent
55+
| PartCreatedEvent
56+
| PartIndexedEvent
4957
| PartBlockedEvent
5058
| PartReleasedEvent
5159
| PartReleaseCheckEvent
@@ -75,10 +83,14 @@
7583
Field(discriminator="name"),
7684
]
7785
EventData = (
78-
DocumentBlockedData
86+
DocumentCreatedData
87+
| DocumentIndexedData
88+
| DocumentBlockedData
7989
| DocumentReleasedData
8090
| DocumentReleaseCheckData
8191
| DocumentFieldCalculationData
92+
| PartCreatedData
93+
| PartIndexedData
8294
| PartBlockedData
8395
| PartReleasedData
8496
| PartReleaseCheckData
@@ -108,10 +120,14 @@
108120
)
109121

110122
__all__ = [
123+
"DocumentCreatedEvent",
124+
"DocumentIndexedEvent",
111125
"DocumentBlockedEvent",
112126
"DocumentReleasedEvent",
113127
"DocumentReleaseCheckEvent",
114128
"DocumentFieldCalculationEvent",
129+
"PartCreatedEvent",
130+
"PartIndexedEvent",
115131
"PartBlockedEvent",
116132
"PartReleasedEvent",
117133
"PartReleaseCheckEvent",
@@ -132,10 +148,14 @@
132148
"ChangeRequestStatusChangedEvent",
133149
"ChangeRequestStatusChangeCheckEvent",
134150
"WorkflowTaskTriggerEvent",
151+
"DocumentCreatedData",
152+
"DocumentIndexedData",
135153
"DocumentBlockedData",
136154
"DocumentReleasedData",
137155
"DocumentReleaseCheckData",
138156
"DocumentFieldCalculationData",
157+
"PartCreatedData",
158+
"PartIndexedData",
139159
"PartBlockedData",
140160
"PartReleasedData",
141161
"PartReleaseCheckData",

csfunctions/events/base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@
55

66
class EventNames(str, Enum):
77
DUMMY = "dummy"
8+
DOCUMENT_CREATED = "document_created"
9+
DOCUMENT_INDEXED = "document_indexed"
810
DOCUMENT_BLOCKED = "document_blocked"
911
DOCUMENT_RELEASED = "document_released"
1012
DOCUMENT_RELEASE_CHECK = "document_release_check"
1113
DOCUMENT_FIELD_CALCULATION = "document_field_calculation"
14+
PART_CREATED = "part_created"
15+
PART_INDEXED = "part_indexed"
1216
PART_BLOCKED = "part_blocked"
1317
PART_RELEASED = "part_released"
1418
PART_RELEASE_CHECK = "part_release_check"
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
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 DocumentIndexedData(BaseModel):
11+
documents: list[Document] = Field(..., description="List of documents that were indexed.")
12+
parts: list[Part] = Field(..., description="List of parts that belong to the documents.")
13+
14+
15+
class DocumentIndexedEvent(BaseEvent):
16+
name: Literal[EventNames.DOCUMENT_INDEXED] = EventNames.DOCUMENT_INDEXED
17+
data: DocumentIndexedData

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

csfunctions/events/part_indexed.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 PartIndexedData(BaseModel):
11+
parts: list[Part] = Field(..., description="List of parts that were indexed.")
12+
documents: list[Document] = Field(..., description="List of documents that are referenced by the parts.")
13+
14+
15+
class PartIndexedEvent(BaseEvent):
16+
name: Literal[EventNames.PART_INDEXED] = EventNames.PART_INDEXED
17+
data: PartIndexedData

docs/reference/events.md

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,42 @@ 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+
41+
## DocumentIndexedEvent
42+
`csfunctions.events.DocumentIndexedEvent`
43+
44+
This event is fired **after** a document has been indexed. Raising an exception thus can not prevent the indexing.
45+
46+
**Supported actions:**
47+
48+
- [StartWorkflowAction](actions.md#startworkflowaction)
49+
50+
**DocumentIndexedEvent.name:** document_indexed
51+
52+
**DocumentIndexedEvent.data:**
53+
54+
| Attribute | Type | Description |
55+
| --------- | ------------------------------------- | ------------------------------------------- |
56+
| documents | list[[Document](objects.md#document)] | List of documents that were indexed. |
57+
| parts | list[[Part](objects.md#part)] | List of parts that belong to the documents. |
58+
2359
## DocumentModifyCheckEvent
2460
`csfunctions.events.DocumentModifyCheckEvent`
2561

@@ -357,6 +393,42 @@ The event is triggered before any field calculations are performed.
357393
| parts | list[[Part](objects.md#part)] | List of parts that are about to be created. |
358394
| documents | list[[Document](objects.md#document)] | List of documents that are referenced by the parts. |
359395

396+
## PartCreatedEvent
397+
`csfunctions.events.PartCreatedEvent`
398+
399+
This event is fired **after** a part has been created. Raising an exception thus can not prevent the creation.
400+
401+
**Supported actions:**
402+
403+
- [StartWorkflowAction](actions.md#startworkflowaction)
404+
405+
**PartCreatedEvent.name:** part_created
406+
407+
**PartCreatedEvent.data:**
408+
409+
| Attribute | Type | Description |
410+
| --------- | ------------------------------------- | --------------------------------------------------- |
411+
| parts | list[[Part](objects.md#part)] | List of parts that were created. |
412+
| documents | list[[Document](objects.md#document)] | List of documents that are referenced by the parts. |
413+
414+
## PartIndexedEvent
415+
`csfunctions.events.PartIndexedEvent`
416+
417+
This event is fired **after** a part has been indexed. Raising an exception thus can not prevent the indexing.
418+
419+
**Supported actions:**
420+
421+
- [StartWorkflowAction](actions.md#startworkflowaction)
422+
423+
**PartIndexedEvent.name:** part_indexed
424+
425+
**PartIndexedEvent.data:**
426+
427+
| Attribute | Type | Description |
428+
| --------- | ------------------------------------- | --------------------------------------------------- |
429+
| parts | list[[Part](objects.md#part)] | List of parts that were indexed. |
430+
| documents | list[[Document](objects.md#document)] | List of documents that are referenced by the parts. |
431+
360432
## PartModifyCheckEvent
361433
`csfunctions.events.PartModifyCheckEvent`
362434

docs/reference/objects.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
|Attribute|Type|Description|
66
|-|-|-|
77
|cdb_object_id|str \| None|Object ID|
8-
|cdb_object_id|str \| None|Object ID|
98
|baugruppe|str \| None|Assembly|
109
|b_index|str \| None|Assembly Index|
1110
|component_materialnr_erp|str \| None|Material Number ERP Component|

docs/release_notes.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ hide:
33
- toc
44
---
55

6-
76
### Version 0.26.0
87
- Feat: Extend all multi-language object fields with Japanese (ja) and Chinese (zh) variants
98
- Feat: Add part_blocked and document_blocked events
109
- Feat: Add reviewers field to PartReleaseCheckEvent and DocumentReleaseCheckEvent, populated for express releases
10+
- Feat: Add part_created and document_created events
11+
- Feat: Add part_indexed and document_indexed events
1112

1213
### Version 0.25.0
1314
- Feat: Add change objects (ChangeOrder and ChangeRequest) with their release and status change events

0 commit comments

Comments
 (0)