Skip to content
Closed
Show file tree
Hide file tree
Changes from all 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
26 changes: 26 additions & 0 deletions services/cdn/src/stackit/cdn/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"DistributionStatisticsRecord",
"DistributionStatisticsRecordEntry",
"DistributionStatisticsRecordRegions",
"DistributionWaf",
"Domain",
"DomainStatus",
"ErrorDetails",
Expand All @@ -59,6 +60,7 @@
"HttpBackend",
"HttpBackendPatch",
"ListDistributionsResponse",
"ListWAFCollectionsResponse",
"LokiLogSink",
"Optimizer",
"OptimizerPatch",
Expand All @@ -74,6 +76,14 @@
"PutCustomDomainResponseCertificate",
"Region",
"StatusError",
"WAFRule",
"WAFRuleCollection",
"WAFRuleGroup",
"WAFStatusRuleBlock",
"WafConfig",
"WafConfigPatch",
"WafMode",
"WafType",
]

# import apis into sdk package
Expand Down Expand Up @@ -119,6 +129,7 @@
from stackit.cdn.models.distribution_statistics_record_regions import (
DistributionStatisticsRecordRegions as DistributionStatisticsRecordRegions,
)
from stackit.cdn.models.distribution_waf import DistributionWaf as DistributionWaf
from stackit.cdn.models.domain import Domain as Domain
from stackit.cdn.models.domain_status import DomainStatus as DomainStatus
from stackit.cdn.models.error_details import ErrorDetails as ErrorDetails
Expand Down Expand Up @@ -164,6 +175,9 @@
from stackit.cdn.models.list_distributions_response import (
ListDistributionsResponse as ListDistributionsResponse,
)
from stackit.cdn.models.list_waf_collections_response import (
ListWAFCollectionsResponse as ListWAFCollectionsResponse,
)
from stackit.cdn.models.loki_log_sink import LokiLogSink as LokiLogSink
from stackit.cdn.models.optimizer import Optimizer as Optimizer
from stackit.cdn.models.optimizer_patch import OptimizerPatch as OptimizerPatch
Expand Down Expand Up @@ -197,3 +211,15 @@
)
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
from stackit.cdn.models.waf_config_patch import WafConfigPatch as WafConfigPatch
from stackit.cdn.models.waf_mode import WafMode as WafMode
from stackit.cdn.models.waf_rule import WAFRule as WAFRule
from stackit.cdn.models.waf_rule_collection import (
WAFRuleCollection as WAFRuleCollection,
)
from stackit.cdn.models.waf_rule_group import WAFRuleGroup as WAFRuleGroup
from stackit.cdn.models.waf_status_rule_block import (
WAFStatusRuleBlock as WAFStatusRuleBlock,
)
from stackit.cdn.models.waf_type import WafType as WafType
300 changes: 300 additions & 0 deletions services/cdn/src/stackit/cdn/api/default_api.py

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions services/cdn/src/stackit/cdn/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
from stackit.cdn.models.distribution_statistics_record_regions import (
DistributionStatisticsRecordRegions,
)
from stackit.cdn.models.distribution_waf import DistributionWaf
from stackit.cdn.models.domain import Domain
from stackit.cdn.models.domain_status import DomainStatus
from stackit.cdn.models.error_details import ErrorDetails
Expand Down Expand Up @@ -63,6 +64,7 @@
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.list_waf_collections_response import ListWAFCollectionsResponse
from stackit.cdn.models.loki_log_sink import LokiLogSink
from stackit.cdn.models.optimizer import Optimizer
from stackit.cdn.models.optimizer_patch import OptimizerPatch
Expand All @@ -86,3 +88,11 @@
)
from stackit.cdn.models.region import Region
from stackit.cdn.models.status_error import StatusError
from stackit.cdn.models.waf_config import WafConfig
from stackit.cdn.models.waf_config_patch import WafConfigPatch
from stackit.cdn.models.waf_mode import WafMode
from stackit.cdn.models.waf_rule import WAFRule
from stackit.cdn.models.waf_rule_collection import WAFRuleCollection
from stackit.cdn.models.waf_rule_group import WAFRuleGroup
from stackit.cdn.models.waf_status_rule_block import WAFStatusRuleBlock
from stackit.cdn.models.waf_type import WafType
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 @@ -24,6 +24,7 @@
from stackit.cdn.models.loki_log_sink import LokiLogSink
from stackit.cdn.models.optimizer import Optimizer
from stackit.cdn.models.region import Region
from stackit.cdn.models.waf_config import WafConfig


