diff --git a/csfunctions/events/__init__.py b/csfunctions/events/__init__.py index 7f5dd7e..79e407f 100644 --- a/csfunctions/events/__init__.py +++ b/csfunctions/events/__init__.py @@ -20,7 +20,9 @@ from .dialog_data import DocumentReleasedDialogData, PartReleasedDialogData from .document_blocked import DocumentBlockedData, DocumentBlockedEvent from .document_create_check import DocumentCreateCheckData, DocumentCreateCheckEvent +from .document_created import DocumentCreatedData, DocumentCreatedEvent from .document_field_calculation import DocumentFieldCalculationData, DocumentFieldCalculationEvent +from .document_indexed import DocumentIndexedData, DocumentIndexedEvent from .document_modify_check import DocumentModifyCheckData, DocumentModifyCheckEvent from .document_release_check import DocumentReleaseCheckData, DocumentReleaseCheckEvent from .document_released import DocumentReleasedData, DocumentReleasedEvent @@ -35,17 +37,23 @@ from .field_value_calculation import FieldValueCalculationData, FieldValueCalculationEvent from .part_blocked import PartBlockedData, PartBlockedEvent from .part_create_check import PartCreateCheckData, PartCreateCheckEvent +from .part_created import PartCreatedData, PartCreatedEvent from .part_field_calculation import PartFieldCalculationData, PartFieldCalculationEvent +from .part_indexed import PartIndexedData, PartIndexedEvent from .part_modify_check import PartModifyCheckData, PartModifyCheckEvent from .part_release_check import PartReleaseCheckData, PartReleaseCheckEvent from .part_released import PartReleasedData, PartReleasedEvent from .workflow_task_trigger import WorkflowTaskTriggerEvent, WorkflowTaskTriggerEventData Event = Annotated[ - DocumentBlockedEvent + DocumentCreatedEvent + | DocumentIndexedEvent + | DocumentBlockedEvent | DocumentReleasedEvent | DocumentReleaseCheckEvent | DocumentFieldCalculationEvent + | PartCreatedEvent + | PartIndexedEvent | PartBlockedEvent | PartReleasedEvent | PartReleaseCheckEvent @@ -75,10 +83,14 @@ Field(discriminator="name"), ] EventData = ( - DocumentBlockedData + DocumentCreatedData + | DocumentIndexedData + | DocumentBlockedData | DocumentReleasedData | DocumentReleaseCheckData | DocumentFieldCalculationData + | PartCreatedData + | PartIndexedData | PartBlockedData | PartReleasedData | PartReleaseCheckData @@ -108,10 +120,14 @@ ) __all__ = [ + "DocumentCreatedEvent", + "DocumentIndexedEvent", "DocumentBlockedEvent", "DocumentReleasedEvent", "DocumentReleaseCheckEvent", "DocumentFieldCalculationEvent", + "PartCreatedEvent", + "PartIndexedEvent", "PartBlockedEvent", "PartReleasedEvent", "PartReleaseCheckEvent", @@ -132,10 +148,14 @@ "ChangeRequestStatusChangedEvent", "ChangeRequestStatusChangeCheckEvent", "WorkflowTaskTriggerEvent", + "DocumentCreatedData", + "DocumentIndexedData", "DocumentBlockedData", "DocumentReleasedData", "DocumentReleaseCheckData", "DocumentFieldCalculationData", + "PartCreatedData", + "PartIndexedData", "PartBlockedData", "PartReleasedData", "PartReleaseCheckData", diff --git a/csfunctions/events/base.py b/csfunctions/events/base.py index 4adaeb8..29d304d 100644 --- a/csfunctions/events/base.py +++ b/csfunctions/events/base.py @@ -5,10 +5,14 @@ class EventNames(str, Enum): DUMMY = "dummy" + DOCUMENT_CREATED = "document_created" + DOCUMENT_INDEXED = "document_indexed" DOCUMENT_BLOCKED = "document_blocked" DOCUMENT_RELEASED = "document_released" DOCUMENT_RELEASE_CHECK = "document_release_check" DOCUMENT_FIELD_CALCULATION = "document_field_calculation" + PART_CREATED = "part_created" + PART_INDEXED = "part_indexed" PART_BLOCKED = "part_blocked" PART_RELEASED = "part_released" PART_RELEASE_CHECK = "part_release_check" diff --git a/csfunctions/events/document_created.py b/csfunctions/events/document_created.py new file mode 100644 index 0000000..768f40b --- /dev/null +++ b/csfunctions/events/document_created.py @@ -0,0 +1,17 @@ +from typing import Literal + +from pydantic import BaseModel, Field + +from csfunctions.objects import Document, Part + +from .base import BaseEvent, EventNames + + +class DocumentCreatedData(BaseModel): + documents: list[Document] = Field(..., description="List of documents that were created.") + parts: list[Part] = Field(..., description="List of parts that belong to the documents.") + + +class DocumentCreatedEvent(BaseEvent): + name: Literal[EventNames.DOCUMENT_CREATED] = EventNames.DOCUMENT_CREATED + data: DocumentCreatedData diff --git a/csfunctions/events/document_indexed.py b/csfunctions/events/document_indexed.py new file mode 100644 index 0000000..59784c4 --- /dev/null +++ b/csfunctions/events/document_indexed.py @@ -0,0 +1,17 @@ +from typing import Literal + +from pydantic import BaseModel, Field + +from csfunctions.objects import Document, Part + +from .base import BaseEvent, EventNames + + +class DocumentIndexedData(BaseModel): + documents: list[Document] = Field(..., description="List of documents that were indexed.") + parts: list[Part] = Field(..., description="List of parts that belong to the documents.") + + +class DocumentIndexedEvent(BaseEvent): + name: Literal[EventNames.DOCUMENT_INDEXED] = EventNames.DOCUMENT_INDEXED + data: DocumentIndexedData diff --git a/csfunctions/events/part_created.py b/csfunctions/events/part_created.py new file mode 100644 index 0000000..b6fa180 --- /dev/null +++ b/csfunctions/events/part_created.py @@ -0,0 +1,17 @@ +from typing import Literal + +from pydantic import BaseModel, Field + +from csfunctions.objects import Document, Part + +from .base import BaseEvent, EventNames + + +class PartCreatedData(BaseModel): + parts: list[Part] = Field(..., description="List of parts that were created.") + documents: list[Document] = Field(..., description="List of documents that are referenced by the parts.") + + +class PartCreatedEvent(BaseEvent): + name: Literal[EventNames.PART_CREATED] = EventNames.PART_CREATED + data: PartCreatedData diff --git a/csfunctions/events/part_indexed.py b/csfunctions/events/part_indexed.py new file mode 100644 index 0000000..635f4c1 --- /dev/null +++ b/csfunctions/events/part_indexed.py @@ -0,0 +1,17 @@ +from typing import Literal + +from pydantic import BaseModel, Field + +from csfunctions.objects import Document, Part + +from .base import BaseEvent, EventNames + + +class PartIndexedData(BaseModel): + parts: list[Part] = Field(..., description="List of parts that were indexed.") + documents: list[Document] = Field(..., description="List of documents that are referenced by the parts.") + + +class PartIndexedEvent(BaseEvent): + name: Literal[EventNames.PART_INDEXED] = EventNames.PART_INDEXED + data: PartIndexedData diff --git a/docs/reference/events.md b/docs/reference/events.md index df03273..482c75f 100644 --- a/docs/reference/events.md +++ b/docs/reference/events.md @@ -20,6 +20,42 @@ The event is triggered before any field calculations are performed. | documents | list[[Document](objects.md#document)] | List of documents that are about to be created. | | parts | list[[Part](objects.md#part)] | List of parts that belong to the documents. | +## DocumentCreatedEvent +`csfunctions.events.DocumentCreatedEvent` + +This event is fired **after** a document has been created. Raising an exception thus can not prevent the creation. + +**Supported actions:** + +- [StartWorkflowAction](actions.md#startworkflowaction) + +**DocumentCreatedEvent.name:** document_created + +**DocumentCreatedEvent.data:** + +| Attribute | Type | Description | +| --------- | ------------------------------------- | ------------------------------------------- | +| documents | list[[Document](objects.md#document)] | List of documents that were created. | +| parts | list[[Part](objects.md#part)] | List of parts that belong to the documents. | + +## DocumentIndexedEvent +`csfunctions.events.DocumentIndexedEvent` + +This event is fired **after** a document has been indexed. Raising an exception thus can not prevent the indexing. + +**Supported actions:** + +- [StartWorkflowAction](actions.md#startworkflowaction) + +**DocumentIndexedEvent.name:** document_indexed + +**DocumentIndexedEvent.data:** + +| Attribute | Type | Description | +| --------- | ------------------------------------- | ------------------------------------------- | +| documents | list[[Document](objects.md#document)] | List of documents that were indexed. | +| parts | list[[Part](objects.md#part)] | List of parts that belong to the documents. | + ## DocumentModifyCheckEvent `csfunctions.events.DocumentModifyCheckEvent` @@ -357,6 +393,42 @@ The event is triggered before any field calculations are performed. | parts | list[[Part](objects.md#part)] | List of parts that are about to be created. | | documents | list[[Document](objects.md#document)] | List of documents that are referenced by the parts. | +## PartCreatedEvent +`csfunctions.events.PartCreatedEvent` + +This event is fired **after** a part has been created. Raising an exception thus can not prevent the creation. + +**Supported actions:** + +- [StartWorkflowAction](actions.md#startworkflowaction) + +**PartCreatedEvent.name:** part_created + +**PartCreatedEvent.data:** + +| Attribute | Type | Description | +| --------- | ------------------------------------- | --------------------------------------------------- | +| parts | list[[Part](objects.md#part)] | List of parts that were created. | +| documents | list[[Document](objects.md#document)] | List of documents that are referenced by the parts. | + +## PartIndexedEvent +`csfunctions.events.PartIndexedEvent` + +This event is fired **after** a part has been indexed. Raising an exception thus can not prevent the indexing. + +**Supported actions:** + +- [StartWorkflowAction](actions.md#startworkflowaction) + +**PartIndexedEvent.name:** part_indexed + +**PartIndexedEvent.data:** + +| Attribute | Type | Description | +| --------- | ------------------------------------- | --------------------------------------------------- | +| parts | list[[Part](objects.md#part)] | List of parts that were indexed. | +| documents | list[[Document](objects.md#document)] | List of documents that are referenced by the parts. | + ## PartModifyCheckEvent `csfunctions.events.PartModifyCheckEvent` diff --git a/docs/reference/objects.md b/docs/reference/objects.md index 60f05a9..4ba5fa4 100644 --- a/docs/reference/objects.md +++ b/docs/reference/objects.md @@ -5,7 +5,6 @@ |Attribute|Type|Description| |-|-|-| |cdb_object_id|str \| None|Object ID| -|cdb_object_id|str \| None|Object ID| |baugruppe|str \| None|Assembly| |b_index|str \| None|Assembly Index| |component_materialnr_erp|str \| None|Material Number ERP Component| diff --git a/docs/release_notes.md b/docs/release_notes.md index 9e322b0..5aa8f57 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -3,11 +3,12 @@ hide: - toc --- - ### Version 0.26.0 - Feat: Extend all multi-language object fields with Japanese (ja) and Chinese (zh) variants - Feat: Add part_blocked and document_blocked events - Feat: Add reviewers field to PartReleaseCheckEvent and DocumentReleaseCheckEvent, populated for express releases +- Feat: Add part_created and document_created events +- Feat: Add part_indexed and document_indexed events ### Version 0.25.0 - Feat: Add change objects (ChangeOrder and ChangeRequest) with their release and status change events diff --git a/json_schemas/request.json b/json_schemas/request.json index 01aa8fd..7996cdf 100644 --- a/json_schemas/request.json +++ b/json_schemas/request.json @@ -7335,6 +7335,56 @@ "title": "DocumentCreateCheckEvent", "type": "object" }, + "DocumentCreatedData": { + "properties": { + "documents": { + "description": "List of documents that were created.", + "items": { + "$ref": "#/$defs/Document" + }, + "title": "Documents", + "type": "array" + }, + "parts": { + "description": "List of parts that belong to the documents.", + "items": { + "$ref": "#/$defs/Part" + }, + "title": "Parts", + "type": "array" + } + }, + "required": [ + "documents", + "parts" + ], + "title": "DocumentCreatedData", + "type": "object" + }, + "DocumentCreatedEvent": { + "properties": { + "name": { + "const": "document_created", + "default": "document_created", + "title": "Name", + "type": "string" + }, + "event_id": { + "description": "unique identifier", + "title": "Event Id", + "type": "string" + }, + "data": { + "$ref": "#/$defs/DocumentCreatedData" + } + }, + "required": [ + "event_id", + "data" + ], + "title": "DocumentCreatedEvent", + "type": "object" + }, "DocumentFieldCalculationData": { "properties": { "document": { @@ -7393,6 +7443,56 @@ "title": "DocumentFieldCalculationEvent", "type": "object" }, + "DocumentIndexedData": { + "properties": { + "documents": { + "description": "List of documents that were indexed.", + "items": { + "$ref": "#/$defs/Document" + }, + "title": "Documents", + "type": "array" + }, + "parts": { + "description": "List of parts that belong to the documents.", + "items": { + "$ref": "#/$defs/Part" + }, + "title": "Parts", + "type": "array" + } + }, + "required": [ + "documents", + "parts" + ], + "title": "DocumentIndexedData", + "type": "object" + }, + "DocumentIndexedEvent": { + "properties": { + "name": { + "const": "document_indexed", + "default": "document_indexed", + "title": "Name", + "type": "string" + }, + "event_id": { + "description": "unique identifier", + "title": "Event Id", + "type": "string" + }, + "data": { + "$ref": "#/$defs/DocumentIndexedData" + } + }, + "required": [ + "event_id", + "data" + ], + "title": "DocumentIndexedEvent", + "type": "object" + }, "DocumentModifyCheckData": { "properties": { "documents": { @@ -11117,6 +11217,56 @@ "title": "PartCreateCheckEvent", "type": "object" }, + "PartCreatedData": { + "properties": { + "parts": { + "description": "List of parts that were created.", + "items": { + "$ref": "#/$defs/Part" + }, + "title": "Parts", + "type": "array" + }, + "documents": { + "description": "List of documents that are referenced by the parts.", + "items": { + "$ref": "#/$defs/Document" + }, + "title": "Documents", + "type": "array" + } + }, + "required": [ + "parts", + "documents" + ], + "title": "PartCreatedData", + "type": "object" + }, + "PartCreatedEvent": { + "properties": { + "name": { + "const": "part_created", + "default": "part_created", + "title": "Name", + "type": "string" + }, + "event_id": { + "description": "unique identifier", + "title": "Event Id", + "type": "string" + }, + "data": { + "$ref": "#/$defs/PartCreatedData" + } + }, + "required": [ + "event_id", + "data" + ], + "title": "PartCreatedEvent", + "type": "object" + }, "PartFieldCalculationData": { "properties": { "part": { @@ -11175,6 +11325,56 @@ "title": "PartFieldCalculationEvent", "type": "object" }, + "PartIndexedData": { + "properties": { + "parts": { + "description": "List of parts that were indexed.", + "items": { + "$ref": "#/$defs/Part" + }, + "title": "Parts", + "type": "array" + }, + "documents": { + "description": "List of documents that are referenced by the parts.", + "items": { + "$ref": "#/$defs/Document" + }, + "title": "Documents", + "type": "array" + } + }, + "required": [ + "parts", + "documents" + ], + "title": "PartIndexedData", + "type": "object" + }, + "PartIndexedEvent": { + "properties": { + "name": { + "const": "part_indexed", + "default": "part_indexed", + "title": "Name", + "type": "string" + }, + "event_id": { + "description": "unique identifier", + "title": "Event Id", + "type": "string" + }, + "data": { + "$ref": "#/$defs/PartIndexedData" + } + }, + "required": [ + "event_id", + "data" + ], + "title": "PartIndexedEvent", + "type": "object" + }, "PartModifyCheckData": { "properties": { "parts": { @@ -11615,7 +11815,9 @@ "custom_operation_part": "#/$defs/CustomOperationPartEvent", "document_blocked": "#/$defs/DocumentBlockedEvent", "document_create_check": "#/$defs/DocumentCreateCheckEvent", + "document_created": "#/$defs/DocumentCreatedEvent", "document_field_calculation": "#/$defs/DocumentFieldCalculationEvent", + "document_indexed": "#/$defs/DocumentIndexedEvent", "document_modify_check": "#/$defs/DocumentModifyCheckEvent", "document_release_check": "#/$defs/DocumentReleaseCheckEvent", "document_released": "#/$defs/DocumentReleasedEvent", @@ -11627,7 +11829,9 @@ "field_value_calculation": "#/$defs/FieldValueCalculationEvent", "part_blocked": "#/$defs/PartBlockedEvent", "part_create_check": "#/$defs/PartCreateCheckEvent", + "part_created": "#/$defs/PartCreatedEvent", "part_field_calculation": "#/$defs/PartFieldCalculationEvent", + "part_indexed": "#/$defs/PartIndexedEvent", "part_modify_check": "#/$defs/PartModifyCheckEvent", "part_release_check": "#/$defs/PartReleaseCheckEvent", "part_released": "#/$defs/PartReleasedEvent", @@ -11636,6 +11840,12 @@ "propertyName": "name" }, "oneOf": [ + { + "$ref": "#/$defs/DocumentCreatedEvent" + }, + { + "$ref": "#/$defs/DocumentIndexedEvent" + }, { "$ref": "#/$defs/DocumentBlockedEvent" }, @@ -11648,6 +11858,12 @@ { "$ref": "#/$defs/DocumentFieldCalculationEvent" }, + { + "$ref": "#/$defs/PartCreatedEvent" + }, + { + "$ref": "#/$defs/PartIndexedEvent" + }, { "$ref": "#/$defs/PartBlockedEvent" },