From b81bd49e7c2bcc3a047710f347b6d4bc03c54980 Mon Sep 17 00:00:00 2001 From: SDK Generator Bot Date: Tue, 27 May 2025 08:06:40 +0000 Subject: [PATCH 1/2] Generate cdn --- services/cdn/src/stackit/cdn/__init__.py | 2 + .../cdn/src/stackit/cdn/models/__init__.py | 2 + services/cdn/src/stackit/cdn/models/config.py | 15 +++- .../src/stackit/cdn/models/config_patch.py | 15 +++- .../cdn/models/create_distribution_payload.py | 7 ++ .../cdn/src/stackit/cdn/models/optimizer.py | 83 +++++++++++++++++++ .../src/stackit/cdn/models/optimizer_patch.py | 81 ++++++++++++++++++ 7 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 services/cdn/src/stackit/cdn/models/optimizer.py create mode 100644 services/cdn/src/stackit/cdn/models/optimizer_patch.py diff --git a/services/cdn/src/stackit/cdn/__init__.py b/services/cdn/src/stackit/cdn/__init__.py index ea029ae12..8d89dc1ae 100644 --- a/services/cdn/src/stackit/cdn/__init__.py +++ b/services/cdn/src/stackit/cdn/__init__.py @@ -72,6 +72,8 @@ from stackit.cdn.models.http_backend import HttpBackend from stackit.cdn.models.http_backend_patch import HttpBackendPatch from stackit.cdn.models.list_distributions_response import ListDistributionsResponse +from stackit.cdn.models.optimizer import Optimizer +from stackit.cdn.models.optimizer_patch import OptimizerPatch from stackit.cdn.models.patch_distribution_payload import PatchDistributionPayload from stackit.cdn.models.patch_distribution_response import PatchDistributionResponse from stackit.cdn.models.purge_cache_payload import PurgeCachePayload diff --git a/services/cdn/src/stackit/cdn/models/__init__.py b/services/cdn/src/stackit/cdn/models/__init__.py index a02eeb05e..cfbbda198 100644 --- a/services/cdn/src/stackit/cdn/models/__init__.py +++ b/services/cdn/src/stackit/cdn/models/__init__.py @@ -53,6 +53,8 @@ from stackit.cdn.models.http_backend import HttpBackend from stackit.cdn.models.http_backend_patch import HttpBackendPatch from stackit.cdn.models.list_distributions_response import ListDistributionsResponse +from stackit.cdn.models.optimizer import Optimizer +from stackit.cdn.models.optimizer_patch import OptimizerPatch from stackit.cdn.models.patch_distribution_payload import PatchDistributionPayload from stackit.cdn.models.patch_distribution_response import PatchDistributionResponse from stackit.cdn.models.purge_cache_payload import PurgeCachePayload diff --git a/services/cdn/src/stackit/cdn/models/config.py b/services/cdn/src/stackit/cdn/models/config.py index 369b796dd..76a581195 100644 --- a/services/cdn/src/stackit/cdn/models/config.py +++ b/services/cdn/src/stackit/cdn/models/config.py @@ -21,6 +21,7 @@ from typing_extensions import Annotated, Self from stackit.cdn.models.config_backend import ConfigBackend +from stackit.cdn.models.optimizer import Optimizer from stackit.cdn.models.region import Region @@ -43,8 +44,16 @@ class Config(BaseModel): description="Sets the monthly limit of bandwidth in bytes that the pullzone is allowed to use. ", alias="monthlyLimitBytes", ) + optimizer: Optional[Optimizer] = None regions: Annotated[List[Region], Field(min_length=1)] - __properties: ClassVar[List[str]] = ["backend", "blockedCountries", "blockedIPs", "monthlyLimitBytes", "regions"] + __properties: ClassVar[List[str]] = [ + "backend", + "blockedCountries", + "blockedIPs", + "monthlyLimitBytes", + "optimizer", + "regions", + ] model_config = ConfigDict( populate_by_name=True, @@ -86,6 +95,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of backend if self.backend: _dict["backend"] = self.backend.to_dict() + # override the default output from pydantic by calling `to_dict()` of optimizer + if self.optimizer: + _dict["optimizer"] = self.optimizer.to_dict() # set to None if monthly_limit_bytes (nullable) is None # and model_fields_set contains the field if self.monthly_limit_bytes is None and "monthly_limit_bytes" in self.model_fields_set: @@ -108,6 +120,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "blockedCountries": obj.get("blockedCountries"), "blockedIPs": obj.get("blockedIPs"), "monthlyLimitBytes": obj.get("monthlyLimitBytes"), + "optimizer": Optimizer.from_dict(obj["optimizer"]) if obj.get("optimizer") is not None else None, "regions": obj.get("regions"), } ) diff --git a/services/cdn/src/stackit/cdn/models/config_patch.py b/services/cdn/src/stackit/cdn/models/config_patch.py index e3da5bde3..1d51c6575 100644 --- a/services/cdn/src/stackit/cdn/models/config_patch.py +++ b/services/cdn/src/stackit/cdn/models/config_patch.py @@ -21,6 +21,7 @@ from typing_extensions import Annotated, Self from stackit.cdn.models.config_patch_backend import ConfigPatchBackend +from stackit.cdn.models.optimizer_patch import OptimizerPatch from stackit.cdn.models.region import Region @@ -45,8 +46,16 @@ class ConfigPatch(BaseModel): description="Sets the monthly limit of bandwidth in bytes that the pullzone is allowed to use. ", alias="monthlyLimitBytes", ) + optimizer: Optional[OptimizerPatch] = None regions: Optional[Annotated[List[Region], Field(min_length=1)]] = None - __properties: ClassVar[List[str]] = ["backend", "blockedCountries", "blockedIPs", "monthlyLimitBytes", "regions"] + __properties: ClassVar[List[str]] = [ + "backend", + "blockedCountries", + "blockedIPs", + "monthlyLimitBytes", + "optimizer", + "regions", + ] model_config = ConfigDict( populate_by_name=True, @@ -88,6 +97,9 @@ def to_dict(self) -> Dict[str, Any]: # override the default output from pydantic by calling `to_dict()` of backend if self.backend: _dict["backend"] = self.backend.to_dict() + # override the default output from pydantic by calling `to_dict()` of optimizer + if self.optimizer: + _dict["optimizer"] = self.optimizer.to_dict() # set to None if monthly_limit_bytes (nullable) is None # and model_fields_set contains the field if self.monthly_limit_bytes is None and "monthly_limit_bytes" in self.model_fields_set: @@ -110,6 +122,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "blockedCountries": obj.get("blockedCountries"), "blockedIPs": obj.get("blockedIPs"), "monthlyLimitBytes": obj.get("monthlyLimitBytes"), + "optimizer": OptimizerPatch.from_dict(obj["optimizer"]) if obj.get("optimizer") is not None else None, "regions": obj.get("regions"), } ) diff --git a/services/cdn/src/stackit/cdn/models/create_distribution_payload.py b/services/cdn/src/stackit/cdn/models/create_distribution_payload.py index 8fe8df57e..0a6d69e6d 100644 --- a/services/cdn/src/stackit/cdn/models/create_distribution_payload.py +++ b/services/cdn/src/stackit/cdn/models/create_distribution_payload.py @@ -20,6 +20,7 @@ from pydantic import BaseModel, ConfigDict, Field, StrictStr from typing_extensions import Annotated, Self +from stackit.cdn.models.optimizer import Optimizer from stackit.cdn.models.region import Region @@ -48,6 +49,7 @@ class CreateDistributionPayload(BaseModel): description="Sets the monthly limit of bandwidth in bytes that the pullzone is allowed to use. ", alias="monthlyLimitBytes", ) + optimizer: Optional[Optimizer] = None origin_request_headers: Optional[Dict[str, StrictStr]] = Field( default=None, description="Headers that will be sent with every request to the configured origin. WARNING: Do not store sensitive values in the headers. The data is stores as plain text. ", @@ -65,6 +67,7 @@ class CreateDistributionPayload(BaseModel): "blockedIPs", "intentId", "monthlyLimitBytes", + "optimizer", "originRequestHeaders", "originUrl", "regions", @@ -107,6 +110,9 @@ def to_dict(self) -> Dict[str, Any]: exclude=excluded_fields, exclude_none=True, ) + # override the default output from pydantic by calling `to_dict()` of optimizer + if self.optimizer: + _dict["optimizer"] = self.optimizer.to_dict() return _dict @classmethod @@ -124,6 +130,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "blockedIPs": obj.get("blockedIPs"), "intentId": obj.get("intentId"), "monthlyLimitBytes": obj.get("monthlyLimitBytes"), + "optimizer": Optimizer.from_dict(obj["optimizer"]) if obj.get("optimizer") is not None else None, "originRequestHeaders": obj.get("originRequestHeaders"), "originUrl": obj.get("originUrl"), "regions": obj.get("regions"), diff --git a/services/cdn/src/stackit/cdn/models/optimizer.py b/services/cdn/src/stackit/cdn/models/optimizer.py new file mode 100644 index 000000000..a8505845f --- /dev/null +++ b/services/cdn/src/stackit/cdn/models/optimizer.py @@ -0,0 +1,83 @@ +# coding: utf-8 + +""" + CDN API + + API used to create and manage your CDN distributions. + + The version of the OpenAPI document: 1beta.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 docstring might be too long + +from __future__ import annotations + +import json +import pprint +from typing import Any, ClassVar, Dict, List, Optional, Set + +from pydantic import BaseModel, ConfigDict, Field, StrictBool +from typing_extensions import Self + + +class Optimizer(BaseModel): + """ + Optimizer is paid feature, a real-time on the fly image manipulation and optimization service that automatically optimizes your images for faster image delivery. + """ + + enabled: StrictBool = Field( + description="Determines if the optimizer should be enabled for this distribution and incurs a monthly fee" + ) + __properties: ClassVar[List[str]] = ["enabled"] + + 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 Optimizer 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 Optimizer from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"enabled": obj.get("enabled")}) + return _obj diff --git a/services/cdn/src/stackit/cdn/models/optimizer_patch.py b/services/cdn/src/stackit/cdn/models/optimizer_patch.py new file mode 100644 index 000000000..15880a00d --- /dev/null +++ b/services/cdn/src/stackit/cdn/models/optimizer_patch.py @@ -0,0 +1,81 @@ +# coding: utf-8 + +""" + CDN API + + API used to create and manage your CDN distributions. + + The version of the OpenAPI document: 1beta.0.0 + Generated by OpenAPI Generator (https://openapi-generator.tech) + + Do not edit the class manually. +""" # noqa: E501 docstring might be too long + +from __future__ import annotations + +import json +import pprint +from typing import Any, ClassVar, Dict, List, Optional, Set + +from pydantic import BaseModel, ConfigDict, StrictBool +from typing_extensions import Self + + +class OptimizerPatch(BaseModel): + """ + OptimizerPatch + """ + + enabled: Optional[StrictBool] = None + __properties: ClassVar[List[str]] = ["enabled"] + + 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 OptimizerPatch 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 OptimizerPatch from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"enabled": obj.get("enabled")}) + return _obj From 49db25dafab8edd0c4af7f2f9a373a088e3d3c94 Mon Sep 17 00:00:00 2001 From: Ruben Hoenle Date: Tue, 27 May 2025 14:55:51 +0200 Subject: [PATCH 2/2] add changelog entries --- CHANGELOG.md | 2 ++ services/cdn/CHANGELOG.md | 3 +++ services/cdn/pyproject.toml | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8ee55da1..0077a624f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,8 @@ - **Feature:** Added `ClusterError` - `sqlserverflex`: [v1.0.2](services/sqlserverflex/CHANGELOG.md#v102-2025-05-14) - **Feature:** Added new method `list_metrics` +- `cdn`: [v1.1.0](services/cdn/CHANGELOG.md#v110-2025-05-27) + - **Feature:** Add support for CDN Optimizer feature ## Release (2025-05-09) - `stackitmarketplace`: diff --git a/services/cdn/CHANGELOG.md b/services/cdn/CHANGELOG.md index 2b42f7a52..06134230c 100644 --- a/services/cdn/CHANGELOG.md +++ b/services/cdn/CHANGELOG.md @@ -1,3 +1,6 @@ +## v1.1.0 (2025-05-27) +- **Feature:** Add support for CDN Optimizer feature + ## v1.0.1 (2025-05-09) - **Feature:** Update user-agent header diff --git a/services/cdn/pyproject.toml b/services/cdn/pyproject.toml index 71e50a79e..42f7db108 100644 --- a/services/cdn/pyproject.toml +++ b/services/cdn/pyproject.toml @@ -3,7 +3,7 @@ name = "stackit-cdn" [tool.poetry] name = "stackit-cdn" -version = "v1.0.1" +version = "v1.1.0" authors = [ "STACKIT Developer Tools ", ]