class Config(BaseModel):
Expand Down Expand Up @@ -53,6 +54,7 @@ class Config(BaseModel):
)
optimizer: Optional[Optimizer] = None
regions: Annotated[List[Region], Field(min_length=1)]
waf: WafConfig
__properties: ClassVar[List[str]] = [
"backend",
"blockedCountries",
Expand All @@ -62,6 +64,7 @@ class Config(BaseModel):
"monthlyLimitBytes",
"optimizer",
"regions",
"waf",
]

model_config = ConfigDict(
Expand Down Expand Up @@ -110,6 +113,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 waf
if self.waf:
_dict["waf"] = self.waf.to_dict()
# set to None if default_cache_duration (nullable) is None
# and model_fields_set contains the field
if self.default_cache_duration is None and "default_cache_duration" in self.model_fields_set:
Expand Down Expand Up @@ -141,6 +147,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"monthlyLimitBytes": obj.get("monthlyLimitBytes"),
"optimizer": Optimizer.from_dict(obj["optimizer"]) if obj.get("optimizer") is not None else None,
"regions": obj.get("regions"),
"waf": WafConfig.from_dict(obj["waf"]) if obj.get("waf") is not None else None,
}
)
return _obj
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 @@ -24,6 +24,7 @@
from stackit.cdn.models.optimizer_patch import OptimizerPatch
from stackit.cdn.models.patch_loki_log_sink import PatchLokiLogSink
from stackit.cdn.models.region import Region
from stackit.cdn.models.waf_config_patch import WafConfigPatch


class ConfigPatch(BaseModel):
Expand Down Expand Up @@ -55,6 +56,7 @@ class ConfigPatch(BaseModel):
)
optimizer: Optional[OptimizerPatch] = None
regions: Optional[Annotated[List[Region], Field(min_length=1)]] = None
waf: Optional[WafConfigPatch] = None
__properties: ClassVar[List[str]] = [
"backend",
"blockedCountries",
Expand All @@ -64,6 +66,7 @@ class ConfigPatch(BaseModel):
"monthlyLimitBytes",
"optimizer",
"regions",
"waf",
]

model_config = ConfigDict(
Expand Down Expand Up @@ -112,6 +115,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 waf
if self.waf:
_dict["waf"] = self.waf.to_dict()
# set to None if default_cache_duration (nullable) is None
# and model_fields_set contains the field
if self.default_cache_duration is None and "default_cache_duration" in self.model_fields_set:
Expand Down Expand Up @@ -148,6 +154,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"monthlyLimitBytes": obj.get("monthlyLimitBytes"),
"optimizer": OptimizerPatch.from_dict(obj["optimizer"]) if obj.get("optimizer") is not None else None,
"regions": obj.get("regions"),
"waf": WafConfigPatch.from_dict(obj["waf"]) if obj.get("waf") is not None else None,
}
)
return _obj
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
from stackit.cdn.models.optimizer import Optimizer
from stackit.cdn.models.patch_loki_log_sink import PatchLokiLogSink
from stackit.cdn.models.region import Region
from stackit.cdn.models.waf_config import WafConfig


class CreateDistributionPayload(BaseModel):
Expand Down Expand Up @@ -73,6 +74,7 @@ class CreateDistributionPayload(BaseModel):
regions: Annotated[List[Region], Field(min_length=1)] = Field(
description="Define in which regions you would like your content to be cached. "
)
waf: Optional[WafConfig] = None
__properties: ClassVar[List[str]] = [
"blockedCountries",
"blockedIPs",
Expand All @@ -85,6 +87,7 @@ class CreateDistributionPayload(BaseModel):
"originRequestHeaders",
"originUrl",
"regions",
"waf",
]

model_config = ConfigDict(
Expand Down Expand Up @@ -130,6 +133,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 waf
if self.waf:
_dict["waf"] = self.waf.to_dict()
return _dict

@classmethod
Expand All @@ -154,6 +160,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"originRequestHeaders": obj.get("originRequestHeaders"),
"originUrl": obj.get("originUrl"),
"regions": obj.get("regions"),
"waf": WafConfig.from_dict(obj["waf"]) if obj.get("waf") is not None else None,
}
)
return _obj
7 changes: 7 additions & 0 deletions services/cdn/src/stackit/cdn/models/distribution.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from typing_extensions import Annotated, Self

