From 8a47632ab5bd66aadad9a9100231673053da316b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20K=C3=BCrten?= Date: Wed, 12 Aug 2026 07:34:23 +0200 Subject: [PATCH 1/2] Add Role object (Common Roles only) Lets consumers represent a Common (global) Role, so services like functions-db-service can expose which roles a Person has. Organizational-Context roles are not represented by this object. Co-Authored-By: Claude Sonnet 5 --- csfunctions/objects/__init__.py | 5 ++++- csfunctions/objects/base.py | 1 + csfunctions/objects/role.py | 20 ++++++++++++++++++++ docs/reference/objects.md | 14 ++++++++++++++ docs/release_notes.md | 3 +++ 5 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 csfunctions/objects/role.py diff --git a/csfunctions/objects/__init__.py b/csfunctions/objects/__init__.py index e2dbbb3..c73bba3 100644 --- a/csfunctions/objects/__init__.py +++ b/csfunctions/objects/__init__.py @@ -10,6 +10,7 @@ from .file import File from .part import BOMItem, Material, MaturityLevel, Part from .person import Person +from .role import Role from .workflow import Workflow Object = Annotated[ @@ -26,7 +27,8 @@ | Briefcase | Workflow | Person - | MaturityLevel, + | MaturityLevel + | Role, Field(discriminator="object_type"), ] @@ -48,4 +50,5 @@ "BaseObject", "Person", "MaturityLevel", + "Role", ] diff --git a/csfunctions/objects/base.py b/csfunctions/objects/base.py index 3d28f8f..6873f47 100644 --- a/csfunctions/objects/base.py +++ b/csfunctions/objects/base.py @@ -23,6 +23,7 @@ class ObjectType(str, Enum): BRIEFCASE = "briefcase" PERSON = "person" MATURITY_LEVEL = "maturity_level" + ROLE = "role" class BaseObject(BaseModel): diff --git a/csfunctions/objects/role.py b/csfunctions/objects/role.py new file mode 100644 index 0000000..e30820f --- /dev/null +++ b/csfunctions/objects/role.py @@ -0,0 +1,20 @@ +from typing import Literal + +from pydantic import Field + +from csfunctions.objects.base import BaseObject, ObjectType + + +class Role(BaseObject): + """ + A Common (global) Role that can be assigned to a Person. + """ + + object_type: Literal[ObjectType.ROLE] = ObjectType.ROLE + + role_id: str = Field(..., description="Role ID") + name_de: str | None = Field(None, description="Name DE") + name_en: str | None = Field(None, description="Name EN") + name_ja: str | None = Field(None, description="Name JA") + name_zh: str | None = Field(None, description="Name ZH") + cdb_object_id: str | None = Field(None, description="Object ID") diff --git a/docs/reference/objects.md b/docs/reference/objects.md index 4ba5fa4..fb5c809 100644 --- a/docs/reference/objects.md +++ b/docs/reference/objects.md @@ -873,6 +873,20 @@ An objects property, used by classification. |e_mail|str \| None|Email| |telefon|str \| None|Phone| +## Role +`csfunctions.objects.Role` + +A Common (global) Role that can be assigned to a Person. + +|Attribute|Type|Description| +|-|-|-| +|role_id|str|Role ID| +|name_de|str \| None|Name DE| +|name_en|str \| None|Name EN| +|name_ja|str \| None|Name JA| +|name_zh|str \| None|Name ZH| +|cdb_object_id|str \| None|Object ID| + ## Workflow `csfunctions.objects.Workflow` diff --git a/docs/release_notes.md b/docs/release_notes.md index 0c90b21..e574a56 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -3,6 +3,9 @@ hide: - toc --- +### Version next +- Feat: Add Role object (Common Roles only) + ### Version 0.27.0 - Feat: Add part_blocked and document_blocked events - Feat: Add reviewers field to PartReleaseCheckEvent and DocumentReleaseCheckEvent, populated for express releases From bdcbc0153b1fd859a82b6708883a94465567522b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jens=20K=C3=BCrten?= Date: Fri, 14 Aug 2026 12:19:13 +0200 Subject: [PATCH 2/2] Rename Role to CommonRole Per review feedback: naming it Role/"role" now would make it awkward to add other role types (e.g. Org-Context roles) later without a breaking API change, since the discriminator value is part of the wire format. Co-Authored-By: Claude Sonnet 5 --- csfunctions/objects/__init__.py | 6 ++-- csfunctions/objects/base.py | 2 +- .../objects/{role.py => common_role.py} | 4 +-- docs/reference/objects.md | 28 +++++++++---------- docs/release_notes.md | 2 +- 5 files changed, 21 insertions(+), 21 deletions(-) rename csfunctions/objects/{role.py => common_role.py} (84%) diff --git a/csfunctions/objects/__init__.py b/csfunctions/objects/__init__.py index c73bba3..8cff0a1 100644 --- a/csfunctions/objects/__init__.py +++ b/csfunctions/objects/__init__.py @@ -5,12 +5,12 @@ from .base import BaseObject from .briefcase import Briefcase from .classification import ObjectPropertyValue +from .common_role import CommonRole from .document import CADDocument, Document from .engineering_change import Change, ChangeOrder, ChangeRequest, EngineeringChange from .file import File from .part import BOMItem, Material, MaturityLevel, Part from .person import Person -from .role import Role from .workflow import Workflow Object = Annotated[ @@ -28,7 +28,7 @@ | Workflow | Person | MaturityLevel - | Role, + | CommonRole, Field(discriminator="object_type"), ] @@ -50,5 +50,5 @@ "BaseObject", "Person", "MaturityLevel", - "Role", + "CommonRole", ] diff --git a/csfunctions/objects/base.py b/csfunctions/objects/base.py index 6873f47..d81a0e1 100644 --- a/csfunctions/objects/base.py +++ b/csfunctions/objects/base.py @@ -23,7 +23,7 @@ class ObjectType(str, Enum): BRIEFCASE = "briefcase" PERSON = "person" MATURITY_LEVEL = "maturity_level" - ROLE = "role" + COMMON_ROLE = "common_role" class BaseObject(BaseModel): diff --git a/csfunctions/objects/role.py b/csfunctions/objects/common_role.py similarity index 84% rename from csfunctions/objects/role.py rename to csfunctions/objects/common_role.py index e30820f..042ed95 100644 --- a/csfunctions/objects/role.py +++ b/csfunctions/objects/common_role.py @@ -5,12 +5,12 @@ from csfunctions.objects.base import BaseObject, ObjectType -class Role(BaseObject): +class CommonRole(BaseObject): """ A Common (global) Role that can be assigned to a Person. """ - object_type: Literal[ObjectType.ROLE] = ObjectType.ROLE + object_type: Literal[ObjectType.COMMON_ROLE] = ObjectType.COMMON_ROLE role_id: str = Field(..., description="Role ID") name_de: str | None = Field(None, description="Name DE") diff --git a/docs/reference/objects.md b/docs/reference/objects.md index fb5c809..e31c73f 100644 --- a/docs/reference/objects.md +++ b/docs/reference/objects.md @@ -246,6 +246,20 @@ A change request of the ECM module. Shares all attributes of its base class `csf |cdb_mpersno|str|Last Modified by| |cdb_mdate|datetime \| None|Last Modified on| +## CommonRole +`csfunctions.objects.CommonRole` + +A Common (global) Role that can be assigned to a Person. + +|Attribute|Type|Description| +|-|-|-| +|role_id|str|Role ID| +|name_de|str \| None|Name DE| +|name_en|str \| None|Name EN| +|name_ja|str \| None|Name JA| +|name_zh|str \| None|Name ZH| +|cdb_object_id|str \| None|Object ID| + ## Document `csfunctions.objects.Document` @@ -873,20 +887,6 @@ An objects property, used by classification. |e_mail|str \| None|Email| |telefon|str \| None|Phone| -## Role -`csfunctions.objects.Role` - -A Common (global) Role that can be assigned to a Person. - -|Attribute|Type|Description| -|-|-|-| -|role_id|str|Role ID| -|name_de|str \| None|Name DE| -|name_en|str \| None|Name EN| -|name_ja|str \| None|Name JA| -|name_zh|str \| None|Name ZH| -|cdb_object_id|str \| None|Object ID| - ## Workflow `csfunctions.objects.Workflow` diff --git a/docs/release_notes.md b/docs/release_notes.md index e574a56..157b609 100644 --- a/docs/release_notes.md +++ b/docs/release_notes.md @@ -4,7 +4,7 @@ hide: --- ### Version next -- Feat: Add Role object (Common Roles only) +- Feat: Add CommonRole object ### Version 0.27.0 - Feat: Add part_blocked and document_blocked events