From f980748b5e6f3135321a5383725ccbb394250ad5 Mon Sep 17 00:00:00 2001 From: SDK Generator Bot Date: Fri, 18 Sep 2026 12:52:04 +0000 Subject: [PATCH] Generate objectstorage --- services/objectstorage/oas_commit | 2 +- .../src/stackit/objectstorage/__init__.py | 4 + .../stackit/objectstorage/api/default_api.py | 39 +++++++ .../stackit/objectstorage/models/__init__.py | 1 + .../objectstorage/models/access_key.py | 7 +- .../models/create_access_key_payload.py | 5 + .../objectstorage/models/rate_limit_error.py | 109 ++++++++++++++++++ 7 files changed, 165 insertions(+), 2 deletions(-) create mode 100644 services/objectstorage/src/stackit/objectstorage/models/rate_limit_error.py diff --git a/services/objectstorage/oas_commit b/services/objectstorage/oas_commit index a978700c7..603281f10 100644 --- a/services/objectstorage/oas_commit +++ b/services/objectstorage/oas_commit @@ -1 +1 @@ -467fe4d305e48699c34835e45fd1c7b486be01d2 +bbadf27611358e3e0d7cfc75620cc49bcd53dbee diff --git a/services/objectstorage/src/stackit/objectstorage/__init__.py b/services/objectstorage/src/stackit/objectstorage/__init__.py index 5ea1abb19..3cc44c44a 100644 --- a/services/objectstorage/src/stackit/objectstorage/__init__.py +++ b/services/objectstorage/src/stackit/objectstorage/__init__.py @@ -53,6 +53,7 @@ "LocationInner", "ProjectScope", "ProjectStatus", + "RateLimitError", "RetentionMode", "SetDefaultRetentionPayload", "ValidationError", @@ -137,6 +138,9 @@ from stackit.objectstorage.models.location_inner import LocationInner as LocationInner from stackit.objectstorage.models.project_scope import ProjectScope as ProjectScope from stackit.objectstorage.models.project_status import ProjectStatus as ProjectStatus +from stackit.objectstorage.models.rate_limit_error import ( + RateLimitError as RateLimitError, +) from stackit.objectstorage.models.retention_mode import RetentionMode as RetentionMode from stackit.objectstorage.models.set_default_retention_payload import ( SetDefaultRetentionPayload as SetDefaultRetentionPayload, diff --git a/services/objectstorage/src/stackit/objectstorage/api/default_api.py b/services/objectstorage/src/stackit/objectstorage/api/default_api.py index 0d64897cd..3b1615246 100644 --- a/services/objectstorage/src/stackit/objectstorage/api/default_api.py +++ b/services/objectstorage/src/stackit/objectstorage/api/default_api.py @@ -145,6 +145,7 @@ def create_access_key( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -222,6 +223,7 @@ def create_access_key_with_http_info( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -299,6 +301,7 @@ def create_access_key_without_preload_content( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -448,6 +451,7 @@ def create_bucket( "404": "ErrorMessage", "409": "ErrorMessage", "422": "ErrorMessage", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -532,6 +536,7 @@ def create_bucket_with_http_info( "404": "ErrorMessage", "409": "ErrorMessage", "422": "ErrorMessage", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -616,6 +621,7 @@ def create_bucket_without_preload_content( "404": "ErrorMessage", "409": "ErrorMessage", "422": "ErrorMessage", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -996,6 +1002,7 @@ def create_credentials_group( "404": "ErrorMessage", "409": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -1069,6 +1076,7 @@ def create_credentials_group_with_http_info( "404": "ErrorMessage", "409": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -1142,6 +1150,7 @@ def create_credentials_group_without_preload_content( "404": "ErrorMessage", "409": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -1280,6 +1289,7 @@ def delete_access_key( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -1358,6 +1368,7 @@ def delete_access_key_with_http_info( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -1436,6 +1447,7 @@ def delete_access_key_without_preload_content( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -1567,6 +1579,7 @@ def delete_bucket( "401": "ErrorMessage", "404": "ErrorMessage", "422": "ErrorMessage", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -1641,6 +1654,7 @@ def delete_bucket_with_http_info( "401": "ErrorMessage", "404": "ErrorMessage", "422": "ErrorMessage", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -1715,6 +1729,7 @@ def delete_bucket_without_preload_content( "401": "ErrorMessage", "404": "ErrorMessage", "422": "ErrorMessage", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -2089,6 +2104,7 @@ def delete_credentials_group( "401": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -2161,6 +2177,7 @@ def delete_credentials_group_with_http_info( "401": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -2233,6 +2250,7 @@ def delete_credentials_group_without_preload_content( "401": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -2627,6 +2645,7 @@ def disable_service( "404": "ErrorMessage", "409": "ErrorMessage", "422": "ErrorMessage", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -2698,6 +2717,7 @@ def disable_service_with_http_info( "404": "ErrorMessage", "409": "ErrorMessage", "422": "ErrorMessage", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -2769,6 +2789,7 @@ def disable_service_without_preload_content( "404": "ErrorMessage", "409": "ErrorMessage", "422": "ErrorMessage", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -2888,6 +2909,7 @@ def enable_service( "403": "ErrorMessage", "409": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -2958,6 +2980,7 @@ def enable_service_with_http_info( "403": "ErrorMessage", "409": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -3028,6 +3051,7 @@ def enable_service_without_preload_content( "403": "ErrorMessage", "409": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -3152,6 +3176,7 @@ def get_bucket( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -3227,6 +3252,7 @@ def get_bucket_with_http_info( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -3302,6 +3328,7 @@ def get_bucket_without_preload_content( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -4206,6 +4233,7 @@ def get_service_status( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -4275,6 +4303,7 @@ def get_service_status_with_http_info( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -4344,6 +4373,7 @@ def get_service_status_without_preload_content( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -4466,6 +4496,7 @@ def list_access_keys( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -4539,6 +4570,7 @@ def list_access_keys_with_http_info( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -4612,6 +4644,7 @@ def list_access_keys_without_preload_content( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -4735,6 +4768,7 @@ def list_buckets( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -4804,6 +4838,7 @@ def list_buckets_with_http_info( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -4873,6 +4908,7 @@ def list_buckets_without_preload_content( "403": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -4990,6 +5026,7 @@ def list_credentials_groups( "401": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -5058,6 +5095,7 @@ def list_credentials_groups_with_http_info( "401": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) @@ -5126,6 +5164,7 @@ def list_credentials_groups_without_preload_content( "401": "ErrorMessage", "404": "ErrorMessage", "422": "HTTPValidationError", + "429": "RateLimitError", "500": "ErrorMessage", } response_data = self.api_client.call_api(*_param, _request_timeout=_request_timeout) diff --git a/services/objectstorage/src/stackit/objectstorage/models/__init__.py b/services/objectstorage/src/stackit/objectstorage/models/__init__.py index b28985e2b..1043bfb93 100644 --- a/services/objectstorage/src/stackit/objectstorage/models/__init__.py +++ b/services/objectstorage/src/stackit/objectstorage/models/__init__.py @@ -63,6 +63,7 @@ from stackit.objectstorage.models.location_inner import LocationInner from stackit.objectstorage.models.project_scope import ProjectScope from stackit.objectstorage.models.project_status import ProjectStatus +from stackit.objectstorage.models.rate_limit_error import RateLimitError from stackit.objectstorage.models.retention_mode import RetentionMode from stackit.objectstorage.models.set_default_retention_payload import ( SetDefaultRetentionPayload, diff --git a/services/objectstorage/src/stackit/objectstorage/models/access_key.py b/services/objectstorage/src/stackit/objectstorage/models/access_key.py index b8b43ebec..b940e8542 100644 --- a/services/objectstorage/src/stackit/objectstorage/models/access_key.py +++ b/services/objectstorage/src/stackit/objectstorage/models/access_key.py @@ -28,7 +28,7 @@ class AccessKey(BaseModel): """ # noqa: E501 display_name: StrictStr = Field(alias="displayName") - expires: StrictStr + expires: Optional[StrictStr] key_id: StrictStr = Field( description="Identifies the pair of access key and secret access key for deletion", alias="keyId" ) @@ -71,6 +71,11 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) + # set to None if expires (nullable) is None + # and model_fields_set contains the field + if self.expires is None and "expires" in self.model_fields_set: + _dict["expires"] = None + return _dict @classmethod diff --git a/services/objectstorage/src/stackit/objectstorage/models/create_access_key_payload.py b/services/objectstorage/src/stackit/objectstorage/models/create_access_key_payload.py index 1b3a15af4..08e95dd05 100644 --- a/services/objectstorage/src/stackit/objectstorage/models/create_access_key_payload.py +++ b/services/objectstorage/src/stackit/objectstorage/models/create_access_key_payload.py @@ -82,6 +82,11 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) + # set to None if expires (nullable) is None + # and model_fields_set contains the field + if self.expires is None and "expires" in self.model_fields_set: + _dict["expires"] = None + return _dict @classmethod diff --git a/services/objectstorage/src/stackit/objectstorage/models/rate_limit_error.py b/services/objectstorage/src/stackit/objectstorage/models/rate_limit_error.py new file mode 100644 index 000000000..e84a5d7e6 --- /dev/null +++ b/services/objectstorage/src/stackit/objectstorage/models/rate_limit_error.py @@ -0,0 +1,109 @@ +# coding: utf-8 + +""" +STACKIT Object Storage API + +STACKIT API to manage the Object Storage + +The version of the OpenAPI document: 2.0.1 +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, StrictInt, StrictStr, field_validator +from pydantic_core import to_jsonable_python +from typing_extensions import Self + + +class RateLimitError(BaseModel): + """ + RateLimitError + """ # noqa: E501 + + error: Optional[StrictStr] = None + message: Optional[StrictStr] = None + path: Optional[StrictStr] = None + status: Optional[StrictInt] = None + timestamp: Optional[datetime] = None + __properties: ClassVar[List[str]] = ["error", "message", "path", "status", "timestamp"] + + @field_validator("timestamp", mode="before") + def timestamp_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( + validate_by_name=True, + validate_by_alias=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""" + return json.dumps(to_jsonable_python(self.to_dict())) + + @classmethod + def from_json(cls, json_str: str) -> Optional[Self]: + """Create an instance of RateLimitError 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 RateLimitError from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate( + { + "error": obj.get("error"), + "message": obj.get("message"), + "path": obj.get("path"), + "status": obj.get("status"), + "timestamp": obj.get("timestamp"), + } + ) + return _obj