Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

- `alb`: [v0.8.1](services/alb/CHANGELOG.md#v081)
- Update regular expressions to allow longer names
- `cdn`; [v2.3.0](services/cdn/CHANGELOG.md#v230)
- **Feature:** Add support for `redirects` in `config`, `config_patch` and `create_distribution_payload` models
- new related models `redirect_config`,` redirect_rule`, `matcher` and `match_condition`
- `loadbalancer`: [v0.8.1](services/loadbalancer/CHANGELOG.md#v081)
- Update regular expressions to allow longer names
- `runcommand`: [v1.1.1](services/runcommand/CHANGELOG.md#v111)
Expand Down
4 changes: 4 additions & 0 deletions services/cdn/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## v2.3.0
- **Feature:** Add support for `redirects` in `config`, `config_patch` and `create_distribution_payload` models
- new related models `redirect_config`,` redirect_rule`, `matcher` and `match_condition`

## v2.2.0
- **Feature:** Switch from `v1beta2` CDN API version to `v1` version.
- **Feature:** Add new function `GetLogsSearchFilters`
Expand Down
1 change: 1 addition & 0 deletions services/cdn/oas_commit
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cfcfc32bc1ae335acecd7bf7ffb60354fdc565ab
2 changes: 1 addition & 1 deletion services/cdn/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name = "stackit-cdn"

[tool.poetry]
name = "stackit-cdn"
version = "v2.2.0"
version = "v2.3.0"
authors = [
"STACKIT Developer Tools <developer-tools@stackit.cloud>",
]
Expand Down
8 changes: 8 additions & 0 deletions services/cdn/src/stackit/cdn/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@
"LokiLogSinkCreate",
"LokiLogSinkCredentials",
"LokiLogSinkPatch",
"MatchCondition",
"Matcher",
"Optimizer",
"OptimizerPatch",
"PatchDistributionPayload",
Expand All @@ -86,6 +88,8 @@
"PutCustomDomainPayloadCertificate",
"PutCustomDomainResponse",
"PutCustomDomainResponseCertificate",
"RedirectConfig",
"RedirectRule",
"Region",
"StatusError",
"WAFRuleAction",
Expand Down Expand Up @@ -231,6 +235,8 @@
LokiLogSinkCredentials as LokiLogSinkCredentials,
)
from stackit.cdn.models.loki_log_sink_patch import LokiLogSinkPatch as LokiLogSinkPatch
from stackit.cdn.models.match_condition import MatchCondition as MatchCondition
from stackit.cdn.models.matcher import Matcher as Matcher
from stackit.cdn.models.optimizer import Optimizer as Optimizer
from stackit.cdn.models.optimizer_patch import OptimizerPatch as OptimizerPatch
from stackit.cdn.models.patch_distribution_payload import (
Expand Down Expand Up @@ -260,6 +266,8 @@
from stackit.cdn.models.put_custom_domain_response_certificate import (
PutCustomDomainResponseCertificate as PutCustomDomainResponseCertificate,
)
from stackit.cdn.models.redirect_config import RedirectConfig as RedirectConfig
from stackit.cdn.models.redirect_rule import RedirectRule as RedirectRule
from stackit.cdn.models.region import Region as Region
from stackit.cdn.models.status_error import StatusError as StatusError
from stackit.cdn.models.waf_config import WafConfig as WafConfig
Expand Down
4 changes: 4 additions & 0 deletions services/cdn/src/stackit/cdn/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@
from stackit.cdn.models.loki_log_sink_create import LokiLogSinkCreate
from stackit.cdn.models.loki_log_sink_credentials import LokiLogSinkCredentials
from stackit.cdn.models.loki_log_sink_patch import LokiLogSinkPatch
from stackit.cdn.models.match_condition import MatchCondition
from stackit.cdn.models.matcher import Matcher
from stackit.cdn.models.optimizer import Optimizer
from stackit.cdn.models.optimizer_patch import OptimizerPatch
from stackit.cdn.models.patch_distribution_payload import PatchDistributionPayload
Expand All @@ -104,6 +106,8 @@
from stackit.cdn.models.put_custom_domain_response_certificate import (
PutCustomDomainResponseCertificate,
)
from stackit.cdn.models.redirect_config import RedirectConfig
from stackit.cdn.models.redirect_rule import RedirectRule
from stackit.cdn.models.region import Region
from stackit.cdn.models.status_error import StatusError
from stackit.cdn.models.waf_config import WafConfig
Expand Down
7 changes: 7 additions & 0 deletions services/cdn/src/stackit/cdn/models/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from stackit.cdn.models.config_backend import ConfigBackend
from stackit.cdn.models.loki_log_sink import LokiLogSink
from stackit.cdn.models.optimizer import Optimizer
from stackit.cdn.models.redirect_config import RedirectConfig
from stackit.cdn.models.region import Region
from stackit.cdn.models.waf_config import WafConfig

Expand Down Expand Up @@ -53,6 +54,7 @@ class Config(BaseModel):
alias="monthlyLimitBytes",
)
optimizer: Optional[Optimizer] = None
redirects: Optional[RedirectConfig] = None
regions: Annotated[List[Region], Field(min_length=1)]
waf: WafConfig
__properties: ClassVar[List[str]] = [
Expand All @@ -63,6 +65,7 @@ class Config(BaseModel):
"logSink",
"monthlyLimitBytes",
"optimizer",
"redirects",
"regions",
"waf",
]
Expand Down Expand Up @@ -113,6 +116,9 @@ def to_dict(self) -> Dict[str, Any]:
# override the default output from pydantic by calling `to_dict()` of optimizer
if self.optimizer:
_dict["optimizer"] = self.optimizer.to_dict()
# override the default output from pydantic by calling `to_dict()` of redirects
if self.redirects:
_dict["redirects"] = self.redirects.to_dict()
# override the default output from pydantic by calling `to_dict()` of waf
if self.waf:
_dict["waf"] = self.waf.to_dict()
Expand Down Expand Up @@ -146,6 +152,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"logSink": LokiLogSink.from_dict(obj["logSink"]) if obj.get("logSink") is not None else None,
"monthlyLimitBytes": obj.get("monthlyLimitBytes"),
"optimizer": Optimizer.from_dict(obj["optimizer"]) if obj.get("optimizer") is not None else None,
"redirects": RedirectConfig.from_dict(obj["redirects"]) if obj.get("redirects") is not None else None,
"regions": obj.get("regions"),
"waf": WafConfig.from_dict(obj["waf"]) if obj.get("waf") is not None else None,
}
Expand Down
7 changes: 7 additions & 0 deletions services/cdn/src/stackit/cdn/models/config_patch.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from stackit.cdn.models.config_patch_backend import ConfigPatchBackend
from stackit.cdn.models.loki_log_sink_patch import LokiLogSinkPatch
from stackit.cdn.models.optimizer_patch import OptimizerPatch
from stackit.cdn.models.redirect_config import RedirectConfig
from stackit.cdn.models.region import Region
from stackit.cdn.models.waf_config_patch import WafConfigPatch

Expand Down Expand Up @@ -55,6 +56,7 @@ class ConfigPatch(BaseModel):
alias="monthlyLimitBytes",
)
optimizer: Optional[OptimizerPatch] = None
redirects: Optional[RedirectConfig] = None
regions: Optional[Annotated[List[Region], Field(min_length=1)]] = None
waf: Optional[WafConfigPatch] = None
__properties: ClassVar[List[str]] = [
Expand All @@ -65,6 +67,7 @@ class ConfigPatch(BaseModel):
"logSink",
"monthlyLimitBytes",
"optimizer",
"redirects",
"regions",
"waf",
]
Expand Down Expand Up @@ -115,6 +118,9 @@ def to_dict(self) -> Dict[str, Any]:
# override the default output from pydantic by calling `to_dict()` of optimizer
if self.optimizer:
_dict["optimizer"] = self.optimizer.to_dict()
# override the default output from pydantic by calling `to_dict()` of redirects
if self.redirects:
_dict["redirects"] = self.redirects.to_dict()
# override the default output from pydantic by calling `to_dict()` of waf
if self.waf:
_dict["waf"] = self.waf.to_dict()
Expand Down Expand Up @@ -153,6 +159,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"logSink": LokiLogSinkPatch.from_dict(obj["logSink"]) if obj.get("logSink") is not None else None,
"monthlyLimitBytes": obj.get("monthlyLimitBytes"),
"optimizer": OptimizerPatch.from_dict(obj["optimizer"]) if obj.get("optimizer") is not None else None,
"redirects": RedirectConfig.from_dict(obj["redirects"]) if obj.get("redirects") is not None else None,
"regions": obj.get("regions"),
"waf": WafConfigPatch.from_dict(obj["waf"]) if obj.get("waf") is not None else None,
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
)
from stackit.cdn.models.loki_log_sink_create import LokiLogSinkCreate
from stackit.cdn.models.optimizer import Optimizer
from stackit.cdn.models.redirect_config import RedirectConfig
from stackit.cdn.models.region import Region
from stackit.cdn.models.waf_config import WafConfig