from stackit.cdn.models.config import Config
from stackit.cdn.models.distribution_waf import DistributionWaf
from stackit.cdn.models.domain import Domain
from stackit.cdn.models.status_error import StatusError

Expand Down Expand Up @@ -49,6 +50,7 @@ class Distribution(BaseModel):
description="RFC3339 string which returns the last time the distribution configuration was modified. ",
alias="updatedAt",
)
waf: Optional[DistributionWaf] = None
__properties: ClassVar[List[str]] = [
"config",
"createdAt",
Expand All @@ -58,6 +60,7 @@ class Distribution(BaseModel):
"projectId",
"status",
"updatedAt",
"waf",
]

@field_validator("status")
Expand Down Expand Up @@ -121,6 +124,9 @@ def to_dict(self) -> Dict[str, Any]:
if _item:
_items.append(_item.to_dict())
_dict["errors"] = _items
# override the default output from pydantic by calling `to_dict()` of waf
if self.waf:
_dict["waf"] = self.waf.to_dict()
return _dict

@classmethod
Expand All @@ -146,6 +152,7 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"projectId": obj.get("projectId"),
"status": obj.get("status"),
"updatedAt": obj.get("updatedAt"),
"waf": DistributionWaf.from_dict(obj["waf"]) if obj.get("waf") is not None else None,
}
)
return _obj
124 changes: 124 additions & 0 deletions services/cdn/src/stackit/cdn/models/distribution_waf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
# 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

from __future__ import annotations

import json
import pprint
from typing import Any, ClassVar, Dict, List, Optional, Set

from pydantic import BaseModel, ConfigDict, Field
from typing_extensions import Self

from stackit.cdn.models.waf_status_rule_block import WAFStatusRuleBlock


class DistributionWaf(BaseModel):
"""
For this property to be present two pre-conditions must be met: - the WAF was enabled at least once - the query parameter ?withWafStatus is truthy This property contains the waf Status. At this point in time, this contains all resolved rules. Rules are split into 3 groups: - enabledRules - logOnlyRules - disabledRules **Do note that the global waf mode (Disabled, LogOnly, Enabled) is *NOT* reflected in this list!**
""" # noqa: E501

disabled_rules: List[WAFStatusRuleBlock] = Field(alias="disabledRules")
enabled_rules: List[WAFStatusRuleBlock] = Field(alias="enabledRules")
log_only_rules: List[WAFStatusRuleBlock] = Field(alias="logOnlyRules")
__properties: ClassVar[List[str]] = ["disabledRules", "enabledRules", "logOnlyRules"]

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 DistributionWaf 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,
)
# override the default output from pydantic by calling `to_dict()` of each item in disabled_rules (list)
_items = []
if self.disabled_rules:
for _item in self.disabled_rules:
if _item:
_items.append(_item.to_dict())
_dict["disabledRules"] = _items
# override the default output from pydantic by calling `to_dict()` of each item in enabled_rules (list)
_items = []
if self.enabled_rules:
for _item in self.enabled_rules:
if _item:
_items.append(_item.to_dict())
_dict["enabledRules"] = _items
# override the default output from pydantic by calling `to_dict()` of each item in log_only_rules (list)
_items = []
if self.log_only_rules:
for _item in self.log_only_rules:
if _item:
_items.append(_item.to_dict())
_dict["logOnlyRules"] = _items
return _dict

@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of DistributionWaf from a dict"""
if obj is None:
return None

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

_obj = cls.model_validate(
{
"disabledRules": (
[WAFStatusRuleBlock.from_dict(_item) for _item in obj["disabledRules"]]
if obj.get("disabledRules") is not None
else None
),
"enabledRules": (
[WAFStatusRuleBlock.from_dict(_item) for _item in obj["enabledRules"]]
if obj.get("enabledRules") is not None
else None
),
"logOnlyRules": (
[WAFStatusRuleBlock.from_dict(_item) for _item in obj["logOnlyRules"]]
if obj.get("logOnlyRules") is not None
else None
),
}
)
return _obj
Loading