diff --git a/services/scf/src/stackit/scf/__init__.py b/services/scf/src/stackit/scf/__init__.py index 17da32a0..715085fa 100644 --- a/services/scf/src/stackit/scf/__init__.py +++ b/services/scf/src/stackit/scf/__init__.py @@ -66,6 +66,7 @@ "SpaceRoleCreateBffResponse", "SpaceRoleCreateResponse", "SpaceRoleType", + "SpaceWithIsolationSegment", "SpacesList", "UpdateOrganizationPayload", "UpdateSpacePayload", @@ -162,6 +163,9 @@ SpaceRoleCreateResponse as SpaceRoleCreateResponse, ) from stackit.scf.models.space_role_type import SpaceRoleType as SpaceRoleType +from stackit.scf.models.space_with_isolation_segment import ( + SpaceWithIsolationSegment as SpaceWithIsolationSegment, +) from stackit.scf.models.spaces_list import SpacesList as SpacesList from stackit.scf.models.update_organization_payload import ( UpdateOrganizationPayload as UpdateOrganizationPayload, diff --git a/services/scf/src/stackit/scf/models/__init__.py b/services/scf/src/stackit/scf/models/__init__.py index 70babd0f..7d2ce44f 100644 --- a/services/scf/src/stackit/scf/models/__init__.py +++ b/services/scf/src/stackit/scf/models/__init__.py @@ -56,6 +56,7 @@ from stackit.scf.models.space_role_create_bff_response import SpaceRoleCreateBffResponse from stackit.scf.models.space_role_create_response import SpaceRoleCreateResponse from stackit.scf.models.space_role_type import SpaceRoleType +from stackit.scf.models.space_with_isolation_segment import SpaceWithIsolationSegment from stackit.scf.models.spaces_list import SpacesList from stackit.scf.models.update_organization_payload import UpdateOrganizationPayload from stackit.scf.models.update_space_payload import UpdateSpacePayload diff --git a/services/scf/src/stackit/scf/models/space_with_isolation_segment.py b/services/scf/src/stackit/scf/models/space_with_isolation_segment.py new file mode 100644 index 00000000..5f686dc2 --- /dev/null +++ b/services/scf/src/stackit/scf/models/space_with_isolation_segment.py @@ -0,0 +1,140 @@ +# coding: utf-8 + +""" + STACKIT Cloud Foundry API + + API endpoints for managing STACKIT Cloud Foundry + + The version of the OpenAPI document: 1.0.0 + Contact: support@stackit.cloud + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 + +from __future__ import annotations + +import json +import pprint +import re # noqa: F401 +from datetime import datetime +from typing import Any, ClassVar, Dict, List, Optional, Set + +from pydantic import BaseModel, ConfigDict, Field, StrictStr, field_validator +from typing_extensions import Self + + +class SpaceWithIsolationSegment(BaseModel): + """ + A Space resource that includes its assigned Isolation Segment details. + """ # noqa: E501 + + created_at: datetime = Field(alias="createdAt") + guid: StrictStr + name: StrictStr + org_id: StrictStr = Field(alias="orgId") + platform_id: StrictStr = Field(alias="platformId") + project_id: StrictStr = Field(alias="projectId") + region: StrictStr + updated_at: datetime = Field(alias="updatedAt") + isolation_segment_id: Optional[StrictStr] = Field(default=None, alias="isolationSegmentId") + __properties: ClassVar[List[str]] = [ + "createdAt", + "guid", + "name", + "orgId", + "platformId", + "projectId", + "region", + "updatedAt", + "isolationSegmentId", + ] + + @field_validator("created_at", mode="before") + def created_at_change_year_zero_to_one(cls, value): + """Workaround which prevents year 0 issue""" + if isinstance(value, str): + # Check for year "0000" at the beginning of the string + # This assumes common date formats like YYYY-MM-DDTHH:MM:SS+00:00 or YYYY-MM-DDTHH:MM:SSZ + if value.startswith("0000-01-01T") and re.match( + r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\+\d{2}:\d{2}|Z)$", value + ): + # Workaround: Replace "0000" with "0001" + return "0001" + value[4:] # Take "0001" and append the rest of the string + return value + + @field_validator("updated_at", mode="before") + def updated_at_change_year_zero_to_one(cls, value): + """Workaround which prevents year 0 issue""" + if isinstance(value, str): + # Check for year "0000" at the beginning of the string + # This assumes common date formats like YYYY-MM-DDTHH:MM:SS+00:00 or YYYY-MM-DDTHH:MM:SSZ + if value.startswith("0000-01-01T") and re.match( + r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\+\d{2}:\d{2}|Z)$", value + ): + # Workaround: Replace "0000" with "0001" + return "0001" + value[4:] # Take "0001" and append the rest of the string + 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 SpaceWithIsolationSegment 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 SpaceWithIsolationSegment from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "createdAt": obj.get("createdAt"), + "guid": obj.get("guid"), + "name": obj.get("name"), + "orgId": obj.get("orgId"), + "platformId": obj.get("platformId"), + "projectId": obj.get("projectId"), + "region": obj.get("region"), + "updatedAt": obj.get("updatedAt"), + "isolationSegmentId": obj.get("isolationSegmentId"), + } + ) + return _obj