diff --git a/csfunctions/events/__init__.py b/csfunctions/events/__init__.py index 2429600..a68074b 100644 --- a/csfunctions/events/__init__.py +++ b/csfunctions/events/__init__.py @@ -19,7 +19,9 @@ ) from .dialog_data import DocumentReleasedDialogData, PartReleasedDialogData 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 @@ -33,16 +35,22 @@ from .engineering_change_status_changed import EngineeringChangeStatusChangedData, EngineeringChangeStatusChangedEvent from .field_value_calculation import FieldValueCalculationData, FieldValueCalculationEvent 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[ - DocumentReleasedEvent + DocumentCreatedEvent + | DocumentIndexedEvent + | DocumentReleasedEvent | DocumentReleaseCheckEvent | DocumentFieldCalculationEvent + | PartCreatedEvent + | PartIndexedEvent | PartReleasedEvent | PartReleaseCheckEvent | PartFieldCalculationEvent @@ -71,9 +79,13 @@ Field(discriminator="name"), ] EventData = ( - DocumentReleasedData + DocumentCreatedData + | DocumentIndexedData + | DocumentReleasedData | DocumentReleaseCheckData | DocumentFieldCalculationData + | PartCreatedData + | PartIndexedData | PartReleasedData | PartReleaseCheckData | PartFieldCalculationData @@ -102,9 +114,13 @@ ) __all__ = [ + "DocumentCreatedEvent", + "DocumentIndexedEvent", "DocumentReleasedEvent", "DocumentReleaseCheckEvent", "DocumentFieldCalculationEvent", + "PartCreatedEvent", + "PartIndexedEvent", "PartReleasedEvent", "PartReleaseCheckEvent", "PartFieldCalculationEvent", @@ -124,9 +140,13 @@ "ChangeRequestStatusChangedEvent", "ChangeRequestStatusChangeCheckEvent", "WorkflowTaskTriggerEvent", + "DocumentCreatedData", + "DocumentIndexedData", "DocumentReleasedData", "DocumentReleaseCheckData", "DocumentFieldCalculationData", + "PartCreatedData", + "PartIndexedData", "PartReleasedData", "PartReleaseCheckData", "BOMItemFieldCalculationData", diff --git a/csfunctions/events/base.py b/csfunctions/events/base.py index 2134469..dd4f247 100644 --- a/csfunctions/events/base.py +++ b/csfunctions/events/base.py @@ -5,9 +5,13 @@ class EventNames(str, Enum): DUMMY = "dummy" + DOCUMENT_CREATED = "document_created" + DOCUMENT_INDEXED = "document_indexed" 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_RELEASED = "part_released" PART_RELEASE_CHECK = "part_release_check" PART_FIELD_CALCULATION = "part_field_calculation" 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 5260134..ff927a2 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` @@ -331,6 +367,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/release_notes.md b/docs/release_notes.md index 96f63fd..360a37c 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -3,6 +3,10 @@ hide: - toc --- +### Version next +- Feat: Add part_created and document_created events +- Feat: Add part_indexed and document_indexed events + ### Version 0.26.0 - Feat: Extend all multi-language object fields with Japanese (ja) and Chinese (zh) variants diff --git a/json_schemas/request.json b/json_schemas/request.json index 1bedcbd..65ff82a 100644 --- a/json_schemas/request.json +++ b/json_schemas/request.json @@ -7285,6 +7285,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": { @@ -7343,6 +7393,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": { @@ -11009,6 +11109,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": { @@ -11067,6 +11217,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": { @@ -11473,7 +11673,9 @@ "custom_operation_document": "#/$defs/CustomOperationDocumentEvent", "custom_operation_part": "#/$defs/CustomOperationPartEvent", "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", @@ -11484,7 +11686,9 @@ "engineering_change_status_changed": "#/$defs/EngineeringChangeStatusChangedEvent", "field_value_calculation": "#/$defs/FieldValueCalculationEvent", "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", @@ -11493,6 +11697,12 @@ "propertyName": "name" }, "oneOf": [ + { + "$ref": "#/$defs/DocumentCreatedEvent" + }, + { + "$ref": "#/$defs/DocumentIndexedEvent" + }, { "$ref": "#/$defs/DocumentReleasedEvent" }, @@ -11502,6 +11712,12 @@ { "$ref": "#/$defs/DocumentFieldCalculationEvent" }, + { + "$ref": "#/$defs/PartCreatedEvent" + }, + { + "$ref": "#/$defs/PartIndexedEvent" + }, { "$ref": "#/$defs/PartReleasedEvent" },