diff --git a/CHANGELOG.md b/CHANGELOG.md index b930fdcb7..534f6663c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,12 @@ - **Feature:** Add `config_drive` attribute to ModelClass `Server` and `CreateServerPayload` - `alb`: [v0.9.3](services/alb/CHANGELOG.md#v093) - Add HTTP 429 status code to some API client methods +- `cdn`: [v2.5.0](services/cdn/CHANGELOG.md#v250) + - **Feature:** New model classes `TlsConfigPatch` and `TlsConfig` + - **Feature:** add attributes `forwardHostHeader`, `stripResponseCookies` and `tls` to the model classes: + - `Config` + - `ConfigPatch` + - `CreateDistributionPayload` - `certificates`: [v1.3.1](services/certificates/CHANGELOG.md#v131) - Add HTTP 429 status code to some API client methods - `loadbalancer`: [v0.9.3](services/loadbalancer/CHANGELOG.md#v093) diff --git a/services/cdn/CHANGELOG.md b/services/cdn/CHANGELOG.md index ed863195a..f3ff2f215 100644 --- a/services/cdn/CHANGELOG.md +++ b/services/cdn/CHANGELOG.md @@ -1,3 +1,10 @@ +## v2.5.0 +- **Feature:** New model classes `TlsConfigPatch` and `TlsConfig` +- **Feature:** add attributes `forwardHostHeader`, `stripResponseCookies` and `tls` to the model classes: + - `Config` + - `ConfigPatch` + - `CreateDistributionPayload` + ## v2.4.0 - **Feature:** client now supports UUID and decimal types - **Bugfix:** timeouts now passed to requests library diff --git a/services/cdn/oas_commit b/services/cdn/oas_commit index e3713dde3..4b79dc0b4 100644 --- a/services/cdn/oas_commit +++ b/services/cdn/oas_commit @@ -1 +1 @@ -0e64886dd0847341800d7191ed193b75413be998 +bda6ad3d9e8850526f25eddcb6589fcc7559c625 diff --git a/services/cdn/pyproject.toml b/services/cdn/pyproject.toml index c9b813c7e..c56e090f4 100644 --- a/services/cdn/pyproject.toml +++ b/services/cdn/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "stackit-cdn" -version = "v2.4.0" +version = "v2.5.0" description = "CDN API" authors = [{ name = "STACKIT Developer Tools", email = "developer-tools@stackit.cloud" }] requires-python = ">=3.9,<4.0" @@ -111,7 +111,7 @@ per-file-ignores = """ # asserts are fine in tests, tests shouldn't be build optimized ./tests/*: S101, # F841: some variables get generated but may not be used, depending on the api-spec - # E501: long descriptions/string values might lead to lines that are too long + # E501: long descriptions/string values might lead to lines that are too long ./src/stackit/*/models/*: F841,E501 # F841: some variables get generated but may not be used, depending on the api-spec # E501: long descriptions/string values might lead to lines that are too long diff --git a/services/cdn/src/stackit/cdn/__init__.py b/services/cdn/src/stackit/cdn/__init__.py index 468b25fa0..a669b4df9 100644 --- a/services/cdn/src/stackit/cdn/__init__.py +++ b/services/cdn/src/stackit/cdn/__init__.py @@ -92,6 +92,8 @@ "RedirectRule", "Region", "StatusError", + "TlsConfig", + "TlsConfigPatch", "WAFRuleAction", "WAFViolation", "WafConfig", @@ -270,6 +272,8 @@ 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.tls_config import TlsConfig as TlsConfig +from stackit.cdn.models.tls_config_patch import TlsConfigPatch as TlsConfigPatch 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 diff --git a/services/cdn/src/stackit/cdn/api/default_api.py b/services/cdn/src/stackit/cdn/api/default_api.py index d7a858d8f..94a6f11ca 100644 --- a/services/cdn/src/stackit/cdn/api/default_api.py +++ b/services/cdn/src/stackit/cdn/api/default_api.py @@ -616,7 +616,7 @@ def delete_distribution( intent_id: Annotated[ Optional[StrictStr], Field( - description="While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple DELETE-Requests with the same `intentId` are received, all but the first request are dropped. " + description="While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple DELETE-Requests with the same `intentId` are received, all but the first request are dropped. " ), ] = None, _request_timeout: Union[ @@ -637,7 +637,7 @@ def delete_distribution( :type project_id: str :param distribution_id: (required) :type distribution_id: UUID - :param intent_id: While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple DELETE-Requests with the same `intentId` are received, all but the first request are dropped. + :param intent_id: While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple DELETE-Requests with the same `intentId` are received, all but the first request are dropped. :type intent_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -692,7 +692,7 @@ def delete_distribution_with_http_info( intent_id: Annotated[ Optional[StrictStr], Field( - description="While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple DELETE-Requests with the same `intentId` are received, all but the first request are dropped. " + description="While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple DELETE-Requests with the same `intentId` are received, all but the first request are dropped. " ), ] = None, _request_timeout: Union[ @@ -713,7 +713,7 @@ def delete_distribution_with_http_info( :type project_id: str :param distribution_id: (required) :type distribution_id: UUID - :param intent_id: While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple DELETE-Requests with the same `intentId` are received, all but the first request are dropped. + :param intent_id: While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple DELETE-Requests with the same `intentId` are received, all but the first request are dropped. :type intent_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -768,7 +768,7 @@ def delete_distribution_without_preload_content( intent_id: Annotated[ Optional[StrictStr], Field( - description="While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple DELETE-Requests with the same `intentId` are received, all but the first request are dropped. " + description="While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple DELETE-Requests with the same `intentId` are received, all but the first request are dropped. " ), ] = None, _request_timeout: Union[ @@ -789,7 +789,7 @@ def delete_distribution_without_preload_content( :type project_id: str :param distribution_id: (required) :type distribution_id: UUID - :param intent_id: While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple DELETE-Requests with the same `intentId` are received, all but the first request are dropped. + :param intent_id: While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple DELETE-Requests with the same `intentId` are received, all but the first request are dropped. :type intent_id: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -908,7 +908,7 @@ def find_cache_paths( ) -> FindCachePathsResponse: """Return Paths that were purged - This returns paths that are present in the cache purging history. Only substrings of the provided input are returned. The response is sorted in descending order by the most recent purge. So, assuming you have have the following purged for a distribution - `/test/1` at `2025-01-01` - `/test/2` at `2025-01-02` - `/someOtherPath/1` at `2025-01-03` - `/test/1` at `2025-01-04` - `/test/3` at `2025-01-05`, this would return the following paths, in the following order, assuming `/te` was the search parameter: - `/test/3` - `/test/1` - `/test/2` + This returns paths that are present in the cache purging history. Only substrings of the provided input are returned. The response is sorted in descending order by the most recent purge. So, assuming you have have the following purged for a distribution - `/test/1` at `2025-01-01` - `/test/2` at `2025-01-02` - `/someOtherPath/1` at `2025-01-03` - `/test/1` at `2025-01-04` - `/test/3` at `2025-01-05`, this would return the following paths, in the following order, assuming `/te` was the search parameter: - `/test/3` - `/test/1` - `/test/2` :param project_id: Your STACKIT Project Id (required) :type project_id: str @@ -979,7 +979,7 @@ def find_cache_paths_with_http_info( ) -> ApiResponse[FindCachePathsResponse]: """Return Paths that were purged - This returns paths that are present in the cache purging history. Only substrings of the provided input are returned. The response is sorted in descending order by the most recent purge. So, assuming you have have the following purged for a distribution - `/test/1` at `2025-01-01` - `/test/2` at `2025-01-02` - `/someOtherPath/1` at `2025-01-03` - `/test/1` at `2025-01-04` - `/test/3` at `2025-01-05`, this would return the following paths, in the following order, assuming `/te` was the search parameter: - `/test/3` - `/test/1` - `/test/2` + This returns paths that are present in the cache purging history. Only substrings of the provided input are returned. The response is sorted in descending order by the most recent purge. So, assuming you have have the following purged for a distribution - `/test/1` at `2025-01-01` - `/test/2` at `2025-01-02` - `/someOtherPath/1` at `2025-01-03` - `/test/1` at `2025-01-04` - `/test/3` at `2025-01-05`, this would return the following paths, in the following order, assuming `/te` was the search parameter: - `/test/3` - `/test/1` - `/test/2` :param project_id: Your STACKIT Project Id (required) :type project_id: str @@ -1050,7 +1050,7 @@ def find_cache_paths_without_preload_content( ) -> RESTResponseType: """Return Paths that were purged - This returns paths that are present in the cache purging history. Only substrings of the provided input are returned. The response is sorted in descending order by the most recent purge. So, assuming you have have the following purged for a distribution - `/test/1` at `2025-01-01` - `/test/2` at `2025-01-02` - `/someOtherPath/1` at `2025-01-03` - `/test/1` at `2025-01-04` - `/test/3` at `2025-01-05`, this would return the following paths, in the following order, assuming `/te` was the search parameter: - `/test/3` - `/test/1` - `/test/2` + This returns paths that are present in the cache purging history. Only substrings of the provided input are returned. The response is sorted in descending order by the most recent purge. So, assuming you have have the following purged for a distribution - `/test/1` at `2025-01-01` - `/test/2` at `2025-01-02` - `/someOtherPath/1` at `2025-01-03` - `/test/1` at `2025-01-04` - `/test/3` at `2025-01-05`, this would return the following paths, in the following order, assuming `/te` was the search parameter: - `/test/3` - `/test/1` - `/test/2` :param project_id: Your STACKIT Project Id (required) :type project_id: str @@ -1175,7 +1175,7 @@ def get_cache_info( ) -> GetCacheInfoResponse: """Get Infos about the Caching State - Return caching info metadata, which contains the last cache purging time and a history of the most recent *full* purges. If (and only if) you provide the path query parameter, the history will also contain granular cache purges. The request will not fail if no data about a path is found. + Return caching info metadata, which contains the last cache purging time and a history of the most recent *full* purges. If (and only if) you provide the path query parameter, the history will also contain granular cache purges. The request will not fail if no data about a path is found. :param project_id: Your STACKIT Project Id (required) :type project_id: str @@ -1246,7 +1246,7 @@ def get_cache_info_with_http_info( ) -> ApiResponse[GetCacheInfoResponse]: """Get Infos about the Caching State - Return caching info metadata, which contains the last cache purging time and a history of the most recent *full* purges. If (and only if) you provide the path query parameter, the history will also contain granular cache purges. The request will not fail if no data about a path is found. + Return caching info metadata, which contains the last cache purging time and a history of the most recent *full* purges. If (and only if) you provide the path query parameter, the history will also contain granular cache purges. The request will not fail if no data about a path is found. :param project_id: Your STACKIT Project Id (required) :type project_id: str @@ -1317,7 +1317,7 @@ def get_cache_info_without_preload_content( ) -> RESTResponseType: """Get Infos about the Caching State - Return caching info metadata, which contains the last cache purging time and a history of the most recent *full* purges. If (and only if) you provide the path query parameter, the history will also contain granular cache purges. The request will not fail if no data about a path is found. + Return caching info metadata, which contains the last cache purging time and a history of the most recent *full* purges. If (and only if) you provide the path query parameter, the history will also contain granular cache purges. The request will not fail if no data about a path is found. :param project_id: Your STACKIT Project Id (required) :type project_id: str @@ -1988,19 +1988,19 @@ def get_logs( to: Annotated[ Optional[datetime], Field( - description='the end of the time range for which logs should be returned. If not specified, "now" is used. ' + description='the end of the time range for which logs should be returned. If not specified, "now" is used. ' ), ] = None, page_size: Annotated[ Optional[Annotated[int, Field(le=1000, strict=True, ge=1)]], Field( - description="Quantifies how many log entries should be returned on this page. Must be a natural number between 1 and 1000 (inclusive) " + description="Quantifies how many log entries should be returned on this page. Must be a natural number between 1 and 1000 (inclusive) " ), ] = None, page_identifier: Annotated[ Optional[StrictStr], Field( - description='Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get "pushed" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. ' + description='Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get "pushed" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. ' ), ] = None, sort_by: Annotated[ @@ -2013,7 +2013,7 @@ def get_logs( waf_action: Annotated[ Optional[WAFRuleAction], Field( - description="If this is set then only log entries with the chosen WAF rule action/outcome are returned. Specifically, if `ALLOWED` then all requests with no violation are returned. If `BLOCKED` then those where a WAF rule blocked a request and if `LOGGED` then only those requests where the WAF violation was only logged but the request not blocked " + description="If this is set then only log entries with the chosen WAF rule action/outcome are returned. Specifically, if `ALLOWED` then all requests with no violation are returned. If `BLOCKED` then those where a WAF rule blocked a request and if `LOGGED` then only those requests where the WAF violation was only logged but the request not blocked " ), ] = None, data_center_region: Annotated[ @@ -2059,17 +2059,17 @@ def get_logs( :type distribution_id: UUID :param var_from: the start of the time range for which logs should be returned :type var_from: datetime - :param to: the end of the time range for which logs should be returned. If not specified, \"now\" is used. + :param to: the end of the time range for which logs should be returned. If not specified, \"now\" is used. :type to: datetime - :param page_size: Quantifies how many log entries should be returned on this page. Must be a natural number between 1 and 1000 (inclusive) + :param page_size: Quantifies how many log entries should be returned on this page. Must be a natural number between 1 and 1000 (inclusive) :type page_size: int - :param page_identifier: Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get \"pushed\" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. + :param page_identifier: Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get \"pushed\" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. :type page_identifier: str :param sort_by: Sorts the log messages by a specific field. Defaults to `timestamp`. Supported sort options: - `timestamp` - `dataCenterRegion` - `requestCountryCode` - `statusCode` - `cacheHit` - `size` - `path` - `host` :type sort_by: str :param sort_order: :type sort_order: str - :param waf_action: If this is set then only log entries with the chosen WAF rule action/outcome are returned. Specifically, if `ALLOWED` then all requests with no violation are returned. If `BLOCKED` then those where a WAF rule blocked a request and if `LOGGED` then only those requests where the WAF violation was only logged but the request not blocked + :param waf_action: If this is set then only log entries with the chosen WAF rule action/outcome are returned. Specifically, if `ALLOWED` then all requests with no violation are returned. If `BLOCKED` then those where a WAF rule blocked a request and if `LOGGED` then only those requests where the WAF violation was only logged but the request not blocked :type waf_action: WAFRuleAction :param data_center_region: Filters by the CDN data center region that served the request. Can be combined with other filters :type data_center_region: str @@ -2145,19 +2145,19 @@ def get_logs_with_http_info( to: Annotated[ Optional[datetime], Field( - description='the end of the time range for which logs should be returned. If not specified, "now" is used. ' + description='the end of the time range for which logs should be returned. If not specified, "now" is used. ' ), ] = None, page_size: Annotated[ Optional[Annotated[int, Field(le=1000, strict=True, ge=1)]], Field( - description="Quantifies how many log entries should be returned on this page. Must be a natural number between 1 and 1000 (inclusive) " + description="Quantifies how many log entries should be returned on this page. Must be a natural number between 1 and 1000 (inclusive) " ), ] = None, page_identifier: Annotated[ Optional[StrictStr], Field( - description='Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get "pushed" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. ' + description='Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get "pushed" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. ' ), ] = None, sort_by: Annotated[ @@ -2170,7 +2170,7 @@ def get_logs_with_http_info( waf_action: Annotated[ Optional[WAFRuleAction], Field( - description="If this is set then only log entries with the chosen WAF rule action/outcome are returned. Specifically, if `ALLOWED` then all requests with no violation are returned. If `BLOCKED` then those where a WAF rule blocked a request and if `LOGGED` then only those requests where the WAF violation was only logged but the request not blocked " + description="If this is set then only log entries with the chosen WAF rule action/outcome are returned. Specifically, if `ALLOWED` then all requests with no violation are returned. If `BLOCKED` then those where a WAF rule blocked a request and if `LOGGED` then only those requests where the WAF violation was only logged but the request not blocked " ), ] = None, data_center_region: Annotated[ @@ -2216,17 +2216,17 @@ def get_logs_with_http_info( :type distribution_id: UUID :param var_from: the start of the time range for which logs should be returned :type var_from: datetime - :param to: the end of the time range for which logs should be returned. If not specified, \"now\" is used. + :param to: the end of the time range for which logs should be returned. If not specified, \"now\" is used. :type to: datetime - :param page_size: Quantifies how many log entries should be returned on this page. Must be a natural number between 1 and 1000 (inclusive) + :param page_size: Quantifies how many log entries should be returned on this page. Must be a natural number between 1 and 1000 (inclusive) :type page_size: int - :param page_identifier: Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get \"pushed\" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. + :param page_identifier: Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get \"pushed\" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. :type page_identifier: str :param sort_by: Sorts the log messages by a specific field. Defaults to `timestamp`. Supported sort options: - `timestamp` - `dataCenterRegion` - `requestCountryCode` - `statusCode` - `cacheHit` - `size` - `path` - `host` :type sort_by: str :param sort_order: :type sort_order: str - :param waf_action: If this is set then only log entries with the chosen WAF rule action/outcome are returned. Specifically, if `ALLOWED` then all requests with no violation are returned. If `BLOCKED` then those where a WAF rule blocked a request and if `LOGGED` then only those requests where the WAF violation was only logged but the request not blocked + :param waf_action: If this is set then only log entries with the chosen WAF rule action/outcome are returned. Specifically, if `ALLOWED` then all requests with no violation are returned. If `BLOCKED` then those where a WAF rule blocked a request and if `LOGGED` then only those requests where the WAF violation was only logged but the request not blocked :type waf_action: WAFRuleAction :param data_center_region: Filters by the CDN data center region that served the request. Can be combined with other filters :type data_center_region: str @@ -2302,19 +2302,19 @@ def get_logs_without_preload_content( to: Annotated[ Optional[datetime], Field( - description='the end of the time range for which logs should be returned. If not specified, "now" is used. ' + description='the end of the time range for which logs should be returned. If not specified, "now" is used. ' ), ] = None, page_size: Annotated[ Optional[Annotated[int, Field(le=1000, strict=True, ge=1)]], Field( - description="Quantifies how many log entries should be returned on this page. Must be a natural number between 1 and 1000 (inclusive) " + description="Quantifies how many log entries should be returned on this page. Must be a natural number between 1 and 1000 (inclusive) " ), ] = None, page_identifier: Annotated[ Optional[StrictStr], Field( - description='Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get "pushed" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. ' + description='Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get "pushed" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. ' ), ] = None, sort_by: Annotated[ @@ -2327,7 +2327,7 @@ def get_logs_without_preload_content( waf_action: Annotated[ Optional[WAFRuleAction], Field( - description="If this is set then only log entries with the chosen WAF rule action/outcome are returned. Specifically, if `ALLOWED` then all requests with no violation are returned. If `BLOCKED` then those where a WAF rule blocked a request and if `LOGGED` then only those requests where the WAF violation was only logged but the request not blocked " + description="If this is set then only log entries with the chosen WAF rule action/outcome are returned. Specifically, if `ALLOWED` then all requests with no violation are returned. If `BLOCKED` then those where a WAF rule blocked a request and if `LOGGED` then only those requests where the WAF violation was only logged but the request not blocked " ), ] = None, data_center_region: Annotated[ @@ -2373,17 +2373,17 @@ def get_logs_without_preload_content( :type distribution_id: UUID :param var_from: the start of the time range for which logs should be returned :type var_from: datetime - :param to: the end of the time range for which logs should be returned. If not specified, \"now\" is used. + :param to: the end of the time range for which logs should be returned. If not specified, \"now\" is used. :type to: datetime - :param page_size: Quantifies how many log entries should be returned on this page. Must be a natural number between 1 and 1000 (inclusive) + :param page_size: Quantifies how many log entries should be returned on this page. Must be a natural number between 1 and 1000 (inclusive) :type page_size: int - :param page_identifier: Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get \"pushed\" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. + :param page_identifier: Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get \"pushed\" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. :type page_identifier: str :param sort_by: Sorts the log messages by a specific field. Defaults to `timestamp`. Supported sort options: - `timestamp` - `dataCenterRegion` - `requestCountryCode` - `statusCode` - `cacheHit` - `size` - `path` - `host` :type sort_by: str :param sort_order: :type sort_order: str - :param waf_action: If this is set then only log entries with the chosen WAF rule action/outcome are returned. Specifically, if `ALLOWED` then all requests with no violation are returned. If `BLOCKED` then those where a WAF rule blocked a request and if `LOGGED` then only those requests where the WAF violation was only logged but the request not blocked + :param waf_action: If this is set then only log entries with the chosen WAF rule action/outcome are returned. Specifically, if `ALLOWED` then all requests with no violation are returned. If `BLOCKED` then those where a WAF rule blocked a request and if `LOGGED` then only those requests where the WAF violation was only logged but the request not blocked :type waf_action: WAFRuleAction :param data_center_region: Filters by the CDN data center region that served the request. Can be combined with other filters :type data_center_region: str @@ -2843,13 +2843,13 @@ def get_statistics( to: Annotated[ Optional[datetime], Field( - description="the end of the time range for which statistics should be returned. If not specified, the end of the current time interval is used, e.g. next day for daily, next month for monthly, and so on. " + description="the end of the time range for which statistics should be returned. If not specified, the end of the current time interval is used, e.g. next day for daily, next month for monthly, and so on. " ), ] = None, interval: Annotated[ Optional[StrictStr], Field( - description="Over which interval should statistics be aggregated? defaults to hourly resolution **NOTE**: Intervals are grouped in buckets that start and end based on a day in UTC+0 time. So for the `daily` interval, the group starts (inclusive) and ends (exclusive) at `00:00Z` " + description="Over which interval should statistics be aggregated? defaults to hourly resolution **NOTE**: Intervals are grouped in buckets that start and end based on a day in UTC+0 time. So for the `daily` interval, the group starts (inclusive) and ends (exclusive) at `00:00Z` " ), ] = None, _request_timeout: Union[ @@ -2864,7 +2864,7 @@ def get_statistics( ) -> GetStatisticsResponse: """Retrieve the statistics of a distribution - Returns the statistics of the distribution in the given time range. The response is a list of statistics records. Each record aggregates the statistics for its time interval. In case no statistics for a time interval exist, no record is returned. The time range for which statistics should be returned can be configured using query parameters. Timestamps are assumed to be UTC. This is especially important for the \"buckets\" when you, for example, return daily information. A day always starts and ends at 00:00Z. **Important Note:** Lower bounds are inclusive, upper bounds are exclusive. If you, for example, want a daily grouped which starts on the 1st Jan and also contains the full 10th Jan day, you would define `2025-01-01T00:00:00Z` as the lower and `2025-01-11T00:00:00Z` as the upper bound. The upper bound is optional. If you omit it, the API will use the start of the next interval as the upper bound. Example: if `interval` is `hourly`, `from` would default to the start of the next hour, if it's `daily`, `from` would default to the start of the next day, etc. + Returns the statistics of the distribution in the given time range. The response is a list of statistics records. Each record aggregates the statistics for its time interval. In case no statistics for a time interval exist, no record is returned. The time range for which statistics should be returned can be configured using query parameters. Timestamps are assumed to be UTC. This is especially important for the \"buckets\" when you, for example, return daily information. A day always starts and ends at 00:00Z. **Important Note:** Lower bounds are inclusive, upper bounds are exclusive. If you, for example, want a daily grouped which starts on the 1st Jan and also contains the full 10th Jan day, you would define `2025-01-01T00:00:00Z` as the lower and `2025-01-11T00:00:00Z` as the upper bound. The upper bound is optional. If you omit it, the API will use the start of the next interval as the upper bound. Example: if `interval` is `hourly`, `from` would default to the start of the next hour, if it's `daily`, `from` would default to the start of the next day, etc. :param project_id: Your STACKIT Project Id (required) :type project_id: str @@ -2872,9 +2872,9 @@ def get_statistics( :type distribution_id: UUID :param var_from: the start of the time range for which statistics should be returned (required) :type var_from: datetime - :param to: the end of the time range for which statistics should be returned. If not specified, the end of the current time interval is used, e.g. next day for daily, next month for monthly, and so on. + :param to: the end of the time range for which statistics should be returned. If not specified, the end of the current time interval is used, e.g. next day for daily, next month for monthly, and so on. :type to: datetime - :param interval: Over which interval should statistics be aggregated? defaults to hourly resolution **NOTE**: Intervals are grouped in buckets that start and end based on a day in UTC+0 time. So for the `daily` interval, the group starts (inclusive) and ends (exclusive) at `00:00Z` + :param interval: Over which interval should statistics be aggregated? defaults to hourly resolution **NOTE**: Intervals are grouped in buckets that start and end based on a day in UTC+0 time. So for the `daily` interval, the group starts (inclusive) and ends (exclusive) at `00:00Z` :type interval: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -2934,13 +2934,13 @@ def get_statistics_with_http_info( to: Annotated[ Optional[datetime], Field( - description="the end of the time range for which statistics should be returned. If not specified, the end of the current time interval is used, e.g. next day for daily, next month for monthly, and so on. " + description="the end of the time range for which statistics should be returned. If not specified, the end of the current time interval is used, e.g. next day for daily, next month for monthly, and so on. " ), ] = None, interval: Annotated[ Optional[StrictStr], Field( - description="Over which interval should statistics be aggregated? defaults to hourly resolution **NOTE**: Intervals are grouped in buckets that start and end based on a day in UTC+0 time. So for the `daily` interval, the group starts (inclusive) and ends (exclusive) at `00:00Z` " + description="Over which interval should statistics be aggregated? defaults to hourly resolution **NOTE**: Intervals are grouped in buckets that start and end based on a day in UTC+0 time. So for the `daily` interval, the group starts (inclusive) and ends (exclusive) at `00:00Z` " ), ] = None, _request_timeout: Union[ @@ -2955,7 +2955,7 @@ def get_statistics_with_http_info( ) -> ApiResponse[GetStatisticsResponse]: """Retrieve the statistics of a distribution - Returns the statistics of the distribution in the given time range. The response is a list of statistics records. Each record aggregates the statistics for its time interval. In case no statistics for a time interval exist, no record is returned. The time range for which statistics should be returned can be configured using query parameters. Timestamps are assumed to be UTC. This is especially important for the \"buckets\" when you, for example, return daily information. A day always starts and ends at 00:00Z. **Important Note:** Lower bounds are inclusive, upper bounds are exclusive. If you, for example, want a daily grouped which starts on the 1st Jan and also contains the full 10th Jan day, you would define `2025-01-01T00:00:00Z` as the lower and `2025-01-11T00:00:00Z` as the upper bound. The upper bound is optional. If you omit it, the API will use the start of the next interval as the upper bound. Example: if `interval` is `hourly`, `from` would default to the start of the next hour, if it's `daily`, `from` would default to the start of the next day, etc. + Returns the statistics of the distribution in the given time range. The response is a list of statistics records. Each record aggregates the statistics for its time interval. In case no statistics for a time interval exist, no record is returned. The time range for which statistics should be returned can be configured using query parameters. Timestamps are assumed to be UTC. This is especially important for the \"buckets\" when you, for example, return daily information. A day always starts and ends at 00:00Z. **Important Note:** Lower bounds are inclusive, upper bounds are exclusive. If you, for example, want a daily grouped which starts on the 1st Jan and also contains the full 10th Jan day, you would define `2025-01-01T00:00:00Z` as the lower and `2025-01-11T00:00:00Z` as the upper bound. The upper bound is optional. If you omit it, the API will use the start of the next interval as the upper bound. Example: if `interval` is `hourly`, `from` would default to the start of the next hour, if it's `daily`, `from` would default to the start of the next day, etc. :param project_id: Your STACKIT Project Id (required) :type project_id: str @@ -2963,9 +2963,9 @@ def get_statistics_with_http_info( :type distribution_id: UUID :param var_from: the start of the time range for which statistics should be returned (required) :type var_from: datetime - :param to: the end of the time range for which statistics should be returned. If not specified, the end of the current time interval is used, e.g. next day for daily, next month for monthly, and so on. + :param to: the end of the time range for which statistics should be returned. If not specified, the end of the current time interval is used, e.g. next day for daily, next month for monthly, and so on. :type to: datetime - :param interval: Over which interval should statistics be aggregated? defaults to hourly resolution **NOTE**: Intervals are grouped in buckets that start and end based on a day in UTC+0 time. So for the `daily` interval, the group starts (inclusive) and ends (exclusive) at `00:00Z` + :param interval: Over which interval should statistics be aggregated? defaults to hourly resolution **NOTE**: Intervals are grouped in buckets that start and end based on a day in UTC+0 time. So for the `daily` interval, the group starts (inclusive) and ends (exclusive) at `00:00Z` :type interval: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -3025,13 +3025,13 @@ def get_statistics_without_preload_content( to: Annotated[ Optional[datetime], Field( - description="the end of the time range for which statistics should be returned. If not specified, the end of the current time interval is used, e.g. next day for daily, next month for monthly, and so on. " + description="the end of the time range for which statistics should be returned. If not specified, the end of the current time interval is used, e.g. next day for daily, next month for monthly, and so on. " ), ] = None, interval: Annotated[ Optional[StrictStr], Field( - description="Over which interval should statistics be aggregated? defaults to hourly resolution **NOTE**: Intervals are grouped in buckets that start and end based on a day in UTC+0 time. So for the `daily` interval, the group starts (inclusive) and ends (exclusive) at `00:00Z` " + description="Over which interval should statistics be aggregated? defaults to hourly resolution **NOTE**: Intervals are grouped in buckets that start and end based on a day in UTC+0 time. So for the `daily` interval, the group starts (inclusive) and ends (exclusive) at `00:00Z` " ), ] = None, _request_timeout: Union[ @@ -3046,7 +3046,7 @@ def get_statistics_without_preload_content( ) -> RESTResponseType: """Retrieve the statistics of a distribution - Returns the statistics of the distribution in the given time range. The response is a list of statistics records. Each record aggregates the statistics for its time interval. In case no statistics for a time interval exist, no record is returned. The time range for which statistics should be returned can be configured using query parameters. Timestamps are assumed to be UTC. This is especially important for the \"buckets\" when you, for example, return daily information. A day always starts and ends at 00:00Z. **Important Note:** Lower bounds are inclusive, upper bounds are exclusive. If you, for example, want a daily grouped which starts on the 1st Jan and also contains the full 10th Jan day, you would define `2025-01-01T00:00:00Z` as the lower and `2025-01-11T00:00:00Z` as the upper bound. The upper bound is optional. If you omit it, the API will use the start of the next interval as the upper bound. Example: if `interval` is `hourly`, `from` would default to the start of the next hour, if it's `daily`, `from` would default to the start of the next day, etc. + Returns the statistics of the distribution in the given time range. The response is a list of statistics records. Each record aggregates the statistics for its time interval. In case no statistics for a time interval exist, no record is returned. The time range for which statistics should be returned can be configured using query parameters. Timestamps are assumed to be UTC. This is especially important for the \"buckets\" when you, for example, return daily information. A day always starts and ends at 00:00Z. **Important Note:** Lower bounds are inclusive, upper bounds are exclusive. If you, for example, want a daily grouped which starts on the 1st Jan and also contains the full 10th Jan day, you would define `2025-01-01T00:00:00Z` as the lower and `2025-01-11T00:00:00Z` as the upper bound. The upper bound is optional. If you omit it, the API will use the start of the next interval as the upper bound. Example: if `interval` is `hourly`, `from` would default to the start of the next hour, if it's `daily`, `from` would default to the start of the next day, etc. :param project_id: Your STACKIT Project Id (required) :type project_id: str @@ -3054,9 +3054,9 @@ def get_statistics_without_preload_content( :type distribution_id: UUID :param var_from: the start of the time range for which statistics should be returned (required) :type var_from: datetime - :param to: the end of the time range for which statistics should be returned. If not specified, the end of the current time interval is used, e.g. next day for daily, next month for monthly, and so on. + :param to: the end of the time range for which statistics should be returned. If not specified, the end of the current time interval is used, e.g. next day for daily, next month for monthly, and so on. :type to: datetime - :param interval: Over which interval should statistics be aggregated? defaults to hourly resolution **NOTE**: Intervals are grouped in buckets that start and end based on a day in UTC+0 time. So for the `daily` interval, the group starts (inclusive) and ends (exclusive) at `00:00Z` + :param interval: Over which interval should statistics be aggregated? defaults to hourly resolution **NOTE**: Intervals are grouped in buckets that start and end based on a day in UTC+0 time. So for the `daily` interval, the group starts (inclusive) and ends (exclusive) at `00:00Z` :type interval: str :param _request_timeout: timeout setting for this request. If one number provided, it will be total request @@ -3180,7 +3180,7 @@ def list_distributions( page_size: Annotated[ Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], Field( - description="Quantifies how many distributions should be returned on this page. Must be a natural number between 1 and 100 (inclusive) " + description="Quantifies how many distributions should be returned on this page. Must be a natural number between 1 and 100 (inclusive) " ), ] = None, with_waf_status: Annotated[ @@ -3192,13 +3192,13 @@ def list_distributions( page_identifier: Annotated[ Optional[StrictStr], Field( - description='Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get "pushed" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. ' + description='Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get "pushed" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. ' ), ] = None, sort_by: Annotated[ Optional[StrictStr], Field( - description="The following sort options exist. We default to `createdAt` - `id` - Sort by distribution Id using String comparison - `updatedAt` - Sort by when the distribution configuration was last modified, for example by changing the regions or response headers - `createdAt` - Sort by when the distribution was initially created. - `originUrl` - Sort by originUrl using String comparison - `status` - Sort by distribution status, using String comparison - `originUrlRelated` - The originUrl is segmented and reversed before sorting. E.g. `www.example.com` is converted to `com.example.www` for sorting. This way, distributions pointing to the same domain trees are grouped next to each other. " + description="The following sort options exist. We default to `createdAt` - `id` - Sort by distribution Id using String comparison - `updatedAt` - Sort by when the distribution configuration was last modified, for example by changing the regions or response headers - `createdAt` - Sort by when the distribution was initially created. - `originUrl` - Sort by originUrl using String comparison - `status` - Sort by distribution status, using String comparison - `originUrlRelated` - The originUrl is segmented and reversed before sorting. E.g. `www.example.com` is converted to `com.example.www` for sorting. This way, distributions pointing to the same domain trees are grouped next to each other. " ), ] = None, sort_order: Optional[StrictStr] = None, @@ -3214,17 +3214,17 @@ def list_distributions( ) -> ListDistributionsResponse: """List all distributions belonging to a specific project - ListDistributions returns a list of all CDN distributions associated with a given project, ordered by their distribution Id. + ListDistributions returns a list of all CDN distributions associated with a given project, ordered by their distribution Id. :param project_id: Your STACKIT Project Id (required) :type project_id: str - :param page_size: Quantifies how many distributions should be returned on this page. Must be a natural number between 1 and 100 (inclusive) + :param page_size: Quantifies how many distributions should be returned on this page. Must be a natural number between 1 and 100 (inclusive) :type page_size: int :param with_waf_status: If set, the top level of a distribution contains a `waf` property, which defines the status of the waf. This includes a list of all resolved rules. :type with_waf_status: bool - :param page_identifier: Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get \"pushed\" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. + :param page_identifier: Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get \"pushed\" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. :type page_identifier: str - :param sort_by: The following sort options exist. We default to `createdAt` - `id` - Sort by distribution Id using String comparison - `updatedAt` - Sort by when the distribution configuration was last modified, for example by changing the regions or response headers - `createdAt` - Sort by when the distribution was initially created. - `originUrl` - Sort by originUrl using String comparison - `status` - Sort by distribution status, using String comparison - `originUrlRelated` - The originUrl is segmented and reversed before sorting. E.g. `www.example.com` is converted to `com.example.www` for sorting. This way, distributions pointing to the same domain trees are grouped next to each other. + :param sort_by: The following sort options exist. We default to `createdAt` - `id` - Sort by distribution Id using String comparison - `updatedAt` - Sort by when the distribution configuration was last modified, for example by changing the regions or response headers - `createdAt` - Sort by when the distribution was initially created. - `originUrl` - Sort by originUrl using String comparison - `status` - Sort by distribution status, using String comparison - `originUrlRelated` - The originUrl is segmented and reversed before sorting. E.g. `www.example.com` is converted to `com.example.www` for sorting. This way, distributions pointing to the same domain trees are grouped next to each other. :type sort_by: str :param sort_order: :type sort_order: str @@ -3283,7 +3283,7 @@ def list_distributions_with_http_info( page_size: Annotated[ Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], Field( - description="Quantifies how many distributions should be returned on this page. Must be a natural number between 1 and 100 (inclusive) " + description="Quantifies how many distributions should be returned on this page. Must be a natural number between 1 and 100 (inclusive) " ), ] = None, with_waf_status: Annotated[ @@ -3295,13 +3295,13 @@ def list_distributions_with_http_info( page_identifier: Annotated[ Optional[StrictStr], Field( - description='Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get "pushed" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. ' + description='Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get "pushed" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. ' ), ] = None, sort_by: Annotated[ Optional[StrictStr], Field( - description="The following sort options exist. We default to `createdAt` - `id` - Sort by distribution Id using String comparison - `updatedAt` - Sort by when the distribution configuration was last modified, for example by changing the regions or response headers - `createdAt` - Sort by when the distribution was initially created. - `originUrl` - Sort by originUrl using String comparison - `status` - Sort by distribution status, using String comparison - `originUrlRelated` - The originUrl is segmented and reversed before sorting. E.g. `www.example.com` is converted to `com.example.www` for sorting. This way, distributions pointing to the same domain trees are grouped next to each other. " + description="The following sort options exist. We default to `createdAt` - `id` - Sort by distribution Id using String comparison - `updatedAt` - Sort by when the distribution configuration was last modified, for example by changing the regions or response headers - `createdAt` - Sort by when the distribution was initially created. - `originUrl` - Sort by originUrl using String comparison - `status` - Sort by distribution status, using String comparison - `originUrlRelated` - The originUrl is segmented and reversed before sorting. E.g. `www.example.com` is converted to `com.example.www` for sorting. This way, distributions pointing to the same domain trees are grouped next to each other. " ), ] = None, sort_order: Optional[StrictStr] = None, @@ -3317,17 +3317,17 @@ def list_distributions_with_http_info( ) -> ApiResponse[ListDistributionsResponse]: """List all distributions belonging to a specific project - ListDistributions returns a list of all CDN distributions associated with a given project, ordered by their distribution Id. + ListDistributions returns a list of all CDN distributions associated with a given project, ordered by their distribution Id. :param project_id: Your STACKIT Project Id (required) :type project_id: str - :param page_size: Quantifies how many distributions should be returned on this page. Must be a natural number between 1 and 100 (inclusive) + :param page_size: Quantifies how many distributions should be returned on this page. Must be a natural number between 1 and 100 (inclusive) :type page_size: int :param with_waf_status: If set, the top level of a distribution contains a `waf` property, which defines the status of the waf. This includes a list of all resolved rules. :type with_waf_status: bool - :param page_identifier: Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get \"pushed\" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. + :param page_identifier: Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get \"pushed\" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. :type page_identifier: str - :param sort_by: The following sort options exist. We default to `createdAt` - `id` - Sort by distribution Id using String comparison - `updatedAt` - Sort by when the distribution configuration was last modified, for example by changing the regions or response headers - `createdAt` - Sort by when the distribution was initially created. - `originUrl` - Sort by originUrl using String comparison - `status` - Sort by distribution status, using String comparison - `originUrlRelated` - The originUrl is segmented and reversed before sorting. E.g. `www.example.com` is converted to `com.example.www` for sorting. This way, distributions pointing to the same domain trees are grouped next to each other. + :param sort_by: The following sort options exist. We default to `createdAt` - `id` - Sort by distribution Id using String comparison - `updatedAt` - Sort by when the distribution configuration was last modified, for example by changing the regions or response headers - `createdAt` - Sort by when the distribution was initially created. - `originUrl` - Sort by originUrl using String comparison - `status` - Sort by distribution status, using String comparison - `originUrlRelated` - The originUrl is segmented and reversed before sorting. E.g. `www.example.com` is converted to `com.example.www` for sorting. This way, distributions pointing to the same domain trees are grouped next to each other. :type sort_by: str :param sort_order: :type sort_order: str @@ -3386,7 +3386,7 @@ def list_distributions_without_preload_content( page_size: Annotated[ Optional[Annotated[int, Field(le=100, strict=True, ge=1)]], Field( - description="Quantifies how many distributions should be returned on this page. Must be a natural number between 1 and 100 (inclusive) " + description="Quantifies how many distributions should be returned on this page. Must be a natural number between 1 and 100 (inclusive) " ), ] = None, with_waf_status: Annotated[ @@ -3398,13 +3398,13 @@ def list_distributions_without_preload_content( page_identifier: Annotated[ Optional[StrictStr], Field( - description='Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get "pushed" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. ' + description='Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get "pushed" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. ' ), ] = None, sort_by: Annotated[ Optional[StrictStr], Field( - description="The following sort options exist. We default to `createdAt` - `id` - Sort by distribution Id using String comparison - `updatedAt` - Sort by when the distribution configuration was last modified, for example by changing the regions or response headers - `createdAt` - Sort by when the distribution was initially created. - `originUrl` - Sort by originUrl using String comparison - `status` - Sort by distribution status, using String comparison - `originUrlRelated` - The originUrl is segmented and reversed before sorting. E.g. `www.example.com` is converted to `com.example.www` for sorting. This way, distributions pointing to the same domain trees are grouped next to each other. " + description="The following sort options exist. We default to `createdAt` - `id` - Sort by distribution Id using String comparison - `updatedAt` - Sort by when the distribution configuration was last modified, for example by changing the regions or response headers - `createdAt` - Sort by when the distribution was initially created. - `originUrl` - Sort by originUrl using String comparison - `status` - Sort by distribution status, using String comparison - `originUrlRelated` - The originUrl is segmented and reversed before sorting. E.g. `www.example.com` is converted to `com.example.www` for sorting. This way, distributions pointing to the same domain trees are grouped next to each other. " ), ] = None, sort_order: Optional[StrictStr] = None, @@ -3420,17 +3420,17 @@ def list_distributions_without_preload_content( ) -> RESTResponseType: """List all distributions belonging to a specific project - ListDistributions returns a list of all CDN distributions associated with a given project, ordered by their distribution Id. + ListDistributions returns a list of all CDN distributions associated with a given project, ordered by their distribution Id. :param project_id: Your STACKIT Project Id (required) :type project_id: str - :param page_size: Quantifies how many distributions should be returned on this page. Must be a natural number between 1 and 100 (inclusive) + :param page_size: Quantifies how many distributions should be returned on this page. Must be a natural number between 1 and 100 (inclusive) :type page_size: int :param with_waf_status: If set, the top level of a distribution contains a `waf` property, which defines the status of the waf. This includes a list of all resolved rules. :type with_waf_status: bool - :param page_identifier: Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get \"pushed\" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. + :param page_identifier: Identifier is returned by the previous response and is used to request the next page. As the `pageIdentifier` encodes an element, inserts during pagination will *not* shift the result. So a scenario like: - Start listing first page - Insert new element - Start listing second page will *never* result in an element from the first page to get \"pushed\" to the second page, like it could occur with basic limit + offset pagination. The identifier should be treated as an opaque string and never modified. Only pass values returned by the API. :type page_identifier: str - :param sort_by: The following sort options exist. We default to `createdAt` - `id` - Sort by distribution Id using String comparison - `updatedAt` - Sort by when the distribution configuration was last modified, for example by changing the regions or response headers - `createdAt` - Sort by when the distribution was initially created. - `originUrl` - Sort by originUrl using String comparison - `status` - Sort by distribution status, using String comparison - `originUrlRelated` - The originUrl is segmented and reversed before sorting. E.g. `www.example.com` is converted to `com.example.www` for sorting. This way, distributions pointing to the same domain trees are grouped next to each other. + :param sort_by: The following sort options exist. We default to `createdAt` - `id` - Sort by distribution Id using String comparison - `updatedAt` - Sort by when the distribution configuration was last modified, for example by changing the regions or response headers - `createdAt` - Sort by when the distribution was initially created. - `originUrl` - Sort by originUrl using String comparison - `status` - Sort by distribution status, using String comparison - `originUrlRelated` - The originUrl is segmented and reversed before sorting. E.g. `www.example.com` is converted to `com.example.www` for sorting. This way, distributions pointing to the same domain trees are grouped next to each other. :type sort_by: str :param sort_order: :type sort_order: str @@ -4079,7 +4079,7 @@ def purge_cache( ) -> object: """Clear distribution cache - Clear the cache for this distribution. All content, regardless of its staleness, will get refetched from the host. + Clear the cache for this distribution. All content, regardless of its staleness, will get refetched from the host. :param project_id: Your STACKIT Project Id (required) :type project_id: str @@ -4150,7 +4150,7 @@ def purge_cache_with_http_info( ) -> ApiResponse[object]: """Clear distribution cache - Clear the cache for this distribution. All content, regardless of its staleness, will get refetched from the host. + Clear the cache for this distribution. All content, regardless of its staleness, will get refetched from the host. :param project_id: Your STACKIT Project Id (required) :type project_id: str @@ -4221,7 +4221,7 @@ def purge_cache_without_preload_content( ) -> RESTResponseType: """Clear distribution cache - Clear the cache for this distribution. All content, regardless of its staleness, will get refetched from the host. + Clear the cache for this distribution. All content, regardless of its staleness, will get refetched from the host. :param project_id: Your STACKIT Project Id (required) :type project_id: str diff --git a/services/cdn/src/stackit/cdn/models/__init__.py b/services/cdn/src/stackit/cdn/models/__init__.py index 4db1a0de6..d1d31bd1d 100644 --- a/services/cdn/src/stackit/cdn/models/__init__.py +++ b/services/cdn/src/stackit/cdn/models/__init__.py @@ -109,6 +109,8 @@ 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.tls_config import TlsConfig +from stackit.cdn.models.tls_config_patch import TlsConfigPatch 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 diff --git a/services/cdn/src/stackit/cdn/models/config.py b/services/cdn/src/stackit/cdn/models/config.py index 8a4c40d1c..a36b8dfa4 100644 --- a/services/cdn/src/stackit/cdn/models/config.py +++ b/services/cdn/src/stackit/cdn/models/config.py @@ -17,7 +17,13 @@ import pprint from typing import Any, ClassVar, Dict, List, Optional, Set -from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic import ( + BaseModel, + ConfigDict, + Field, + StrictBool, + StrictStr, +) from typing_extensions import Annotated, Self from stackit.cdn.models.config_backend import ConfigBackend @@ -25,6 +31,7 @@ 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.tls_config import TlsConfig from stackit.cdn.models.waf_config import WafConfig @@ -35,18 +42,22 @@ class Config(BaseModel): backend: ConfigBackend blocked_countries: List[StrictStr] = Field( - description="Restricts access to your content based on country. We use the ISO 3166-1 alpha-2 standard for country codes (e.g. DE, ES, GB). This setting blocks users from the specified countries. ", + description="Restricts access to your content based on country. We use the ISO 3166-1 alpha-2 standard for country codes (e.g. DE, ES, GB). This setting blocks users from the specified countries. ", alias="blockedCountries", ) blocked_ips: List[StrictStr] = Field( - description="Restricts access to your content by specifying a list of blocked IPv4 addresses. This feature enhances security and privacy by preventing these addresses from accessing your distribution. ", + description="Restricts access to your content by specifying a list of blocked IPv4 addresses. This feature enhances security and privacy by preventing these addresses from accessing your distribution. ", alias="blockedIps", ) default_cache_duration: Optional[StrictStr] = Field( default=None, - description="Sets the default cache duration for the distribution. The default cache duration is applied when a 'Cache-Control' header is not presented in the origin's response. We use ISO8601 duration format for cache duration (e.g. P1DT2H30M) ", + description="Sets the default cache duration for the distribution. The default cache duration is applied when a 'Cache-Control' header is not presented in the origin's response. We use ISO8601 duration format for cache duration (e.g. P1DT2H30M) ", alias="defaultCacheDuration", ) + forward_host_header: StrictBool = Field( + description="Enabling this allows the 'Host' header to be passed through to the origin. ", + alias="forwardHostHeader", + ) log_sink: Optional[LokiLogSink] = Field(default=None, alias="logSink") monthly_limit_bytes: Optional[Annotated[int, Field(strict=True, ge=0)]] = Field( default=None, @@ -56,17 +67,25 @@ class Config(BaseModel): optimizer: Optional[Optimizer] = None redirects: Optional[RedirectConfig] = None regions: Annotated[List[Region], Field(min_length=1)] + strip_response_cookies: StrictBool = Field( + description="Enable this to prevent origin-level cookies from being forwarded to the end user. ", + alias="stripResponseCookies", + ) + tls: TlsConfig waf: WafConfig __properties: ClassVar[List[str]] = [ "backend", "blockedCountries", "blockedIps", "defaultCacheDuration", + "forwardHostHeader", "logSink", "monthlyLimitBytes", "optimizer", "redirects", "regions", + "stripResponseCookies", + "tls", "waf", ] @@ -119,6 +138,9 @@ def to_dict(self) -> Dict[str, Any]: # 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 tls + if self.tls: + _dict["tls"] = self.tls.to_dict() # override the default output from pydantic by calling `to_dict()` of waf if self.waf: _dict["waf"] = self.waf.to_dict() @@ -149,11 +171,14 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "blockedCountries": obj.get("blockedCountries"), "blockedIps": obj.get("blockedIps"), "defaultCacheDuration": obj.get("defaultCacheDuration"), + "forwardHostHeader": obj.get("forwardHostHeader"), "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"), + "stripResponseCookies": obj.get("stripResponseCookies"), + "tls": TlsConfig.from_dict(obj["tls"]) if obj.get("tls") is not None else None, "waf": WafConfig.from_dict(obj["waf"]) if obj.get("waf") is not None else None, } ) diff --git a/services/cdn/src/stackit/cdn/models/config_patch.py b/services/cdn/src/stackit/cdn/models/config_patch.py index 6d143dc1b..04471f768 100644 --- a/services/cdn/src/stackit/cdn/models/config_patch.py +++ b/services/cdn/src/stackit/cdn/models/config_patch.py @@ -17,7 +17,13 @@ import pprint from typing import Any, ClassVar, Dict, List, Optional, Set -from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic import ( + BaseModel, + ConfigDict, + Field, + StrictBool, + StrictStr, +) from typing_extensions import Annotated, Self from stackit.cdn.models.config_patch_backend import ConfigPatchBackend @@ -25,6 +31,7 @@ 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.tls_config_patch import TlsConfigPatch from stackit.cdn.models.waf_config_patch import WafConfigPatch @@ -36,19 +43,24 @@ class ConfigPatch(BaseModel): backend: Optional[ConfigPatchBackend] = None blocked_countries: Optional[List[StrictStr]] = Field( default=None, - description="Restricts access to your content based on country. We use the ISO 3166-1 alpha-2 standard for country codes (e.g., DE, ES, GB). This setting blocks users from the specified countries. ", + description="Restricts access to your content based on country. We use the ISO 3166-1 alpha-2 standard for country codes (e.g., DE, ES, GB). This setting blocks users from the specified countries. ", alias="blockedCountries", ) blocked_ips: Optional[List[StrictStr]] = Field( default=None, - description="Restricts access to your content by specifying a list of blocked IPv4 addresses. This feature enhances security and privacy by preventing these addresses from accessing your distribution. ", + description="Restricts access to your content by specifying a list of blocked IPv4 addresses. This feature enhances security and privacy by preventing these addresses from accessing your distribution. ", alias="blockedIps", ) default_cache_duration: Optional[StrictStr] = Field( default=None, - description="Sets the default cache duration for the distribution. The default cache duration is applied when a 'Cache-Control' header is not presented in the origin's response. We use ISO8601 duration format for cache duration (e.g. P1DT2H30M) ", + description="Sets the default cache duration for the distribution. The default cache duration is applied when a 'Cache-Control' header is not presented in the origin's response. We use ISO8601 duration format for cache duration (e.g. P1DT2H30M) ", alias="defaultCacheDuration", ) + forward_host_header: Optional[StrictBool] = Field( + default=None, + description="Enabling this allows the 'Host' header to be passed through to the origin. ", + alias="forwardHostHeader", + ) log_sink: Optional[LokiLogSinkPatch] = Field(default=None, alias="logSink") monthly_limit_bytes: Optional[Annotated[int, Field(strict=True, ge=0)]] = Field( default=None, @@ -58,17 +70,26 @@ class ConfigPatch(BaseModel): optimizer: Optional[OptimizerPatch] = None redirects: Optional[RedirectConfig] = None regions: Optional[Annotated[List[Region], Field(min_length=1)]] = None + strip_response_cookies: Optional[StrictBool] = Field( + default=None, + description="Enable this to prevent origin-level cookies from being forwarded to the end user. ", + alias="stripResponseCookies", + ) + tls: Optional[TlsConfigPatch] = None waf: Optional[WafConfigPatch] = None __properties: ClassVar[List[str]] = [ "backend", "blockedCountries", "blockedIps", "defaultCacheDuration", + "forwardHostHeader", "logSink", "monthlyLimitBytes", "optimizer", "redirects", "regions", + "stripResponseCookies", + "tls", "waf", ] @@ -121,6 +142,9 @@ def to_dict(self) -> Dict[str, Any]: # 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 tls + if self.tls: + _dict["tls"] = self.tls.to_dict() # override the default output from pydantic by calling `to_dict()` of waf if self.waf: _dict["waf"] = self.waf.to_dict() @@ -156,11 +180,14 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "blockedCountries": obj.get("blockedCountries"), "blockedIps": obj.get("blockedIps"), "defaultCacheDuration": obj.get("defaultCacheDuration"), + "forwardHostHeader": obj.get("forwardHostHeader"), "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"), + "stripResponseCookies": obj.get("stripResponseCookies"), + "tls": TlsConfigPatch.from_dict(obj["tls"]) if obj.get("tls") is not None else None, "waf": WafConfigPatch.from_dict(obj["waf"]) if obj.get("waf") is not None else None, } ) 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 cc7422849..39755349d 100644 --- a/services/cdn/src/stackit/cdn/models/create_distribution_payload.py +++ b/services/cdn/src/stackit/cdn/models/create_distribution_payload.py @@ -17,7 +17,13 @@ import pprint from typing import Any, ClassVar, Dict, List, Optional, Set -from pydantic import BaseModel, ConfigDict, Field, StrictStr +from pydantic import ( + BaseModel, + ConfigDict, + Field, + StrictBool, + StrictStr, +) from typing_extensions import Annotated, Self from stackit.cdn.models.create_distribution_payload_backend import ( @@ -27,6 +33,7 @@ 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.tls_config import TlsConfig from stackit.cdn.models.waf_config import WafConfig @@ -38,22 +45,27 @@ class CreateDistributionPayload(BaseModel): backend: CreateDistributionPayloadBackend blocked_countries: Optional[List[StrictStr]] = Field( default=None, - description="Restricts access to your content based on country. We use the ISO 3166-1 alpha-2 standard for country codes (e.g., DE, ES, GB). This setting blocks users from the specified countries. ", + description="Restricts access to your content based on country. We use the ISO 3166-1 alpha-2 standard for country codes (e.g., DE, ES, GB). This setting blocks users from the specified countries. ", alias="blockedCountries", ) blocked_ips: Optional[List[StrictStr]] = Field( default=None, - description="Restricts access to your content by specifying a list of blocked IPv4 addresses. This feature enhances security and privacy by preventing these addresses from accessing your distribution. ", + description="Restricts access to your content by specifying a list of blocked IPv4 addresses. This feature enhances security and privacy by preventing these addresses from accessing your distribution. ", alias="blockedIps", ) default_cache_duration: Optional[StrictStr] = Field( default=None, - description="Sets the default cache duration for the distribution. The default cache duration is applied when a 'Cache-Control' header is not presented in the origin's response. We use ISO8601 duration format for cache duration (e.g. P1DT2H30M) ", + description="Sets the default cache duration for the distribution. The default cache duration is applied when a 'Cache-Control' header is not presented in the origin's response. We use ISO8601 duration format for cache duration (e.g. P1DT2H30M) ", alias="defaultCacheDuration", ) + forward_host_header: Optional[StrictBool] = Field( + default=None, + description="Enabling this allows the 'Host' header to be passed through to the origin. ", + alias="forwardHostHeader", + ) intent_id: Optional[StrictStr] = Field( default=None, - description="While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple POST-Requests with the same `intentId` for a given `projectId` are received, all but the first request are dropped. ", + description="While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple POST-Requests with the same `intentId` for a given `projectId` are received, all but the first request are dropped. ", alias="intentId", ) log_sink: Optional[LokiLogSinkCreate] = Field(default=None, alias="logSink") @@ -67,18 +79,27 @@ 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. " ) + strip_response_cookies: Optional[StrictBool] = Field( + default=None, + description="Enable this to prevent origin-level cookies from being forwarded to the end user. ", + alias="stripResponseCookies", + ) + tls: Optional[TlsConfig] = None waf: Optional[WafConfig] = None __properties: ClassVar[List[str]] = [ "backend", "blockedCountries", "blockedIps", "defaultCacheDuration", + "forwardHostHeader", "intentId", "logSink", "monthlyLimitBytes", "optimizer", "redirects", "regions", + "stripResponseCookies", + "tls", "waf", ] @@ -131,6 +152,9 @@ def to_dict(self) -> Dict[str, Any]: # 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 tls + if self.tls: + _dict["tls"] = self.tls.to_dict() # override the default output from pydantic by calling `to_dict()` of waf if self.waf: _dict["waf"] = self.waf.to_dict() @@ -155,12 +179,15 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "blockedCountries": obj.get("blockedCountries"), "blockedIps": obj.get("blockedIps"), "defaultCacheDuration": obj.get("defaultCacheDuration"), + "forwardHostHeader": obj.get("forwardHostHeader"), "intentId": obj.get("intentId"), "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"), + "stripResponseCookies": obj.get("stripResponseCookies"), + "tls": TlsConfig.from_dict(obj["tls"]) if obj.get("tls") is not None else None, "waf": WafConfig.from_dict(obj["waf"]) if obj.get("waf") is not None else None, } ) diff --git a/services/cdn/src/stackit/cdn/models/distribution.py b/services/cdn/src/stackit/cdn/models/distribution.py index 675010af7..84f4a34fc 100644 --- a/services/cdn/src/stackit/cdn/models/distribution.py +++ b/services/cdn/src/stackit/cdn/models/distribution.py @@ -45,7 +45,7 @@ class Distribution(BaseModel): id: StrictStr project_id: StrictStr = Field(alias="projectId") status: StrictStr = Field( - description="- `CREATING`: The distribution was just created. All the relevant resources are created in the background. Once fully reconciled, this switches to `ACTIVE`. If there are any issues, the status changes to `ERROR`. You can look at the `errors` array to get more infos. - `ACTIVE`: The usual state. The desired configuration is synced, there are no errors - `UPDATING`: The state when there is a discrepancy between the desired and actual configuration state. This occurs right after an update. Will switch to `ACTIVE` or `ERROR`, depending on if synchronizing succeeds or not. - `DELETING`: The state right after a delete request was received. The distribution will stay in this status until all resources have been successfully removed, or until we encounter an `ERROR` state. **NOTE:** You can keep fetching the distribution while it is deleting. After successful deletion, trying to get a distribution will return a 404 Not Found response - `ERROR`: The error state. Look at the `errors` array for more info. " + description="- `CREATING`: The distribution was just created. All the relevant resources are created in the background. Once fully reconciled, this switches to `ACTIVE`. If there are any issues, the status changes to `ERROR`. You can look at the `errors` array to get more infos. - `ACTIVE`: The usual state. The desired configuration is synced, there are no errors - `UPDATING`: The state when there is a discrepancy between the desired and actual configuration state. This occurs right after an update. Will switch to `ACTIVE` or `ERROR`, depending on if synchronizing succeeds or not. - `DELETING`: The state right after a delete request was received. The distribution will stay in this status until all resources have been successfully removed, or until we encounter an `ERROR` state. **NOTE:** You can keep fetching the distribution while it is deleting. After successful deletion, trying to get a distribution will return a 404 Not Found response - `ERROR`: The error state. Look at the `errors` array for more info. " ) updated_at: datetime = Field( description="RFC3339 string which returns the last time the distribution configuration was modified. ", diff --git a/services/cdn/src/stackit/cdn/models/distribution_statistics_record_regions.py b/services/cdn/src/stackit/cdn/models/distribution_statistics_record_regions.py index 63e0a9414..e2173fbd4 100644 --- a/services/cdn/src/stackit/cdn/models/distribution_statistics_record_regions.py +++ b/services/cdn/src/stackit/cdn/models/distribution_statistics_record_regions.py @@ -27,7 +27,7 @@ class DistributionStatisticsRecordRegions(BaseModel): """ - Mapping of regions to the metrics for this region for the defined time interval All regions are always present. If no traffic was reported for a region, it will still contain 0-filled properties + Mapping of regions to the metrics for this region for the defined time interval All regions are always present. If no traffic was reported for a region, it will still contain 0-filled properties """ # noqa: E501 af: DistributionStatisticsRecordEntry = Field(alias="AF") diff --git a/services/cdn/src/stackit/cdn/models/distribution_waf.py b/services/cdn/src/stackit/cdn/models/distribution_waf.py index 1ac6394f7..5511d60f3 100644 --- a/services/cdn/src/stackit/cdn/models/distribution_waf.py +++ b/services/cdn/src/stackit/cdn/models/distribution_waf.py @@ -25,7 +25,7 @@ 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!** + 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") diff --git a/services/cdn/src/stackit/cdn/models/get_cache_info_response.py b/services/cdn/src/stackit/cdn/models/get_cache_info_response.py index d0625f893..7a8da9ef4 100644 --- a/services/cdn/src/stackit/cdn/models/get_cache_info_response.py +++ b/services/cdn/src/stackit/cdn/models/get_cache_info_response.py @@ -34,7 +34,7 @@ class GetCacheInfoResponse(BaseModel): history: List[GetCacheInfoResponseHistoryEntry] last_purge_time: Optional[datetime] = Field( - description="Returns the last time the cache was purged by calling the PurgeCache endpoint. Time represented as RFC3339 compliant string. If the cache was never purged, this returns `null` ", + description="Returns the last time the cache was purged by calling the PurgeCache endpoint. Time represented as RFC3339 compliant string. If the cache was never purged, this returns `null` ", alias="lastPurgeTime", ) __properties: ClassVar[List[str]] = ["history", "lastPurgeTime"] diff --git a/services/cdn/src/stackit/cdn/models/get_logs_search_filters_response.py b/services/cdn/src/stackit/cdn/models/get_logs_search_filters_response.py index 12a4b1af4..193d9ac4f 100644 --- a/services/cdn/src/stackit/cdn/models/get_logs_search_filters_response.py +++ b/services/cdn/src/stackit/cdn/models/get_logs_search_filters_response.py @@ -33,7 +33,7 @@ class GetLogsSearchFiltersResponse(BaseModel): cache: List[StrictStr] data_center: GetLogsSearchFiltersResponseDatacenterBlock = Field(alias="dataCenter") remote_country: List[Annotated[str, Field(min_length=2, strict=True, max_length=2)]] = Field( - description="List of ISO-3166 Alpha2 Country Codes matching the input filter. Response is ordered in ascending order. For more Info about the country codes, see https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 ", + description="List of ISO-3166 Alpha2 Country Codes matching the input filter. Response is ordered in ascending order. For more Info about the country codes, see https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 ", alias="remoteCountry", ) status: List[Annotated[int, Field(strict=True, ge=0)]] = Field( diff --git a/services/cdn/src/stackit/cdn/models/http_backend.py b/services/cdn/src/stackit/cdn/models/http_backend.py index a4710ab09..fecec512a 100644 --- a/services/cdn/src/stackit/cdn/models/http_backend.py +++ b/services/cdn/src/stackit/cdn/models/http_backend.py @@ -30,11 +30,11 @@ class HttpBackend(BaseModel): description="An object mapping multiple alternative origins to country codes. Any request from one of those country codes will route to the alternative origin. Do note that country codes may only be used once. You cannot have a country be assigned to multiple alternative origins. " ) origin_request_headers: Dict[str, StrictStr] = Field( - description="Headers that will be sent with every request to the configured origin. **WARNING**: Do not store sensitive values in the headers. The configuration is stored as plain text. ", + description="Headers that will be sent with every request to the configured origin. **WARNING**: Do not store sensitive values in the headers. The configuration is stored as plain text. ", alias="originRequestHeaders", ) origin_url: StrictStr = Field( - description="The origin of the content that should be made available through the CDN. Note that the path and query parameters are ignored. Ports are allowed. If no protocol is provided, `https` is assumed. So `www.example.com:1234/somePath?q=123` is normalized to `https://www.example.com:1234` ", + description="The origin of the content that should be made available through the CDN. Note that the path and query parameters are ignored. Ports are allowed. If no protocol is provided, `https` is assumed. So `www.example.com:1234/somePath?q=123` is normalized to `https://www.example.com:1234` ", alias="originUrl", ) type: StrictStr diff --git a/services/cdn/src/stackit/cdn/models/http_backend_create.py b/services/cdn/src/stackit/cdn/models/http_backend_create.py index 50e3db260..734a0bf50 100644 --- a/services/cdn/src/stackit/cdn/models/http_backend_create.py +++ b/services/cdn/src/stackit/cdn/models/http_backend_create.py @@ -32,11 +32,11 @@ class HttpBackendCreate(BaseModel): ) 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 configuration is stored as plain text. ", + description="Headers that will be sent with every request to the configured origin. **WARNING**: Do not store sensitive values in the headers. The configuration is stored as plain text. ", alias="originRequestHeaders", ) origin_url: StrictStr = Field( - description="The origin of the content that should be made available through the CDN. Note that the path and query parameters are ignored. Ports are allowed. If no protocol is provided, `https` is assumed. So `www.example.com:1234/somePath?q=123` is normalized to `https://www.example.com:1234` ", + description="The origin of the content that should be made available through the CDN. Note that the path and query parameters are ignored. Ports are allowed. If no protocol is provided, `https` is assumed. So `www.example.com:1234/somePath?q=123` is normalized to `https://www.example.com:1234` ", alias="originUrl", ) type: StrictStr diff --git a/services/cdn/src/stackit/cdn/models/http_backend_patch.py b/services/cdn/src/stackit/cdn/models/http_backend_patch.py index ed86d2ae0..5b881e76e 100644 --- a/services/cdn/src/stackit/cdn/models/http_backend_patch.py +++ b/services/cdn/src/stackit/cdn/models/http_backend_patch.py @@ -32,7 +32,7 @@ class HttpBackendPatch(BaseModel): ) 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 configuration is stored as plain text. ", + description="Headers that will be sent with every request to the configured origin. **WARNING**: Do not store sensitive values in the headers. The configuration is stored as plain text. ", alias="originRequestHeaders", ) origin_url: Optional[StrictStr] = Field(default=None, alias="originUrl") diff --git a/services/cdn/src/stackit/cdn/models/patch_distribution_payload.py b/services/cdn/src/stackit/cdn/models/patch_distribution_payload.py index 769a256d9..8a4c3a802 100644 --- a/services/cdn/src/stackit/cdn/models/patch_distribution_payload.py +++ b/services/cdn/src/stackit/cdn/models/patch_distribution_payload.py @@ -31,7 +31,7 @@ class PatchDistributionPayload(BaseModel): config: Optional[ConfigPatch] = None intent_id: Optional[StrictStr] = Field( default=None, - description="While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple modifying requests with the same `intentId` for a given `projectId` are received, all but the first request are dropped. ", + description="While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple modifying requests with the same `intentId` for a given `projectId` are received, all but the first request are dropped. ", alias="intentId", ) __properties: ClassVar[List[str]] = ["config", "intentId"] diff --git a/services/cdn/src/stackit/cdn/models/purge_cache_payload.py b/services/cdn/src/stackit/cdn/models/purge_cache_payload.py index 1ca6c5cb3..43af8f7ba 100644 --- a/services/cdn/src/stackit/cdn/models/purge_cache_payload.py +++ b/services/cdn/src/stackit/cdn/models/purge_cache_payload.py @@ -28,7 +28,7 @@ class PurgeCachePayload(BaseModel): path: Optional[StrictStr] = Field( default=None, - description="Defines an optional path. If this is set, a granular purge is done. If missing, the entire cache is invalidated. During a granular cache purge, only the provided path is purged. Please do not that for example `/some/path` and `/some/path.txt` are considered different paths. ", + description="Defines an optional path. If this is set, a granular purge is done. If missing, the entire cache is invalidated. During a granular cache purge, only the provided path is purged. Please do not that for example `/some/path` and `/some/path.txt` are considered different paths. ", ) __properties: ClassVar[List[str]] = ["path"] diff --git a/services/cdn/src/stackit/cdn/models/put_custom_domain_custom_certificate.py b/services/cdn/src/stackit/cdn/models/put_custom_domain_custom_certificate.py index b4d4737cb..81a3de020 100644 --- a/services/cdn/src/stackit/cdn/models/put_custom_domain_custom_certificate.py +++ b/services/cdn/src/stackit/cdn/models/put_custom_domain_custom_certificate.py @@ -36,7 +36,7 @@ class PutCustomDomainCustomCertificate(BaseModel): key: StrictStr = Field(description="base64-encoded PEM encoded key") skip_dns_check: Optional[StrictBool] = Field( default=None, - description="When adding a new custom domain, we do a check to verify that your Domain points to the managed domain via a CNAME or ALIAS. If this is not the case, the call would usually reject. This additional property is an escape hatch to this functionality. It's useful for when you are migrating onto STACKIT CDN. It allows you to migrate without downtime. By providing a custom certificate with `skipDnsCheck` set to `true`, we will not check the Record for correctness. Then, once the CDN is set up, you can change the CNAME Record on your DNS and update the Custom Domain entry to disable this check, or switch to a managed certificate. This field is optional. If not set, the check is **not** skipped. ", + description="When adding a new custom domain, we do a check to verify that your Domain points to the managed domain via a CNAME or ALIAS. If this is not the case, the call would usually reject. This additional property is an escape hatch to this functionality. It's useful for when you are migrating onto STACKIT CDN. It allows you to migrate without downtime. By providing a custom certificate with `skipDnsCheck` set to `true`, we will not check the Record for correctness. Then, once the CDN is set up, you can change the CNAME Record on your DNS and update the Custom Domain entry to disable this check, or switch to a managed certificate. This field is optional. If not set, the check is **not** skipped. ", alias="skipDnsCheck", ) type: StrictStr diff --git a/services/cdn/src/stackit/cdn/models/put_custom_domain_payload.py b/services/cdn/src/stackit/cdn/models/put_custom_domain_payload.py index 5ebfce3ec..cd60d2e5d 100644 --- a/services/cdn/src/stackit/cdn/models/put_custom_domain_payload.py +++ b/services/cdn/src/stackit/cdn/models/put_custom_domain_payload.py @@ -33,7 +33,7 @@ class PutCustomDomainPayload(BaseModel): certificate: Optional[PutCustomDomainPayloadCertificate] = None intent_id: Optional[StrictStr] = Field( default=None, - description="While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple modifying Requests with the same `intentId` for a given `projectId` are received, all but the first request are dropped. ", + description="While optional, it is greatly encouraged to provide an `intentId`. This is used to deduplicate requests. If multiple modifying Requests with the same `intentId` for a given `projectId` are received, all but the first request are dropped. ", alias="intentId", ) __properties: ClassVar[List[str]] = ["certificate", "intentId"] diff --git a/services/cdn/src/stackit/cdn/models/tls_config.py b/services/cdn/src/stackit/cdn/models/tls_config.py new file mode 100644 index 000000000..b154b096a --- /dev/null +++ b/services/cdn/src/stackit/cdn/models/tls_config.py @@ -0,0 +1,86 @@ +# coding: utf-8 + +""" + STACKIT 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, StrictBool +from typing_extensions import Self + + +class TlsConfig(BaseModel): + """ + Configuration for TLS protocol versions. Note: Enabling older TLS versions (1.0, 1.1) is generally discouraged for security reasons. + """ # noqa: E501 + + enable_tls10: StrictBool = Field( + description="If set to true, the distribution will accept connections using TLS 1.0.", alias="enableTls10" + ) + enable_tls11: StrictBool = Field( + description="If set to true, the distribution will accept connections using TLS 1.1.", alias="enableTls11" + ) + __properties: ClassVar[List[str]] = ["enableTls10", "enableTls11"] + + 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 TlsConfig 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 TlsConfig from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"enableTls10": obj.get("enableTls10"), "enableTls11": obj.get("enableTls11")}) + return _obj diff --git a/services/cdn/src/stackit/cdn/models/tls_config_patch.py b/services/cdn/src/stackit/cdn/models/tls_config_patch.py new file mode 100644 index 000000000..23e3a68a1 --- /dev/null +++ b/services/cdn/src/stackit/cdn/models/tls_config_patch.py @@ -0,0 +1,90 @@ +# coding: utf-8 + +""" + STACKIT 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, StrictBool +from typing_extensions import Self + + +class TlsConfigPatch(BaseModel): + """ + Configuration for TLS protocol versions. Note: Enabling older TLS versions (1.0, 1.1) is generally discouraged for security reasons. + """ # noqa: E501 + + enable_tls10: Optional[StrictBool] = Field( + default=None, + description="If set to true, the distribution will accept connections using TLS 1.0.", + alias="enableTls10", + ) + enable_tls11: Optional[StrictBool] = Field( + default=None, + description="If set to true, the distribution will accept connections using TLS 1.1.", + alias="enableTls11", + ) + __properties: ClassVar[List[str]] = ["enableTls10", "enableTls11"] + + 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 TlsConfigPatch 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 TlsConfigPatch from a dict""" + if obj is None: + return None + + if not isinstance(obj, dict): + return cls.model_validate(obj) + + _obj = cls.model_validate({"enableTls10": obj.get("enableTls10"), "enableTls11": obj.get("enableTls11")}) + return _obj diff --git a/services/cdn/src/stackit/cdn/models/waf_config.py b/services/cdn/src/stackit/cdn/models/waf_config.py index 99f5d6fb6..89527d8b9 100644 --- a/services/cdn/src/stackit/cdn/models/waf_config.py +++ b/services/cdn/src/stackit/cdn/models/waf_config.py @@ -27,7 +27,7 @@ class WafConfig(BaseModel): """ - Configuration of the WAF of a distribution A WAF Config always contains a WAF Mode and Type. If a WAF was never enabled, most of the properties are not present. To **enable** the WAF for your Distribution, you must set the `mode` to `ENABLED` or `LOG_ONLY`. This causes the other properties to be populated. ## Rules There are 9 properties used to control which Rules are enabled, disabled or set to Log-Only. These properties can be grouped in 3 groups of 3. Each of these groups varies in specificity: Rules are more specific than Rule Groups, which in turn are more specific than Collections. More specific definitions override more generic definitions. ### Collections - `enabledRuleCollectionIds` - `disabledRuleCollectionIds` - `logOnlyRuleCollectionIds` These are the least specific selectors. As of 2025, only two collections exist: - `@builtin/crs/response`, containing all Rules regarding Responses - `@builtin/crs/request`, containing all Rules regarding Requests More collections may be added in the future ### Rule Groups - `enabledRuleGroupIds` - `disabledRuleGroupIds` - `logOnlyRuleGroupIds` These are more specific than Collections and will override their selector. You can find all available Rule Groups by calling the `ListWafCollections` Operation. ### Rules - `enabledRuleIds` - `disabledRuleIds` - `logOnlyRuleGds` Being the most specific selectors, these will override both Collection and Rule Group selectors. You can find all available Rule Groups by calling the `ListWafCollections` Operation. ### TIP: Review resolved config If you call `GetDistribution` with `?withWafStatus=true`, you get back a resolved WAF Rules Config which contains a `waf` property which you can inspect to see why a Rule is either enabled, disabled or logOnly. + Configuration of the WAF of a distribution A WAF Config always contains a WAF Mode and Type. If a WAF was never enabled, most of the properties are not present. To **enable** the WAF for your Distribution, you must set the `mode` to `ENABLED` or `LOG_ONLY`. This causes the other properties to be populated. ## Rules There are 9 properties used to control which Rules are enabled, disabled or set to Log-Only. These properties can be grouped in 3 groups of 3. Each of these groups varies in specificity: Rules are more specific than Rule Groups, which in turn are more specific than Collections. More specific definitions override more generic definitions. ### Collections - `enabledRuleCollectionIds` - `disabledRuleCollectionIds` - `logOnlyRuleCollectionIds` These are the least specific selectors. As of 2025, only two collections exist: - `@builtin/crs/response`, containing all Rules regarding Responses - `@builtin/crs/request`, containing all Rules regarding Requests More collections may be added in the future ### Rule Groups - `enabledRuleGroupIds` - `disabledRuleGroupIds` - `logOnlyRuleGroupIds` These are more specific than Collections and will override their selector. You can find all available Rule Groups by calling the `ListWafCollections` Operation. ### Rules - `enabledRuleIds` - `disabledRuleIds` - `logOnlyRuleGds` Being the most specific selectors, these will override both Collection and Rule Group selectors. You can find all available Rule Groups by calling the `ListWafCollections` Operation. ### TIP: Review resolved config If you call `GetDistribution` with `?withWafStatus=true`, you get back a resolved WAF Rules Config which contains a `waf` property which you can inspect to see why a Rule is either enabled, disabled or logOnly. """ # noqa: E501 allowed_http_methods: Optional[Annotated[List[StrictStr], Field(min_length=1)]] = Field( @@ -61,7 +61,7 @@ class WafConfig(BaseModel): default=None, description="Ids of WAF Rule Groups to mark as enabled ", alias="enabledRuleGroupIds" ) enabled_rule_ids: List[StrictStr] = Field( - description="Ids of the WAF rules that are **explicitly** enabled for this distribution. If this rule is in a disabled / log Only RuleGroup or Collection, it will be enabled regardless as `enabledRuleIds` overrides those in specificity. Do note that rules can also be enabled because a Rulegroup or Collection is enabled. **DO NOT** use this property to find all active rules. Instead, pass `?withWafStatus=true` as a query parameter to `GetDistribution` or `ListDistributions`. This will expose the `waf` Property on distribution Level. From there you can `$.waf.enabledRules.map(e => e.id)` to get a list of all enabled rules. ", + description="Ids of the WAF rules that are **explicitly** enabled for this distribution. If this rule is in a disabled / log Only RuleGroup or Collection, it will be enabled regardless as `enabledRuleIds` overrides those in specificity. Do note that rules can also be enabled because a Rulegroup or Collection is enabled. **DO NOT** use this property to find all active rules. Instead, pass `?withWafStatus=true` as a query parameter to `GetDistribution` or `ListDistributions`. This will expose the `waf` Property on distribution Level. From there you can `$.waf.enabledRules.map(e => e.id)` to get a list of all enabled rules. ", alias="enabledRuleIds", ) log_only_rule_collection_ids: Optional[List[StrictStr]] = Field( diff --git a/services/cdn/src/stackit/cdn/models/waf_paranoia_level.py b/services/cdn/src/stackit/cdn/models/waf_paranoia_level.py index 4189790d1..87ab6ee10 100644 --- a/services/cdn/src/stackit/cdn/models/waf_paranoia_level.py +++ b/services/cdn/src/stackit/cdn/models/waf_paranoia_level.py @@ -21,7 +21,7 @@ class WafParanoiaLevel(str, Enum): """ - The paranoia level defines how aggressively the WAF should action on requests. It ranges from `L1` (least strict, lowest chance of false positives) to `L4` (most strict, highest chance of false positives). A higher paranoia level is more effective at catching attacks but can also block legitimate traffic. + The paranoia level defines how aggressively the WAF should action on requests. It ranges from `L1` (least strict, lowest chance of false positives) to `L4` (most strict, highest chance of false positives). A higher paranoia level is more effective at catching attacks but can also block legitimate traffic. """ """ diff --git a/services/cdn/src/stackit/cdn/models/waf_status_rule_block_reason_never_defined.py b/services/cdn/src/stackit/cdn/models/waf_status_rule_block_reason_never_defined.py index 61ea55dd8..495baee8c 100644 --- a/services/cdn/src/stackit/cdn/models/waf_status_rule_block_reason_never_defined.py +++ b/services/cdn/src/stackit/cdn/models/waf_status_rule_block_reason_never_defined.py @@ -23,7 +23,7 @@ class WafStatusRuleBlockReasonNeverDefined(BaseModel): """ - This object only ever shows up in the disabled rules section. If rules are never defined (e.g. no collection, rule group, or the rule itself is ever mentioned), they are implicitly disabled + This object only ever shows up in the disabled rules section. If rules are never defined (e.g. no collection, rule group, or the rule itself is ever mentioned), they are implicitly disabled """ # noqa: E501 type: StrictStr = Field(description="This is always `neverDefined`") diff --git a/services/cdn/src/stackit/cdn/models/waf_type.py b/services/cdn/src/stackit/cdn/models/waf_type.py index 62ac06df3..ba98d5113 100644 --- a/services/cdn/src/stackit/cdn/models/waf_type.py +++ b/services/cdn/src/stackit/cdn/models/waf_type.py @@ -21,7 +21,7 @@ class WafType(str, Enum): """ - Enable or disable the Premium WAF. Do note that enabling the Premium WAF will cause additional fees. Some features are gated behind the Premium WAF, like additional, **premium-only rules** and the ability to create **custom rules** (not yet implemented) + Enable or disable the Premium WAF. Do note that enabling the Premium WAF will cause additional fees. Some features are gated behind the Premium WAF, like additional, **premium-only rules** and the ability to create **custom rules** (not yet implemented) """ """