From bb2cf961585a040abd90957ae07c15058b59e40c Mon Sep 17 00:00:00 2001 From: SDK Generator Bot Date: Tue, 28 Oct 2025 13:40:26 +0000 Subject: [PATCH 1/2] Generate resourcemanager --- .../src/stackit/resourcemanager/__init__.py | 4 + .../resourcemanager/models/__init__.py | 1 + .../models/container_search_result.py | 113 ++++++++++++++++++ 3 files changed, 118 insertions(+) create mode 100644 services/resourcemanager/src/stackit/resourcemanager/models/container_search_result.py diff --git a/services/resourcemanager/src/stackit/resourcemanager/__init__.py b/services/resourcemanager/src/stackit/resourcemanager/__init__.py index 93907345e..4db93aab6 100644 --- a/services/resourcemanager/src/stackit/resourcemanager/__init__.py +++ b/services/resourcemanager/src/stackit/resourcemanager/__init__.py @@ -28,6 +28,7 @@ "ApiKeyError", "ApiAttributeError", "ApiException", + "ContainerSearchResult", "CreateFolderPayload", "CreateProjectPayload", "ErrorResponse", @@ -65,6 +66,9 @@ from stackit.resourcemanager.exceptions import OpenApiException as OpenApiException # import models into sdk package +from stackit.resourcemanager.models.container_search_result import ( + ContainerSearchResult as ContainerSearchResult, +) from stackit.resourcemanager.models.create_folder_payload import ( CreateFolderPayload as CreateFolderPayload, ) diff --git a/services/resourcemanager/src/stackit/resourcemanager/models/__init__.py b/services/resourcemanager/src/stackit/resourcemanager/models/__init__.py index 2fcfe0a06..5bf4eb3ec 100644 --- a/services/resourcemanager/src/stackit/resourcemanager/models/__init__.py +++ b/services/resourcemanager/src/stackit/resourcemanager/models/__init__.py @@ -14,6 +14,7 @@ # import models into model package +from stackit.resourcemanager.models.container_search_result import ContainerSearchResult from stackit.resourcemanager.models.create_folder_payload import CreateFolderPayload from stackit.resourcemanager.models.create_project_payload import CreateProjectPayload from stackit.resourcemanager.models.error_response import ErrorResponse diff --git a/services/resourcemanager/src/stackit/resourcemanager/models/container_search_result.py b/services/resourcemanager/src/stackit/resourcemanager/models/container_search_result.py new file mode 100644 index 000000000..e3adbf5bc --- /dev/null +++ b/services/resourcemanager/src/stackit/resourcemanager/models/container_search_result.py @@ -0,0 +1,113 @@ +# coding: utf-8 + +""" + Resource Manager API + + API v2 to manage resource containers - organizations, folders, projects incl. labels ### Resource Management STACKIT resource management handles the terms _Organization_, _Folder_, _Project_, _Label_, and the hierarchical structure between them. Technically, organizations, folders, and projects are _Resource Containers_ to which a _Label_ can be attached to. The STACKIT _Resource Manager_ provides CRUD endpoints to query and to modify the state. ### Organizations STACKIT organizations are the base element to create and to use cloud-resources. An organization is bound to one customer account. Organizations have a lifecycle. - Organizations are always the root node in resource hierarchy and do not have a parent ### Projects STACKIT projects are needed to use cloud-resources. Projects serve as wrapper for underlying technical structures and processes. Projects have a lifecycle. Projects compared to folders may have different policies. - Projects are optional, but mandatory for cloud-resource usage - A project can be created having either an organization, or a folder as parent - A project must not have a project as parent - Project names under the same parent must not be unique - Root organization cannot be changed ### Label STACKIT labels are key-value pairs including a resource container reference. Labels can be defined and attached freely to resource containers by which resources can be organized and queried. - Policy-based, immutable labels may exists + + The version of the OpenAPI document: 2.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations + +import json +import pprint +from typing import Any, ClassVar, Dict, List, Optional, Set + +from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator +from typing_extensions import Self + +from stackit.resourcemanager.models.lifecycle_state import LifecycleState + + +class ContainerSearchResult(BaseModel): + """ + ContainerSearchResult + """ # noqa: E501 + + container_id: StrictStr = Field(description="Globally unique user-friendly identifier.", alias="containerId") + container_type: StrictStr = Field(description="Resource container type.", alias="containerType") + id: StrictStr = Field(description="Globally unique identifier.") + lifecycle_state: Optional[LifecycleState] = Field(default=None, alias="lifecycleState") + name: StrictStr = Field(description="Resource container name.") + organization_id: Optional[StrictStr] = Field( + default=None, description="Id of the organization the container is in.", alias="organizationId" + ) + __properties: ClassVar[List[str]] = [ + "containerId", + "containerType", + "id", + "lifecycleState", + "name", + "organizationId", + ] + + @field_validator("container_type") + def container_type_validate_enum(cls, value): + """Validates the enum""" + if value not in set(["PROJECT", "FOLDER"]): + raise ValueError("must be one of enum values ('PROJECT', 'FOLDER')") + return value + + model_config = ConfigDict( + populate_by_name=True, + validate_assignment=True, + protected_namespaces=(), + ) + + def to_str(self) -> str: + """Returns the string representation of the model using alias""" + return pprint.pformat(self.model_dump(by_alias=True)) + + def to_json(self) -> str: + """Returns the JSON representation of the model using alias""" + # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead + return json.dumps(self.to_dict()) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of ContainerSearchResult from a JSON string""" + return cls.from_dict(json.loads(json_str)) + + def to_dict(self) -> Dict[str, Any]: + """Return the dictionary representation of the model using alias. + + This has the following differences from calling pydantic's + `self.model_dump(by_alias=True)`: + + * `None` is only added to the output dict for nullable fields that + were set at model initialization. Other fields with value `None` + are ignored. + """ + excluded_fields: Set[str] = set([]) + + _dict = self.model_dump( + by_alias=True, + exclude=excluded_fields, + exclude_none=True, + ) + return _dict + + @classmethod + def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: + """Create an instance of ContainerSearchResult from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "containerId": obj.get("containerId"), + "containerType": obj.get("containerType"), + "id": obj.get("id"), + "lifecycleState": obj.get("lifecycleState"), + "name": obj.get("name"), + "organizationId": obj.get("organizationId"), + } + ) + return _obj From 859baa4d57bc513984b5eb45ecaa3f52cca0f2aa Mon Sep 17 00:00:00 2001 From: Ruben Hoenle Date: Wed, 29 Oct 2025 09:14:16 +0100 Subject: [PATCH 2/2] add changelog entries --- CHANGELOG.md | 7 +++++-- services/resourcemanager/CHANGELOG.md | 3 +++ services/resourcemanager/pyproject.toml | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 837e91f03..2844a9035 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,8 +25,11 @@ - **Bugfix:** Prevent year 0 timestamp issue - `objectstorage`: [v1.2.1](services/objectstorage/CHANGELOG.md#v121) - **Bugfix:** Prevent year 0 timestamp issue -- `resourcemanager`: [v0.6.1](services/resourcemanager/CHANGELOG.md#v061) - - **Bugfix:** Prevent year 0 timestamp issue +- `resourcemanager`: + - [v0.7.0](services/resourcemanager/CHANGELOG.md#v070) + - **Feature:** New model class `ContainerSearchResult` + - [v0.6.1](services/resourcemanager/CHANGELOG.md#v061) + - **Bugfix:** Prevent year 0 timestamp issue - `scf`: [v0.2.1](services/scf/CHANGELOG.md#v021) - **Bugfix:** Prevent year 0 timestamp issue - `serviceaccount`: [v0.4.2](services/serviceaccount/CHANGELOG.md#v042) diff --git a/services/resourcemanager/CHANGELOG.md b/services/resourcemanager/CHANGELOG.md index 1616cb0a9..a6ec98816 100644 --- a/services/resourcemanager/CHANGELOG.md +++ b/services/resourcemanager/CHANGELOG.md @@ -1,3 +1,6 @@ +## v0.7.0 +- **Feature:** New model class `ContainerSearchResult` + ## v0.6.1 - **Bugfix:** Prevent year 0 timestamp issue diff --git a/services/resourcemanager/pyproject.toml b/services/resourcemanager/pyproject.toml index a3b76a45f..999d85f8c 100644 --- a/services/resourcemanager/pyproject.toml +++ b/services/resourcemanager/pyproject.toml @@ -3,7 +3,7 @@ name = "stackit-resourcemanager" [tool.poetry] name = "stackit-resourcemanager" -version = "v0.6.1" +version = "v0.7.0" authors = [ "STACKIT Developer Tools ", ]