Expand Down Expand Up @@ -62,6 +63,7 @@ class CreateDistributionPayload(BaseModel):
alias="monthlyLimitBytes",
)
optimizer: Optional[Optimizer] = None
redirects: Optional[RedirectConfig] = None
regions: Annotated[List[Region], Field(min_length=1)] = Field(
description="Define in which regions you would like your content to be cached. "
)
Expand All @@ -75,6 +77,7 @@ class CreateDistributionPayload(BaseModel):
"logSink",
"monthlyLimitBytes",
"optimizer",
"redirects",
"regions",
"waf",
]
Expand Down Expand Up @@ -125,6 +128,9 @@ def to_dict(self) -> Dict[str, Any]:
# override the default output from pydantic by calling `to_dict()` of optimizer
if self.optimizer:
_dict["optimizer"] = self.optimizer.to_dict()
# override the default output from pydantic by calling `to_dict()` of redirects
if self.redirects:
_dict["redirects"] = self.redirects.to_dict()
# override the default output from pydantic by calling `to_dict()` of waf
if self.waf:
_dict["waf"] = self.waf.to_dict()
Expand Down Expand Up @@ -153,6 +159,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"logSink": LokiLogSinkCreate.from_dict(obj["logSink"]) if obj.get("logSink") is not None else None,
"monthlyLimitBytes": obj.get("monthlyLimitBytes"),
"optimizer": Optimizer.from_dict(obj["optimizer"]) if obj.get("optimizer") is not None else None,
"redirects": RedirectConfig.from_dict(obj["redirects"]) if obj.get("redirects") is not None else None,
"regions": obj.get("regions"),
"waf": WafConfig.from_dict(obj["waf"]) if obj.get("waf") is not None else None,
}
Expand Down
37 changes: 37 additions & 0 deletions services/cdn/src/stackit/cdn/models/match_condition.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# coding: utf-8

"""
CDN API
API used to create and manage your CDN distributions.
The version of the OpenAPI document: 1.0.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501

from __future__ import annotations

import json
from enum import Enum

from typing_extensions import Self


class MatchCondition(str, Enum):
"""
Defines how multiple matchers within this rule are combined (ALL, ANY, NONE). Defaults to ANY.
"""

"""
allowed enum values
"""
ANY = "ANY"
ALL = "ALL"
NONE = "NONE"

@classmethod
def from_json(cls, json_str: str) -> Self:
"""Create an instance of MatchCondition from a JSON string"""
return cls(json.loads(json_str))
93 changes: 93 additions & 0 deletions services/cdn/src/stackit/cdn/models/matcher.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# coding: utf-8

"""
CDN API
API used to create and manage your CDN distributions.
The version of the OpenAPI document: 1.0.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
from typing_extensions import Annotated, Self

from stackit.cdn.models.match_condition import MatchCondition


class Matcher(BaseModel):
"""
A matcher containing a list of string values to compare against the request path.
""" # noqa: E501

value_match_condition: Optional[MatchCondition] = Field(default=MatchCondition.ANY, alias="valueMatchCondition")
values: Annotated[List[StrictStr], Field(min_length=1)] = Field(
description='A list of glob patterns to match against the request path. At least one value is required. Examples: "/shop/*" or "*/img/*"'
)
__properties: ClassVar[List[str]] = ["valueMatchCondition", "values"]

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 Matcher 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 Matcher from a dict"""
if obj is None:
return None

if not isinstance(obj, dict):
return cls.model_validate(obj)

_obj = cls.model_validate(
{
"valueMatchCondition": (
obj.get("valueMatchCondition") if obj.get("valueMatchCondition") is not None else MatchCondition.ANY
),
"values": obj.get("values"),
}
)
return _obj
Loading