From 254885ca6a82363342f6bb6a9b1775043eafc681 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:14:40 -0500 Subject: [PATCH 01/27] chore: sync shared codegen files from staging-next --- .stats.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.stats.yml b/.stats.yml index 99f947826a0..850f0030958 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 2184 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/cloudflare%2Fcloudflare-3d7d43f051a510c54ae71adb4b85cbb422565a40942cde4de0c3f8eb6ba8023b.yml -openapi_spec_hash: e85824f16c3ba923a34e514c06dac7cd -config_hash: a84b6a70b6374c30a50b477fe248eb3a +configured_endpoints: 2192 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/cloudflare%2Fcloudflare-8e03d0874fc41902f7e931896b4a36b5f67d282e407dd8c488971f7c21b77383.yml +openapi_spec_hash: 50ad0379843478562ee9630f95d94475 +config_hash: a9df5f26701f581fbf876dcc7094ab00 From acbc13f9b028885614e3a58ec197e4d02fc3cbbd Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:33:20 -0500 Subject: [PATCH 02/27] chore(brand_protection): update generated types and methods --- .../resources/brand_protection/v2/matches.py | 14 ++++++----- .../brand_protection/v2/match_get_params.py | 3 ++- .../brand_protection/v2/match_get_response.py | 25 +++++++++++++------ 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/cloudflare/resources/brand_protection/v2/matches.py b/src/cloudflare/resources/brand_protection/v2/matches.py index aecd7fca0f9..5a7fd653fae 100644 --- a/src/cloudflare/resources/brand_protection/v2/matches.py +++ b/src/cloudflare/resources/brand_protection/v2/matches.py @@ -65,12 +65,13 @@ def get( """ Get paginated list of domain matches for one or more brand protection queries. When multiple query_ids are provided (comma-separated), matches are deduplicated - across queries and each match includes a matched_queries array. + across queries and each match includes a match_details array with per-match + query metadata and individual dismissed state. Args: query_id: Query ID or comma-separated list of Query IDs. When multiple IDs are provided, - matches are deduplicated across queries and each match includes matched_queries - and match_ids arrays. + matches are deduplicated across queries and each match includes a match_details + array with per-match query metadata and dismissed state. domain_search: Filter matches by domain name (substring match) @@ -159,12 +160,13 @@ async def get( """ Get paginated list of domain matches for one or more brand protection queries. When multiple query_ids are provided (comma-separated), matches are deduplicated - across queries and each match includes a matched_queries array. + across queries and each match includes a match_details array with per-match + query metadata and individual dismissed state. Args: query_id: Query ID or comma-separated list of Query IDs. When multiple IDs are provided, - matches are deduplicated across queries and each match includes matched_queries - and match_ids arrays. + matches are deduplicated across queries and each match includes a match_details + array with per-match query metadata and dismissed state. domain_search: Filter matches by domain name (substring match) diff --git a/src/cloudflare/types/brand_protection/v2/match_get_params.py b/src/cloudflare/types/brand_protection/v2/match_get_params.py index 1d4b394a83a..78077125054 100644 --- a/src/cloudflare/types/brand_protection/v2/match_get_params.py +++ b/src/cloudflare/types/brand_protection/v2/match_get_params.py @@ -17,7 +17,8 @@ class MatchGetParams(TypedDict, total=False): """Query ID or comma-separated list of Query IDs. When multiple IDs are provided, matches are deduplicated across queries and each - match includes matched_queries and match_ids arrays. + match includes a match_details array with per-match query metadata and dismissed + state. """ domain_search: str diff --git a/src/cloudflare/types/brand_protection/v2/match_get_response.py b/src/cloudflare/types/brand_protection/v2/match_get_response.py index 92a21ab44b0..dec16b4c07e 100644 --- a/src/cloudflare/types/brand_protection/v2/match_get_response.py +++ b/src/cloudflare/types/brand_protection/v2/match_get_response.py @@ -4,16 +4,26 @@ from ...._models import BaseModel -__all__ = ["MatchGetResponse", "Match", "MatchPublicScans"] +__all__ = ["MatchGetResponse", "Match", "MatchPublicScans", "MatchMatchDetail"] class MatchPublicScans(BaseModel): submission_id: str -class Match(BaseModel): +class MatchMatchDetail(BaseModel): dismissed: bool + """Individual dismissed state for this specific match.""" + + match_id: int + + query_id: int + + query_tag: Optional[str] = None + """Tag associated with the query, if one exists.""" + +class Match(BaseModel): domain: str first_seen: str @@ -28,14 +38,15 @@ class Match(BaseModel): source: Optional[str] = None - match_ids: Optional[List[int]] = None - """All underlying match row IDs for this domain. + dismissed: Optional[bool] = None + """Whether the match is dismissed. - Only present when multiple query_ids are requested. + Only present for single-query requests. For multi-query requests, use the + dismissed field in each match_details entry. """ - matched_queries: Optional[List[int]] = None - """List of query IDs that produced this match. + match_details: Optional[List[MatchMatchDetail]] = None + """Per-match detail objects with query metadata and individual dismissed state. Only present when multiple query_ids are requested. """ From 9d43a47a72658e33592a187981f086d12a018f2a Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:33:53 -0500 Subject: [PATCH 03/27] feat(cache): update generated types and methods --- src/cloudflare/resources/cache/__init__.py | 14 + src/cloudflare/resources/cache/api.md | 29 + src/cloudflare/resources/cache/cache.py | 32 + .../resources/cache/origin_cloud_regions.py | 1044 +++++++++++++++++ src/cloudflare/types/cache/__init__.py | 18 + .../types/cache/origin_cloud_region.py | 27 + ...rigin_cloud_region_bulk_delete_response.py | 74 ++ .../origin_cloud_region_bulk_edit_params.py | 35 + .../origin_cloud_region_bulk_edit_response.py | 74 ++ .../origin_cloud_region_create_params.py | 28 + .../origin_cloud_region_create_response.py | 25 + .../origin_cloud_region_delete_response.py | 25 + .../cache/origin_cloud_region_edit_params.py | 28 + .../origin_cloud_region_edit_response.py | 24 + .../cache/origin_cloud_region_get_response.py | 25 + .../origin_cloud_region_list_response.py | 24 + ...cloud_region_supported_regions_response.py | 37 + .../cache/test_origin_cloud_regions.py | 829 +++++++++++++ 18 files changed, 2392 insertions(+) create mode 100644 src/cloudflare/resources/cache/origin_cloud_regions.py create mode 100644 src/cloudflare/types/cache/origin_cloud_region.py create mode 100644 src/cloudflare/types/cache/origin_cloud_region_bulk_delete_response.py create mode 100644 src/cloudflare/types/cache/origin_cloud_region_bulk_edit_params.py create mode 100644 src/cloudflare/types/cache/origin_cloud_region_bulk_edit_response.py create mode 100644 src/cloudflare/types/cache/origin_cloud_region_create_params.py create mode 100644 src/cloudflare/types/cache/origin_cloud_region_create_response.py create mode 100644 src/cloudflare/types/cache/origin_cloud_region_delete_response.py create mode 100644 src/cloudflare/types/cache/origin_cloud_region_edit_params.py create mode 100644 src/cloudflare/types/cache/origin_cloud_region_edit_response.py create mode 100644 src/cloudflare/types/cache/origin_cloud_region_get_response.py create mode 100644 src/cloudflare/types/cache/origin_cloud_region_list_response.py create mode 100644 src/cloudflare/types/cache/origin_cloud_region_supported_regions_response.py create mode 100644 tests/api_resources/cache/test_origin_cloud_regions.py diff --git a/src/cloudflare/resources/cache/__init__.py b/src/cloudflare/resources/cache/__init__.py index faa73ad7735..5b2d2fe4555 100644 --- a/src/cloudflare/resources/cache/__init__.py +++ b/src/cloudflare/resources/cache/__init__.py @@ -32,6 +32,14 @@ SmartTieredCacheResourceWithStreamingResponse, AsyncSmartTieredCacheResourceWithStreamingResponse, ) +from .origin_cloud_regions import ( + OriginCloudRegionsResource, + AsyncOriginCloudRegionsResource, + OriginCloudRegionsResourceWithRawResponse, + AsyncOriginCloudRegionsResourceWithRawResponse, + OriginCloudRegionsResourceWithStreamingResponse, + AsyncOriginCloudRegionsResourceWithStreamingResponse, +) from .regional_tiered_cache import ( RegionalTieredCacheResource, AsyncRegionalTieredCacheResource, @@ -66,6 +74,12 @@ "AsyncRegionalTieredCacheResourceWithRawResponse", "RegionalTieredCacheResourceWithStreamingResponse", "AsyncRegionalTieredCacheResourceWithStreamingResponse", + "OriginCloudRegionsResource", + "AsyncOriginCloudRegionsResource", + "OriginCloudRegionsResourceWithRawResponse", + "AsyncOriginCloudRegionsResourceWithRawResponse", + "OriginCloudRegionsResourceWithStreamingResponse", + "AsyncOriginCloudRegionsResourceWithStreamingResponse", "CacheResource", "AsyncCacheResource", "CacheResourceWithRawResponse", diff --git a/src/cloudflare/resources/cache/api.md b/src/cloudflare/resources/cache/api.md index aa7b9c376b3..3bbb74056ef 100644 --- a/src/cloudflare/resources/cache/api.md +++ b/src/cloudflare/resources/cache/api.md @@ -86,3 +86,32 @@ Methods: - client.cache.regional_tiered_cache.edit(\*, zone_id, \*\*params) -> Optional[RegionalTieredCacheEditResponse] - client.cache.regional_tiered_cache.get(\*, zone_id) -> Optional[RegionalTieredCacheGetResponse] + +## OriginCloudRegions + +Types: + +```python +from cloudflare.types.cache import ( + OriginCloudRegion, + OriginCloudRegionCreateResponse, + OriginCloudRegionListResponse, + OriginCloudRegionDeleteResponse, + OriginCloudRegionBulkDeleteResponse, + OriginCloudRegionBulkEditResponse, + OriginCloudRegionEditResponse, + OriginCloudRegionGetResponse, + OriginCloudRegionSupportedRegionsResponse, +) +``` + +Methods: + +- client.cache.origin_cloud_regions.create(\*, zone_id, \*\*params) -> Optional[OriginCloudRegionCreateResponse] +- client.cache.origin_cloud_regions.list(\*, zone_id) -> Optional[OriginCloudRegionListResponse] +- client.cache.origin_cloud_regions.delete(origin_ip, \*, zone_id) -> Optional[OriginCloudRegionDeleteResponse] +- client.cache.origin_cloud_regions.bulk_delete(\*, zone_id) -> Optional[OriginCloudRegionBulkDeleteResponse] +- client.cache.origin_cloud_regions.bulk_edit(\*, zone_id, \*\*params) -> Optional[OriginCloudRegionBulkEditResponse] +- client.cache.origin_cloud_regions.edit(\*, zone_id, \*\*params) -> Optional[OriginCloudRegionEditResponse] +- client.cache.origin_cloud_regions.get(origin_ip, \*, zone_id) -> Optional[OriginCloudRegionGetResponse] +- client.cache.origin_cloud_regions.supported_regions(\*, zone_id) -> Optional[OriginCloudRegionSupportedRegionsResponse] diff --git a/src/cloudflare/resources/cache/cache.py b/src/cloudflare/resources/cache/cache.py index 140c5cce06f..7e6637ff05b 100644 --- a/src/cloudflare/resources/cache/cache.py +++ b/src/cloudflare/resources/cache/cache.py @@ -44,6 +44,14 @@ SmartTieredCacheResourceWithStreamingResponse, AsyncSmartTieredCacheResourceWithStreamingResponse, ) +from .origin_cloud_regions import ( + OriginCloudRegionsResource, + AsyncOriginCloudRegionsResource, + OriginCloudRegionsResourceWithRawResponse, + AsyncOriginCloudRegionsResourceWithRawResponse, + OriginCloudRegionsResourceWithStreamingResponse, + AsyncOriginCloudRegionsResourceWithStreamingResponse, +) from .regional_tiered_cache import ( RegionalTieredCacheResource, AsyncRegionalTieredCacheResource, @@ -74,6 +82,10 @@ def variants(self) -> VariantsResource: def regional_tiered_cache(self) -> RegionalTieredCacheResource: return RegionalTieredCacheResource(self._client) + @cached_property + def origin_cloud_regions(self) -> OriginCloudRegionsResource: + return OriginCloudRegionsResource(self._client) + @cached_property def with_raw_response(self) -> CacheResourceWithRawResponse: """ @@ -767,6 +779,10 @@ def variants(self) -> AsyncVariantsResource: def regional_tiered_cache(self) -> AsyncRegionalTieredCacheResource: return AsyncRegionalTieredCacheResource(self._client) + @cached_property + def origin_cloud_regions(self) -> AsyncOriginCloudRegionsResource: + return AsyncOriginCloudRegionsResource(self._client) + @cached_property def with_raw_response(self) -> AsyncCacheResourceWithRawResponse: """ @@ -1467,6 +1483,10 @@ def variants(self) -> VariantsResourceWithRawResponse: def regional_tiered_cache(self) -> RegionalTieredCacheResourceWithRawResponse: return RegionalTieredCacheResourceWithRawResponse(self._cache.regional_tiered_cache) + @cached_property + def origin_cloud_regions(self) -> OriginCloudRegionsResourceWithRawResponse: + return OriginCloudRegionsResourceWithRawResponse(self._cache.origin_cloud_regions) + class AsyncCacheResourceWithRawResponse: def __init__(self, cache: AsyncCacheResource) -> None: @@ -1492,6 +1512,10 @@ def variants(self) -> AsyncVariantsResourceWithRawResponse: def regional_tiered_cache(self) -> AsyncRegionalTieredCacheResourceWithRawResponse: return AsyncRegionalTieredCacheResourceWithRawResponse(self._cache.regional_tiered_cache) + @cached_property + def origin_cloud_regions(self) -> AsyncOriginCloudRegionsResourceWithRawResponse: + return AsyncOriginCloudRegionsResourceWithRawResponse(self._cache.origin_cloud_regions) + class CacheResourceWithStreamingResponse: def __init__(self, cache: CacheResource) -> None: @@ -1517,6 +1541,10 @@ def variants(self) -> VariantsResourceWithStreamingResponse: def regional_tiered_cache(self) -> RegionalTieredCacheResourceWithStreamingResponse: return RegionalTieredCacheResourceWithStreamingResponse(self._cache.regional_tiered_cache) + @cached_property + def origin_cloud_regions(self) -> OriginCloudRegionsResourceWithStreamingResponse: + return OriginCloudRegionsResourceWithStreamingResponse(self._cache.origin_cloud_regions) + class AsyncCacheResourceWithStreamingResponse: def __init__(self, cache: AsyncCacheResource) -> None: @@ -1541,3 +1569,7 @@ def variants(self) -> AsyncVariantsResourceWithStreamingResponse: @cached_property def regional_tiered_cache(self) -> AsyncRegionalTieredCacheResourceWithStreamingResponse: return AsyncRegionalTieredCacheResourceWithStreamingResponse(self._cache.regional_tiered_cache) + + @cached_property + def origin_cloud_regions(self) -> AsyncOriginCloudRegionsResourceWithStreamingResponse: + return AsyncOriginCloudRegionsResourceWithStreamingResponse(self._cache.origin_cloud_regions) diff --git a/src/cloudflare/resources/cache/origin_cloud_regions.py b/src/cloudflare/resources/cache/origin_cloud_regions.py new file mode 100644 index 00000000000..ba6886aa5c8 --- /dev/null +++ b/src/cloudflare/resources/cache/origin_cloud_regions.py @@ -0,0 +1,1044 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Type, Iterable, Optional, cast +from typing_extensions import Literal + +import httpx + +from ..._types import Body, Query, Headers, NotGiven, not_given +from ..._utils import path_template, maybe_transform, async_maybe_transform +from ..._compat import cached_property +from ..._resource import SyncAPIResource, AsyncAPIResource +from ..._response import ( + to_raw_response_wrapper, + to_streamed_response_wrapper, + async_to_raw_response_wrapper, + async_to_streamed_response_wrapper, +) +from ..._wrappers import ResultWrapper +from ...types.cache import ( + origin_cloud_region_edit_params, + origin_cloud_region_create_params, + origin_cloud_region_bulk_edit_params, +) +from ..._base_client import make_request_options +from ...types.cache.origin_cloud_region_get_response import OriginCloudRegionGetResponse +from ...types.cache.origin_cloud_region_edit_response import OriginCloudRegionEditResponse +from ...types.cache.origin_cloud_region_list_response import OriginCloudRegionListResponse +from ...types.cache.origin_cloud_region_create_response import OriginCloudRegionCreateResponse +from ...types.cache.origin_cloud_region_delete_response import OriginCloudRegionDeleteResponse +from ...types.cache.origin_cloud_region_bulk_edit_response import OriginCloudRegionBulkEditResponse +from ...types.cache.origin_cloud_region_bulk_delete_response import OriginCloudRegionBulkDeleteResponse +from ...types.cache.origin_cloud_region_supported_regions_response import OriginCloudRegionSupportedRegionsResponse + +__all__ = ["OriginCloudRegionsResource", "AsyncOriginCloudRegionsResource"] + + +class OriginCloudRegionsResource(SyncAPIResource): + @cached_property + def with_raw_response(self) -> OriginCloudRegionsResourceWithRawResponse: + """ + This property can be used as a prefix for any HTTP method call to return + the raw response object instead of the parsed content. + + For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers + """ + return OriginCloudRegionsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> OriginCloudRegionsResourceWithStreamingResponse: + """ + An alternative to `.with_raw_response` that doesn't eagerly read the response body. + + For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response + """ + return OriginCloudRegionsResourceWithStreamingResponse(self) + + def create( + self, + *, + zone_id: str | None = None, + ip: str, + region: str, + vendor: Literal["aws", "azure", "gcp", "oci"], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionCreateResponse]: + """Adds a single IP-to-cloud-region mapping for the zone. + + The IP must be a valid + IPv4 or IPv6 address and is normalized to canonical form before storage (RFC + 5952 for IPv6). Returns 400 (code 1145) if a mapping for that IP already exists + — use PATCH to update an existing entry. The vendor and region are validated + against the list from + `GET /zones/{zone_id}/cache/origin_cloud_regions/supported_regions`. + + Args: + zone_id: Identifier. + + ip: Origin IP address (IPv4 or IPv6). Normalized to canonical form before storage + (RFC 5952 for IPv6). + + region: Cloud vendor region identifier. Must be a valid region for the specified vendor + as returned by the supported_regions endpoint. + + vendor: Cloud vendor hosting the origin. Must be one of the supported vendors. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + return self._post( + path_template("/zones/{zone_id}/cache/origin_cloud_regions", zone_id=zone_id), + body=maybe_transform( + { + "ip": ip, + "region": region, + "vendor": vendor, + }, + origin_cloud_region_create_params.OriginCloudRegionCreateParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionCreateResponse]]._unwrapper, + ), + cast_to=cast( + Type[Optional[OriginCloudRegionCreateResponse]], ResultWrapper[OriginCloudRegionCreateResponse] + ), + ) + + def list( + self, + *, + zone_id: str | None = None, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionListResponse]: + """Returns all IP-to-cloud-region mappings configured for the zone. + + Each mapping + tells Cloudflare which cloud vendor and region hosts the origin at that IP, + enabling the edge to route via the nearest Tiered Cache upper-tier co-located + with that cloud provider. Returns an empty array when no mappings exist. + + Args: + zone_id: Identifier. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + return self._get( + path_template("/zones/{zone_id}/cache/origin_cloud_regions", zone_id=zone_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionListResponse]]._unwrapper, + ), + cast_to=cast(Type[Optional[OriginCloudRegionListResponse]], ResultWrapper[OriginCloudRegionListResponse]), + ) + + def delete( + self, + origin_ip: str, + *, + zone_id: str | None = None, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionDeleteResponse]: + """Removes the cloud region mapping for a single origin IP address. + + The IP path + parameter is normalized before lookup. Returns the deleted entry on success. + Returns 404 (code 1163) if no mapping exists for the specified IP. When the last + mapping for the zone is removed the underlying rule record is also deleted. + + Args: + zone_id: Identifier. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + if not origin_ip: + raise ValueError(f"Expected a non-empty value for `origin_ip` but received {origin_ip!r}") + return self._delete( + path_template( + "/zones/{zone_id}/cache/origin_cloud_regions/{origin_ip}", zone_id=zone_id, origin_ip=origin_ip + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionDeleteResponse]]._unwrapper, + ), + cast_to=cast( + Type[Optional[OriginCloudRegionDeleteResponse]], ResultWrapper[OriginCloudRegionDeleteResponse] + ), + ) + + def bulk_delete( + self, + *, + zone_id: str | None = None, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionBulkDeleteResponse]: + """Removes up to 100 IP-to-cloud-region mappings in a single request. + + Each IP is + validated independently — successfully deleted items are returned in the + `succeeded` array and IPs that could not be found or are invalid are returned in + the `failed` array. + + Args: + zone_id: Identifier. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + return self._delete( + path_template("/zones/{zone_id}/cache/origin_cloud_regions/batch", zone_id=zone_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionBulkDeleteResponse]]._unwrapper, + ), + cast_to=cast( + Type[Optional[OriginCloudRegionBulkDeleteResponse]], ResultWrapper[OriginCloudRegionBulkDeleteResponse] + ), + ) + + def bulk_edit( + self, + *, + zone_id: str | None = None, + body: Iterable[origin_cloud_region_bulk_edit_params.Body], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionBulkEditResponse]: + """Adds or updates up to 100 IP-to-cloud-region mappings in a single request. + + Each + item is validated independently — valid items are applied and invalid items are + returned in the `failed` array. The vendor and region for every item are + validated against the list from + `GET /zones/{zone_id}/cache/origin_cloud_regions/supported_regions`. + + Args: + zone_id: Identifier. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + return self._patch( + path_template("/zones/{zone_id}/cache/origin_cloud_regions/batch", zone_id=zone_id), + body=maybe_transform(body, Iterable[origin_cloud_region_bulk_edit_params.Body]), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionBulkEditResponse]]._unwrapper, + ), + cast_to=cast( + Type[Optional[OriginCloudRegionBulkEditResponse]], ResultWrapper[OriginCloudRegionBulkEditResponse] + ), + ) + + def edit( + self, + *, + zone_id: str | None = None, + ip: str, + region: str, + vendor: Literal["aws", "azure", "gcp", "oci"], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionEditResponse]: + """Adds or updates a single IP-to-cloud-region mapping for the zone. + + Unlike POST, + this operation is idempotent — if a mapping for the IP already exists it is + overwritten. Returns the complete updated list of all mappings for the zone. + Returns 403 (code 1164) when the zone has reached the limit of 3,500 IP + mappings. + + Args: + zone_id: Identifier. + + ip: Origin IP address (IPv4 or IPv6). Normalized to canonical form before storage + (RFC 5952 for IPv6). + + region: Cloud vendor region identifier. Must be a valid region for the specified vendor + as returned by the supported_regions endpoint. + + vendor: Cloud vendor hosting the origin. Must be one of the supported vendors. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + return self._patch( + path_template("/zones/{zone_id}/cache/origin_cloud_regions", zone_id=zone_id), + body=maybe_transform( + { + "ip": ip, + "region": region, + "vendor": vendor, + }, + origin_cloud_region_edit_params.OriginCloudRegionEditParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionEditResponse]]._unwrapper, + ), + cast_to=cast(Type[Optional[OriginCloudRegionEditResponse]], ResultWrapper[OriginCloudRegionEditResponse]), + ) + + def get( + self, + origin_ip: str, + *, + zone_id: str | None = None, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionGetResponse]: + """Returns the cloud region mapping for a single origin IP address. + + The IP path + parameter is normalized before lookup (RFC 5952 for IPv6). Returns 404 + (code 1142) if the zone has no mappings or if the specified IP has no mapping. + + Args: + zone_id: Identifier. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + if not origin_ip: + raise ValueError(f"Expected a non-empty value for `origin_ip` but received {origin_ip!r}") + return self._get( + path_template( + "/zones/{zone_id}/cache/origin_cloud_regions/{origin_ip}", zone_id=zone_id, origin_ip=origin_ip + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionGetResponse]]._unwrapper, + ), + cast_to=cast(Type[Optional[OriginCloudRegionGetResponse]], ResultWrapper[OriginCloudRegionGetResponse]), + ) + + def supported_regions( + self, + *, + zone_id: str | None = None, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionSupportedRegionsResponse]: + """ + Returns the cloud vendors and regions that are valid values for origin cloud + region mappings. Each region includes the Tiered Cache upper-tier colocation + codes that will be used for cache routing when a mapping targeting that region + is active. Requires the zone to have Tiered Cache enabled. + + Args: + zone_id: Identifier. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + return self._get( + path_template("/zones/{zone_id}/cache/origin_cloud_regions/supported_regions", zone_id=zone_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionSupportedRegionsResponse]]._unwrapper, + ), + cast_to=cast( + Type[Optional[OriginCloudRegionSupportedRegionsResponse]], + ResultWrapper[OriginCloudRegionSupportedRegionsResponse], + ), + ) + + +class AsyncOriginCloudRegionsResource(AsyncAPIResource): + @cached_property + def with_raw_response(self) -> AsyncOriginCloudRegionsResourceWithRawResponse: + """ + This property can be used as a prefix for any HTTP method call to return + the raw response object instead of the parsed content. + + For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers + """ + return AsyncOriginCloudRegionsResourceWithRawResponse(self) + + @cached_property + def with_streaming_response(self) -> AsyncOriginCloudRegionsResourceWithStreamingResponse: + """ + An alternative to `.with_raw_response` that doesn't eagerly read the response body. + + For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response + """ + return AsyncOriginCloudRegionsResourceWithStreamingResponse(self) + + async def create( + self, + *, + zone_id: str | None = None, + ip: str, + region: str, + vendor: Literal["aws", "azure", "gcp", "oci"], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionCreateResponse]: + """Adds a single IP-to-cloud-region mapping for the zone. + + The IP must be a valid + IPv4 or IPv6 address and is normalized to canonical form before storage (RFC + 5952 for IPv6). Returns 400 (code 1145) if a mapping for that IP already exists + — use PATCH to update an existing entry. The vendor and region are validated + against the list from + `GET /zones/{zone_id}/cache/origin_cloud_regions/supported_regions`. + + Args: + zone_id: Identifier. + + ip: Origin IP address (IPv4 or IPv6). Normalized to canonical form before storage + (RFC 5952 for IPv6). + + region: Cloud vendor region identifier. Must be a valid region for the specified vendor + as returned by the supported_regions endpoint. + + vendor: Cloud vendor hosting the origin. Must be one of the supported vendors. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + return await self._post( + path_template("/zones/{zone_id}/cache/origin_cloud_regions", zone_id=zone_id), + body=await async_maybe_transform( + { + "ip": ip, + "region": region, + "vendor": vendor, + }, + origin_cloud_region_create_params.OriginCloudRegionCreateParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionCreateResponse]]._unwrapper, + ), + cast_to=cast( + Type[Optional[OriginCloudRegionCreateResponse]], ResultWrapper[OriginCloudRegionCreateResponse] + ), + ) + + async def list( + self, + *, + zone_id: str | None = None, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionListResponse]: + """Returns all IP-to-cloud-region mappings configured for the zone. + + Each mapping + tells Cloudflare which cloud vendor and region hosts the origin at that IP, + enabling the edge to route via the nearest Tiered Cache upper-tier co-located + with that cloud provider. Returns an empty array when no mappings exist. + + Args: + zone_id: Identifier. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + return await self._get( + path_template("/zones/{zone_id}/cache/origin_cloud_regions", zone_id=zone_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionListResponse]]._unwrapper, + ), + cast_to=cast(Type[Optional[OriginCloudRegionListResponse]], ResultWrapper[OriginCloudRegionListResponse]), + ) + + async def delete( + self, + origin_ip: str, + *, + zone_id: str | None = None, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionDeleteResponse]: + """Removes the cloud region mapping for a single origin IP address. + + The IP path + parameter is normalized before lookup. Returns the deleted entry on success. + Returns 404 (code 1163) if no mapping exists for the specified IP. When the last + mapping for the zone is removed the underlying rule record is also deleted. + + Args: + zone_id: Identifier. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + if not origin_ip: + raise ValueError(f"Expected a non-empty value for `origin_ip` but received {origin_ip!r}") + return await self._delete( + path_template( + "/zones/{zone_id}/cache/origin_cloud_regions/{origin_ip}", zone_id=zone_id, origin_ip=origin_ip + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionDeleteResponse]]._unwrapper, + ), + cast_to=cast( + Type[Optional[OriginCloudRegionDeleteResponse]], ResultWrapper[OriginCloudRegionDeleteResponse] + ), + ) + + async def bulk_delete( + self, + *, + zone_id: str | None = None, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionBulkDeleteResponse]: + """Removes up to 100 IP-to-cloud-region mappings in a single request. + + Each IP is + validated independently — successfully deleted items are returned in the + `succeeded` array and IPs that could not be found or are invalid are returned in + the `failed` array. + + Args: + zone_id: Identifier. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + return await self._delete( + path_template("/zones/{zone_id}/cache/origin_cloud_regions/batch", zone_id=zone_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionBulkDeleteResponse]]._unwrapper, + ), + cast_to=cast( + Type[Optional[OriginCloudRegionBulkDeleteResponse]], ResultWrapper[OriginCloudRegionBulkDeleteResponse] + ), + ) + + async def bulk_edit( + self, + *, + zone_id: str | None = None, + body: Iterable[origin_cloud_region_bulk_edit_params.Body], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionBulkEditResponse]: + """Adds or updates up to 100 IP-to-cloud-region mappings in a single request. + + Each + item is validated independently — valid items are applied and invalid items are + returned in the `failed` array. The vendor and region for every item are + validated against the list from + `GET /zones/{zone_id}/cache/origin_cloud_regions/supported_regions`. + + Args: + zone_id: Identifier. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + return await self._patch( + path_template("/zones/{zone_id}/cache/origin_cloud_regions/batch", zone_id=zone_id), + body=await async_maybe_transform(body, Iterable[origin_cloud_region_bulk_edit_params.Body]), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionBulkEditResponse]]._unwrapper, + ), + cast_to=cast( + Type[Optional[OriginCloudRegionBulkEditResponse]], ResultWrapper[OriginCloudRegionBulkEditResponse] + ), + ) + + async def edit( + self, + *, + zone_id: str | None = None, + ip: str, + region: str, + vendor: Literal["aws", "azure", "gcp", "oci"], + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionEditResponse]: + """Adds or updates a single IP-to-cloud-region mapping for the zone. + + Unlike POST, + this operation is idempotent — if a mapping for the IP already exists it is + overwritten. Returns the complete updated list of all mappings for the zone. + Returns 403 (code 1164) when the zone has reached the limit of 3,500 IP + mappings. + + Args: + zone_id: Identifier. + + ip: Origin IP address (IPv4 or IPv6). Normalized to canonical form before storage + (RFC 5952 for IPv6). + + region: Cloud vendor region identifier. Must be a valid region for the specified vendor + as returned by the supported_regions endpoint. + + vendor: Cloud vendor hosting the origin. Must be one of the supported vendors. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + return await self._patch( + path_template("/zones/{zone_id}/cache/origin_cloud_regions", zone_id=zone_id), + body=await async_maybe_transform( + { + "ip": ip, + "region": region, + "vendor": vendor, + }, + origin_cloud_region_edit_params.OriginCloudRegionEditParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionEditResponse]]._unwrapper, + ), + cast_to=cast(Type[Optional[OriginCloudRegionEditResponse]], ResultWrapper[OriginCloudRegionEditResponse]), + ) + + async def get( + self, + origin_ip: str, + *, + zone_id: str | None = None, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionGetResponse]: + """Returns the cloud region mapping for a single origin IP address. + + The IP path + parameter is normalized before lookup (RFC 5952 for IPv6). Returns 404 + (code 1142) if the zone has no mappings or if the specified IP has no mapping. + + Args: + zone_id: Identifier. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + if not origin_ip: + raise ValueError(f"Expected a non-empty value for `origin_ip` but received {origin_ip!r}") + return await self._get( + path_template( + "/zones/{zone_id}/cache/origin_cloud_regions/{origin_ip}", zone_id=zone_id, origin_ip=origin_ip + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionGetResponse]]._unwrapper, + ), + cast_to=cast(Type[Optional[OriginCloudRegionGetResponse]], ResultWrapper[OriginCloudRegionGetResponse]), + ) + + async def supported_regions( + self, + *, + zone_id: str | None = None, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> Optional[OriginCloudRegionSupportedRegionsResponse]: + """ + Returns the cloud vendors and regions that are valid values for origin cloud + region mappings. Each region includes the Tiered Cache upper-tier colocation + codes that will be used for cache routing when a mapping targeting that region + is active. Requires the zone to have Tiered Cache enabled. + + Args: + zone_id: Identifier. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if zone_id is None: + zone_id = self._client._get_zone_id_path_param() + if not zone_id: + raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") + return await self._get( + path_template("/zones/{zone_id}/cache/origin_cloud_regions/supported_regions", zone_id=zone_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + post_parser=ResultWrapper[Optional[OriginCloudRegionSupportedRegionsResponse]]._unwrapper, + ), + cast_to=cast( + Type[Optional[OriginCloudRegionSupportedRegionsResponse]], + ResultWrapper[OriginCloudRegionSupportedRegionsResponse], + ), + ) + + +class OriginCloudRegionsResourceWithRawResponse: + def __init__(self, origin_cloud_regions: OriginCloudRegionsResource) -> None: + self._origin_cloud_regions = origin_cloud_regions + + self.create = to_raw_response_wrapper( + origin_cloud_regions.create, + ) + self.list = to_raw_response_wrapper( + origin_cloud_regions.list, + ) + self.delete = to_raw_response_wrapper( + origin_cloud_regions.delete, + ) + self.bulk_delete = to_raw_response_wrapper( + origin_cloud_regions.bulk_delete, + ) + self.bulk_edit = to_raw_response_wrapper( + origin_cloud_regions.bulk_edit, + ) + self.edit = to_raw_response_wrapper( + origin_cloud_regions.edit, + ) + self.get = to_raw_response_wrapper( + origin_cloud_regions.get, + ) + self.supported_regions = to_raw_response_wrapper( + origin_cloud_regions.supported_regions, + ) + + +class AsyncOriginCloudRegionsResourceWithRawResponse: + def __init__(self, origin_cloud_regions: AsyncOriginCloudRegionsResource) -> None: + self._origin_cloud_regions = origin_cloud_regions + + self.create = async_to_raw_response_wrapper( + origin_cloud_regions.create, + ) + self.list = async_to_raw_response_wrapper( + origin_cloud_regions.list, + ) + self.delete = async_to_raw_response_wrapper( + origin_cloud_regions.delete, + ) + self.bulk_delete = async_to_raw_response_wrapper( + origin_cloud_regions.bulk_delete, + ) + self.bulk_edit = async_to_raw_response_wrapper( + origin_cloud_regions.bulk_edit, + ) + self.edit = async_to_raw_response_wrapper( + origin_cloud_regions.edit, + ) + self.get = async_to_raw_response_wrapper( + origin_cloud_regions.get, + ) + self.supported_regions = async_to_raw_response_wrapper( + origin_cloud_regions.supported_regions, + ) + + +class OriginCloudRegionsResourceWithStreamingResponse: + def __init__(self, origin_cloud_regions: OriginCloudRegionsResource) -> None: + self._origin_cloud_regions = origin_cloud_regions + + self.create = to_streamed_response_wrapper( + origin_cloud_regions.create, + ) + self.list = to_streamed_response_wrapper( + origin_cloud_regions.list, + ) + self.delete = to_streamed_response_wrapper( + origin_cloud_regions.delete, + ) + self.bulk_delete = to_streamed_response_wrapper( + origin_cloud_regions.bulk_delete, + ) + self.bulk_edit = to_streamed_response_wrapper( + origin_cloud_regions.bulk_edit, + ) + self.edit = to_streamed_response_wrapper( + origin_cloud_regions.edit, + ) + self.get = to_streamed_response_wrapper( + origin_cloud_regions.get, + ) + self.supported_regions = to_streamed_response_wrapper( + origin_cloud_regions.supported_regions, + ) + + +class AsyncOriginCloudRegionsResourceWithStreamingResponse: + def __init__(self, origin_cloud_regions: AsyncOriginCloudRegionsResource) -> None: + self._origin_cloud_regions = origin_cloud_regions + + self.create = async_to_streamed_response_wrapper( + origin_cloud_regions.create, + ) + self.list = async_to_streamed_response_wrapper( + origin_cloud_regions.list, + ) + self.delete = async_to_streamed_response_wrapper( + origin_cloud_regions.delete, + ) + self.bulk_delete = async_to_streamed_response_wrapper( + origin_cloud_regions.bulk_delete, + ) + self.bulk_edit = async_to_streamed_response_wrapper( + origin_cloud_regions.bulk_edit, + ) + self.edit = async_to_streamed_response_wrapper( + origin_cloud_regions.edit, + ) + self.get = async_to_streamed_response_wrapper( + origin_cloud_regions.get, + ) + self.supported_regions = async_to_streamed_response_wrapper( + origin_cloud_regions.supported_regions, + ) diff --git a/src/cloudflare/types/cache/__init__.py b/src/cloudflare/types/cache/__init__.py index 10937a5c1b3..a8c1ab90c62 100644 --- a/src/cloudflare/types/cache/__init__.py +++ b/src/cloudflare/types/cache/__init__.py @@ -6,6 +6,7 @@ from .cache_reserve import CacheReserve as CacheReserve from .cache_purge_params import CachePurgeParams as CachePurgeParams from .cache_reserve_clear import CacheReserveClear as CacheReserveClear +from .origin_cloud_region import OriginCloudRegion as OriginCloudRegion from .variant_edit_params import VariantEditParams as VariantEditParams from .cache_purge_response import CachePurgeResponse as CachePurgeResponse from .variant_get_response import VariantGetResponse as VariantGetResponse @@ -19,9 +20,26 @@ from .cache_reserve_clear_response import CacheReserveClearResponse as CacheReserveClearResponse from .cache_reserve_status_response import CacheReserveStatusResponse as CacheReserveStatusResponse from .smart_tiered_cache_edit_params import SmartTieredCacheEditParams as SmartTieredCacheEditParams +from .origin_cloud_region_edit_params import OriginCloudRegionEditParams as OriginCloudRegionEditParams from .smart_tiered_cache_get_response import SmartTieredCacheGetResponse as SmartTieredCacheGetResponse +from .origin_cloud_region_get_response import OriginCloudRegionGetResponse as OriginCloudRegionGetResponse from .smart_tiered_cache_edit_response import SmartTieredCacheEditResponse as SmartTieredCacheEditResponse +from .origin_cloud_region_create_params import OriginCloudRegionCreateParams as OriginCloudRegionCreateParams +from .origin_cloud_region_edit_response import OriginCloudRegionEditResponse as OriginCloudRegionEditResponse +from .origin_cloud_region_list_response import OriginCloudRegionListResponse as OriginCloudRegionListResponse from .regional_tiered_cache_edit_params import RegionalTieredCacheEditParams as RegionalTieredCacheEditParams from .regional_tiered_cache_get_response import RegionalTieredCacheGetResponse as RegionalTieredCacheGetResponse from .smart_tiered_cache_delete_response import SmartTieredCacheDeleteResponse as SmartTieredCacheDeleteResponse +from .origin_cloud_region_create_response import OriginCloudRegionCreateResponse as OriginCloudRegionCreateResponse +from .origin_cloud_region_delete_response import OriginCloudRegionDeleteResponse as OriginCloudRegionDeleteResponse from .regional_tiered_cache_edit_response import RegionalTieredCacheEditResponse as RegionalTieredCacheEditResponse +from .origin_cloud_region_bulk_edit_params import OriginCloudRegionBulkEditParams as OriginCloudRegionBulkEditParams +from .origin_cloud_region_bulk_edit_response import ( + OriginCloudRegionBulkEditResponse as OriginCloudRegionBulkEditResponse, +) +from .origin_cloud_region_bulk_delete_response import ( + OriginCloudRegionBulkDeleteResponse as OriginCloudRegionBulkDeleteResponse, +) +from .origin_cloud_region_supported_regions_response import ( + OriginCloudRegionSupportedRegionsResponse as OriginCloudRegionSupportedRegionsResponse, +) diff --git a/src/cloudflare/types/cache/origin_cloud_region.py b/src/cloudflare/types/cache/origin_cloud_region.py new file mode 100644 index 00000000000..54afe283353 --- /dev/null +++ b/src/cloudflare/types/cache/origin_cloud_region.py @@ -0,0 +1,27 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from datetime import datetime +from typing_extensions import Literal + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["OriginCloudRegion"] + + +class OriginCloudRegion(BaseModel): + """A single origin IP-to-cloud-region mapping.""" + + origin_ip: str = FieldInfo(alias="origin-ip") + """The origin IP address (IPv4 or IPv6, canonicalized).""" + + region: str + """Cloud vendor region identifier.""" + + vendor: Literal["aws", "azure", "gcp", "oci"] + """Cloud vendor hosting the origin.""" + + modified_on: Optional[datetime] = None + """Time this mapping was last modified.""" diff --git a/src/cloudflare/types/cache/origin_cloud_region_bulk_delete_response.py b/src/cloudflare/types/cache/origin_cloud_region_bulk_delete_response.py new file mode 100644 index 00000000000..d5ea3f1b7d1 --- /dev/null +++ b/src/cloudflare/types/cache/origin_cloud_region_bulk_delete_response.py @@ -0,0 +1,74 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import List, Optional +from datetime import datetime +from typing_extensions import Literal + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["OriginCloudRegionBulkDeleteResponse", "Value", "ValueFailed", "ValueSucceeded"] + + +class ValueFailed(BaseModel): + """Result for a single item in a batch operation.""" + + origin_ip: str = FieldInfo(alias="origin-ip") + """The origin IP address for this item.""" + + error: Optional[str] = None + """Error message explaining why the item failed. Present only on failed items.""" + + region: Optional[str] = None + """Cloud vendor region identifier. + + Present on succeeded items for patch operations. + """ + + vendor: Optional[str] = None + """Cloud vendor identifier. Present on succeeded items for patch operations.""" + + +class ValueSucceeded(BaseModel): + """Result for a single item in a batch operation.""" + + origin_ip: str = FieldInfo(alias="origin-ip") + """The origin IP address for this item.""" + + error: Optional[str] = None + """Error message explaining why the item failed. Present only on failed items.""" + + region: Optional[str] = None + """Cloud vendor region identifier. + + Present on succeeded items for patch operations. + """ + + vendor: Optional[str] = None + """Cloud vendor identifier. Present on succeeded items for patch operations.""" + + +class Value(BaseModel): + failed: List[ValueFailed] + """Items that could not be applied, with error details.""" + + succeeded: List[ValueSucceeded] + """Items that were successfully applied.""" + + +class OriginCloudRegionBulkDeleteResponse(BaseModel): + """Response result for a batch origin cloud region operation.""" + + id: Literal["origin_public_cloud_region"] + + editable: bool + """Whether the setting can be modified by the current user.""" + + value: Value + + modified_on: Optional[datetime] = None + """Time the mapping set was last modified. + + Null when no items were successfully applied. + """ diff --git a/src/cloudflare/types/cache/origin_cloud_region_bulk_edit_params.py b/src/cloudflare/types/cache/origin_cloud_region_bulk_edit_params.py new file mode 100644 index 00000000000..b3e1d73819a --- /dev/null +++ b/src/cloudflare/types/cache/origin_cloud_region_bulk_edit_params.py @@ -0,0 +1,35 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Iterable +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["OriginCloudRegionBulkEditParams", "Body"] + + +class OriginCloudRegionBulkEditParams(TypedDict, total=False): + zone_id: str + """Identifier.""" + + body: Required[Iterable[Body]] + + +class Body(TypedDict, total=False): + """Request body for creating or updating an origin cloud region mapping.""" + + ip: Required[str] + """Origin IP address (IPv4 or IPv6). + + Normalized to canonical form before storage (RFC 5952 for IPv6). + """ + + region: Required[str] + """Cloud vendor region identifier. + + Must be a valid region for the specified vendor as returned by the + supported_regions endpoint. + """ + + vendor: Required[Literal["aws", "azure", "gcp", "oci"]] + """Cloud vendor hosting the origin. Must be one of the supported vendors.""" diff --git a/src/cloudflare/types/cache/origin_cloud_region_bulk_edit_response.py b/src/cloudflare/types/cache/origin_cloud_region_bulk_edit_response.py new file mode 100644 index 00000000000..097de32e532 --- /dev/null +++ b/src/cloudflare/types/cache/origin_cloud_region_bulk_edit_response.py @@ -0,0 +1,74 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import List, Optional +from datetime import datetime +from typing_extensions import Literal + +from pydantic import Field as FieldInfo + +from ..._models import BaseModel + +__all__ = ["OriginCloudRegionBulkEditResponse", "Value", "ValueFailed", "ValueSucceeded"] + + +class ValueFailed(BaseModel): + """Result for a single item in a batch operation.""" + + origin_ip: str = FieldInfo(alias="origin-ip") + """The origin IP address for this item.""" + + error: Optional[str] = None + """Error message explaining why the item failed. Present only on failed items.""" + + region: Optional[str] = None + """Cloud vendor region identifier. + + Present on succeeded items for patch operations. + """ + + vendor: Optional[str] = None + """Cloud vendor identifier. Present on succeeded items for patch operations.""" + + +class ValueSucceeded(BaseModel): + """Result for a single item in a batch operation.""" + + origin_ip: str = FieldInfo(alias="origin-ip") + """The origin IP address for this item.""" + + error: Optional[str] = None + """Error message explaining why the item failed. Present only on failed items.""" + + region: Optional[str] = None + """Cloud vendor region identifier. + + Present on succeeded items for patch operations. + """ + + vendor: Optional[str] = None + """Cloud vendor identifier. Present on succeeded items for patch operations.""" + + +class Value(BaseModel): + failed: List[ValueFailed] + """Items that could not be applied, with error details.""" + + succeeded: List[ValueSucceeded] + """Items that were successfully applied.""" + + +class OriginCloudRegionBulkEditResponse(BaseModel): + """Response result for a batch origin cloud region operation.""" + + id: Literal["origin_public_cloud_region"] + + editable: bool + """Whether the setting can be modified by the current user.""" + + value: Value + + modified_on: Optional[datetime] = None + """Time the mapping set was last modified. + + Null when no items were successfully applied. + """ diff --git a/src/cloudflare/types/cache/origin_cloud_region_create_params.py b/src/cloudflare/types/cache/origin_cloud_region_create_params.py new file mode 100644 index 00000000000..7ab14711332 --- /dev/null +++ b/src/cloudflare/types/cache/origin_cloud_region_create_params.py @@ -0,0 +1,28 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["OriginCloudRegionCreateParams"] + + +class OriginCloudRegionCreateParams(TypedDict, total=False): + zone_id: str + """Identifier.""" + + ip: Required[str] + """Origin IP address (IPv4 or IPv6). + + Normalized to canonical form before storage (RFC 5952 for IPv6). + """ + + region: Required[str] + """Cloud vendor region identifier. + + Must be a valid region for the specified vendor as returned by the + supported_regions endpoint. + """ + + vendor: Required[Literal["aws", "azure", "gcp", "oci"]] + """Cloud vendor hosting the origin. Must be one of the supported vendors.""" diff --git a/src/cloudflare/types/cache/origin_cloud_region_create_response.py b/src/cloudflare/types/cache/origin_cloud_region_create_response.py new file mode 100644 index 00000000000..370d4051a68 --- /dev/null +++ b/src/cloudflare/types/cache/origin_cloud_region_create_response.py @@ -0,0 +1,25 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from datetime import datetime +from typing_extensions import Literal + +from ..._models import BaseModel +from .origin_cloud_region import OriginCloudRegion + +__all__ = ["OriginCloudRegionCreateResponse"] + + +class OriginCloudRegionCreateResponse(BaseModel): + """Response result for a single origin cloud region mapping.""" + + id: Literal["origin_public_cloud_region"] + + editable: bool + """Whether the setting can be modified by the current user.""" + + value: OriginCloudRegion + """A single origin IP-to-cloud-region mapping.""" + + modified_on: Optional[datetime] = None + """Time the mapping was last modified.""" diff --git a/src/cloudflare/types/cache/origin_cloud_region_delete_response.py b/src/cloudflare/types/cache/origin_cloud_region_delete_response.py new file mode 100644 index 00000000000..fb8012e50c7 --- /dev/null +++ b/src/cloudflare/types/cache/origin_cloud_region_delete_response.py @@ -0,0 +1,25 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from datetime import datetime +from typing_extensions import Literal + +from ..._models import BaseModel +from .origin_cloud_region import OriginCloudRegion + +__all__ = ["OriginCloudRegionDeleteResponse"] + + +class OriginCloudRegionDeleteResponse(BaseModel): + """Response result for a single origin cloud region mapping.""" + + id: Literal["origin_public_cloud_region"] + + editable: bool + """Whether the setting can be modified by the current user.""" + + value: OriginCloudRegion + """A single origin IP-to-cloud-region mapping.""" + + modified_on: Optional[datetime] = None + """Time the mapping was last modified.""" diff --git a/src/cloudflare/types/cache/origin_cloud_region_edit_params.py b/src/cloudflare/types/cache/origin_cloud_region_edit_params.py new file mode 100644 index 00000000000..bac4d9de258 --- /dev/null +++ b/src/cloudflare/types/cache/origin_cloud_region_edit_params.py @@ -0,0 +1,28 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["OriginCloudRegionEditParams"] + + +class OriginCloudRegionEditParams(TypedDict, total=False): + zone_id: str + """Identifier.""" + + ip: Required[str] + """Origin IP address (IPv4 or IPv6). + + Normalized to canonical form before storage (RFC 5952 for IPv6). + """ + + region: Required[str] + """Cloud vendor region identifier. + + Must be a valid region for the specified vendor as returned by the + supported_regions endpoint. + """ + + vendor: Required[Literal["aws", "azure", "gcp", "oci"]] + """Cloud vendor hosting the origin. Must be one of the supported vendors.""" diff --git a/src/cloudflare/types/cache/origin_cloud_region_edit_response.py b/src/cloudflare/types/cache/origin_cloud_region_edit_response.py new file mode 100644 index 00000000000..d84400575d2 --- /dev/null +++ b/src/cloudflare/types/cache/origin_cloud_region_edit_response.py @@ -0,0 +1,24 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import List, Optional +from datetime import datetime +from typing_extensions import Literal + +from ..._models import BaseModel +from .origin_cloud_region import OriginCloudRegion + +__all__ = ["OriginCloudRegionEditResponse"] + + +class OriginCloudRegionEditResponse(BaseModel): + """Response result for a list of origin cloud region mappings.""" + + id: Literal["origin_public_cloud_region"] + + editable: bool + """Whether the setting can be modified by the current user.""" + + value: List[OriginCloudRegion] + + modified_on: Optional[datetime] = None + """Time the mapping set was last modified. Null when no mappings exist.""" diff --git a/src/cloudflare/types/cache/origin_cloud_region_get_response.py b/src/cloudflare/types/cache/origin_cloud_region_get_response.py new file mode 100644 index 00000000000..1cb87ebebcf --- /dev/null +++ b/src/cloudflare/types/cache/origin_cloud_region_get_response.py @@ -0,0 +1,25 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from datetime import datetime +from typing_extensions import Literal + +from ..._models import BaseModel +from .origin_cloud_region import OriginCloudRegion + +__all__ = ["OriginCloudRegionGetResponse"] + + +class OriginCloudRegionGetResponse(BaseModel): + """Response result for a single origin cloud region mapping.""" + + id: Literal["origin_public_cloud_region"] + + editable: bool + """Whether the setting can be modified by the current user.""" + + value: OriginCloudRegion + """A single origin IP-to-cloud-region mapping.""" + + modified_on: Optional[datetime] = None + """Time the mapping was last modified.""" diff --git a/src/cloudflare/types/cache/origin_cloud_region_list_response.py b/src/cloudflare/types/cache/origin_cloud_region_list_response.py new file mode 100644 index 00000000000..fc9fcf49a68 --- /dev/null +++ b/src/cloudflare/types/cache/origin_cloud_region_list_response.py @@ -0,0 +1,24 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import List, Optional +from datetime import datetime +from typing_extensions import Literal + +from ..._models import BaseModel +from .origin_cloud_region import OriginCloudRegion + +__all__ = ["OriginCloudRegionListResponse"] + + +class OriginCloudRegionListResponse(BaseModel): + """Response result for a list of origin cloud region mappings.""" + + id: Literal["origin_public_cloud_region"] + + editable: bool + """Whether the setting can be modified by the current user.""" + + value: List[OriginCloudRegion] + + modified_on: Optional[datetime] = None + """Time the mapping set was last modified. Null when no mappings exist.""" diff --git a/src/cloudflare/types/cache/origin_cloud_region_supported_regions_response.py b/src/cloudflare/types/cache/origin_cloud_region_supported_regions_response.py new file mode 100644 index 00000000000..abd9b42d664 --- /dev/null +++ b/src/cloudflare/types/cache/origin_cloud_region_supported_regions_response.py @@ -0,0 +1,37 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Dict, List + +from ..._models import BaseModel + +__all__ = ["OriginCloudRegionSupportedRegionsResponse", "Vendor"] + + +class Vendor(BaseModel): + """ + A single supported cloud region with associated Tiered Cache upper-tier colocations. + """ + + name: str + """Cloud vendor region identifier.""" + + upper_tier_colos: List[str] + """ + Cloudflare Tiered Cache upper-tier colocation codes co-located with this cloud + region. Requests from zones with a matching origin mapping will be routed + through these colos. + """ + + +class OriginCloudRegionSupportedRegionsResponse(BaseModel): + """Cloud vendors and their supported regions for origin cloud region mappings.""" + + obtained_codes: bool + """ + Whether Cloudflare airport codes (IATA colo identifiers) were successfully + resolved for the `upper_tier_colos` field on each region. When `false`, the + `upper_tier_colos` arrays may be empty or incomplete. + """ + + vendors: Dict[str, List[Vendor]] + """Map of vendor name to list of supported regions.""" diff --git a/tests/api_resources/cache/test_origin_cloud_regions.py b/tests/api_resources/cache/test_origin_cloud_regions.py new file mode 100644 index 00000000000..53a5c9bf953 --- /dev/null +++ b/tests/api_resources/cache/test_origin_cloud_regions.py @@ -0,0 +1,829 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +import os +from typing import Any, Optional, cast + +import pytest + +from cloudflare import Cloudflare, AsyncCloudflare +from tests.utils import assert_matches_type +from cloudflare.types.cache import ( + OriginCloudRegionGetResponse, + OriginCloudRegionEditResponse, + OriginCloudRegionListResponse, + OriginCloudRegionCreateResponse, + OriginCloudRegionDeleteResponse, + OriginCloudRegionBulkEditResponse, + OriginCloudRegionBulkDeleteResponse, + OriginCloudRegionSupportedRegionsResponse, +) + +base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") + + +class TestOriginCloudRegions: + parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"]) + + @parametrize + def test_method_create(self, client: Cloudflare) -> None: + origin_cloud_region = client.cache.origin_cloud_regions.create( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ip="192.0.2.1", + region="us-east-1", + vendor="aws", + ) + assert_matches_type(Optional[OriginCloudRegionCreateResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_raw_response_create(self, client: Cloudflare) -> None: + response = client.cache.origin_cloud_regions.with_raw_response.create( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ip="192.0.2.1", + region="us-east-1", + vendor="aws", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionCreateResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_streaming_response_create(self, client: Cloudflare) -> None: + with client.cache.origin_cloud_regions.with_streaming_response.create( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ip="192.0.2.1", + region="us-east-1", + vendor="aws", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionCreateResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_create(self, client: Cloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + client.cache.origin_cloud_regions.with_raw_response.create( + zone_id="", + ip="192.0.2.1", + region="us-east-1", + vendor="aws", + ) + + @parametrize + def test_method_list(self, client: Cloudflare) -> None: + origin_cloud_region = client.cache.origin_cloud_regions.list( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + assert_matches_type(Optional[OriginCloudRegionListResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_raw_response_list(self, client: Cloudflare) -> None: + response = client.cache.origin_cloud_regions.with_raw_response.list( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionListResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_streaming_response_list(self, client: Cloudflare) -> None: + with client.cache.origin_cloud_regions.with_streaming_response.list( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionListResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_list(self, client: Cloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + client.cache.origin_cloud_regions.with_raw_response.list( + zone_id="", + ) + + @parametrize + def test_method_delete(self, client: Cloudflare) -> None: + origin_cloud_region = client.cache.origin_cloud_regions.delete( + origin_ip="192.0.2.1", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + assert_matches_type(Optional[OriginCloudRegionDeleteResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_raw_response_delete(self, client: Cloudflare) -> None: + response = client.cache.origin_cloud_regions.with_raw_response.delete( + origin_ip="192.0.2.1", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionDeleteResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_streaming_response_delete(self, client: Cloudflare) -> None: + with client.cache.origin_cloud_regions.with_streaming_response.delete( + origin_ip="192.0.2.1", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionDeleteResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_delete(self, client: Cloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + client.cache.origin_cloud_regions.with_raw_response.delete( + origin_ip="192.0.2.1", + zone_id="", + ) + + with pytest.raises(ValueError, match=r"Expected a non-empty value for `origin_ip` but received ''"): + client.cache.origin_cloud_regions.with_raw_response.delete( + origin_ip="", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + @parametrize + def test_method_bulk_delete(self, client: Cloudflare) -> None: + origin_cloud_region = client.cache.origin_cloud_regions.bulk_delete( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + assert_matches_type(Optional[OriginCloudRegionBulkDeleteResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_raw_response_bulk_delete(self, client: Cloudflare) -> None: + response = client.cache.origin_cloud_regions.with_raw_response.bulk_delete( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionBulkDeleteResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_streaming_response_bulk_delete(self, client: Cloudflare) -> None: + with client.cache.origin_cloud_regions.with_streaming_response.bulk_delete( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionBulkDeleteResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_bulk_delete(self, client: Cloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + client.cache.origin_cloud_regions.with_raw_response.bulk_delete( + zone_id="", + ) + + @parametrize + def test_method_bulk_edit(self, client: Cloudflare) -> None: + origin_cloud_region = client.cache.origin_cloud_regions.bulk_edit( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + body=[ + { + "ip": "192.0.2.1", + "region": "us-east-1", + "vendor": "aws", + }, + { + "ip": "2001:db8::1", + "region": "us-central1", + "vendor": "gcp", + }, + ], + ) + assert_matches_type(Optional[OriginCloudRegionBulkEditResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_raw_response_bulk_edit(self, client: Cloudflare) -> None: + response = client.cache.origin_cloud_regions.with_raw_response.bulk_edit( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + body=[ + { + "ip": "192.0.2.1", + "region": "us-east-1", + "vendor": "aws", + }, + { + "ip": "2001:db8::1", + "region": "us-central1", + "vendor": "gcp", + }, + ], + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionBulkEditResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_streaming_response_bulk_edit(self, client: Cloudflare) -> None: + with client.cache.origin_cloud_regions.with_streaming_response.bulk_edit( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + body=[ + { + "ip": "192.0.2.1", + "region": "us-east-1", + "vendor": "aws", + }, + { + "ip": "2001:db8::1", + "region": "us-central1", + "vendor": "gcp", + }, + ], + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionBulkEditResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_bulk_edit(self, client: Cloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + client.cache.origin_cloud_regions.with_raw_response.bulk_edit( + zone_id="", + body=[ + { + "ip": "192.0.2.1", + "region": "us-east-1", + "vendor": "aws", + }, + { + "ip": "2001:db8::1", + "region": "us-central1", + "vendor": "gcp", + }, + ], + ) + + @parametrize + def test_method_edit(self, client: Cloudflare) -> None: + origin_cloud_region = client.cache.origin_cloud_regions.edit( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ip="2001:db8::1", + region="us-central1", + vendor="gcp", + ) + assert_matches_type(Optional[OriginCloudRegionEditResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_raw_response_edit(self, client: Cloudflare) -> None: + response = client.cache.origin_cloud_regions.with_raw_response.edit( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ip="2001:db8::1", + region="us-central1", + vendor="gcp", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionEditResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_streaming_response_edit(self, client: Cloudflare) -> None: + with client.cache.origin_cloud_regions.with_streaming_response.edit( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ip="2001:db8::1", + region="us-central1", + vendor="gcp", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionEditResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_edit(self, client: Cloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + client.cache.origin_cloud_regions.with_raw_response.edit( + zone_id="", + ip="2001:db8::1", + region="us-central1", + vendor="gcp", + ) + + @parametrize + def test_method_get(self, client: Cloudflare) -> None: + origin_cloud_region = client.cache.origin_cloud_regions.get( + origin_ip="192.0.2.1", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + assert_matches_type(Optional[OriginCloudRegionGetResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_raw_response_get(self, client: Cloudflare) -> None: + response = client.cache.origin_cloud_regions.with_raw_response.get( + origin_ip="192.0.2.1", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionGetResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_streaming_response_get(self, client: Cloudflare) -> None: + with client.cache.origin_cloud_regions.with_streaming_response.get( + origin_ip="192.0.2.1", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionGetResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_get(self, client: Cloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + client.cache.origin_cloud_regions.with_raw_response.get( + origin_ip="192.0.2.1", + zone_id="", + ) + + with pytest.raises(ValueError, match=r"Expected a non-empty value for `origin_ip` but received ''"): + client.cache.origin_cloud_regions.with_raw_response.get( + origin_ip="", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + @parametrize + def test_method_supported_regions(self, client: Cloudflare) -> None: + origin_cloud_region = client.cache.origin_cloud_regions.supported_regions( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + assert_matches_type(Optional[OriginCloudRegionSupportedRegionsResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_raw_response_supported_regions(self, client: Cloudflare) -> None: + response = client.cache.origin_cloud_regions.with_raw_response.supported_regions( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = response.parse() + assert_matches_type(Optional[OriginCloudRegionSupportedRegionsResponse], origin_cloud_region, path=["response"]) + + @parametrize + def test_streaming_response_supported_regions(self, client: Cloudflare) -> None: + with client.cache.origin_cloud_regions.with_streaming_response.supported_regions( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = response.parse() + assert_matches_type( + Optional[OriginCloudRegionSupportedRegionsResponse], origin_cloud_region, path=["response"] + ) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_supported_regions(self, client: Cloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + client.cache.origin_cloud_regions.with_raw_response.supported_regions( + zone_id="", + ) + + +class TestAsyncOriginCloudRegions: + parametrize = pytest.mark.parametrize( + "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"] + ) + + @parametrize + async def test_method_create(self, async_client: AsyncCloudflare) -> None: + origin_cloud_region = await async_client.cache.origin_cloud_regions.create( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ip="192.0.2.1", + region="us-east-1", + vendor="aws", + ) + assert_matches_type(Optional[OriginCloudRegionCreateResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_raw_response_create(self, async_client: AsyncCloudflare) -> None: + response = await async_client.cache.origin_cloud_regions.with_raw_response.create( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ip="192.0.2.1", + region="us-east-1", + vendor="aws", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionCreateResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_streaming_response_create(self, async_client: AsyncCloudflare) -> None: + async with async_client.cache.origin_cloud_regions.with_streaming_response.create( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ip="192.0.2.1", + region="us-east-1", + vendor="aws", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionCreateResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_create(self, async_client: AsyncCloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + await async_client.cache.origin_cloud_regions.with_raw_response.create( + zone_id="", + ip="192.0.2.1", + region="us-east-1", + vendor="aws", + ) + + @parametrize + async def test_method_list(self, async_client: AsyncCloudflare) -> None: + origin_cloud_region = await async_client.cache.origin_cloud_regions.list( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + assert_matches_type(Optional[OriginCloudRegionListResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_raw_response_list(self, async_client: AsyncCloudflare) -> None: + response = await async_client.cache.origin_cloud_regions.with_raw_response.list( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionListResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_streaming_response_list(self, async_client: AsyncCloudflare) -> None: + async with async_client.cache.origin_cloud_regions.with_streaming_response.list( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionListResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_list(self, async_client: AsyncCloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + await async_client.cache.origin_cloud_regions.with_raw_response.list( + zone_id="", + ) + + @parametrize + async def test_method_delete(self, async_client: AsyncCloudflare) -> None: + origin_cloud_region = await async_client.cache.origin_cloud_regions.delete( + origin_ip="192.0.2.1", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + assert_matches_type(Optional[OriginCloudRegionDeleteResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_raw_response_delete(self, async_client: AsyncCloudflare) -> None: + response = await async_client.cache.origin_cloud_regions.with_raw_response.delete( + origin_ip="192.0.2.1", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionDeleteResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_streaming_response_delete(self, async_client: AsyncCloudflare) -> None: + async with async_client.cache.origin_cloud_regions.with_streaming_response.delete( + origin_ip="192.0.2.1", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionDeleteResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_delete(self, async_client: AsyncCloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + await async_client.cache.origin_cloud_regions.with_raw_response.delete( + origin_ip="192.0.2.1", + zone_id="", + ) + + with pytest.raises(ValueError, match=r"Expected a non-empty value for `origin_ip` but received ''"): + await async_client.cache.origin_cloud_regions.with_raw_response.delete( + origin_ip="", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + @parametrize + async def test_method_bulk_delete(self, async_client: AsyncCloudflare) -> None: + origin_cloud_region = await async_client.cache.origin_cloud_regions.bulk_delete( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + assert_matches_type(Optional[OriginCloudRegionBulkDeleteResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_raw_response_bulk_delete(self, async_client: AsyncCloudflare) -> None: + response = await async_client.cache.origin_cloud_regions.with_raw_response.bulk_delete( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionBulkDeleteResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_streaming_response_bulk_delete(self, async_client: AsyncCloudflare) -> None: + async with async_client.cache.origin_cloud_regions.with_streaming_response.bulk_delete( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionBulkDeleteResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_bulk_delete(self, async_client: AsyncCloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + await async_client.cache.origin_cloud_regions.with_raw_response.bulk_delete( + zone_id="", + ) + + @parametrize + async def test_method_bulk_edit(self, async_client: AsyncCloudflare) -> None: + origin_cloud_region = await async_client.cache.origin_cloud_regions.bulk_edit( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + body=[ + { + "ip": "192.0.2.1", + "region": "us-east-1", + "vendor": "aws", + }, + { + "ip": "2001:db8::1", + "region": "us-central1", + "vendor": "gcp", + }, + ], + ) + assert_matches_type(Optional[OriginCloudRegionBulkEditResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_raw_response_bulk_edit(self, async_client: AsyncCloudflare) -> None: + response = await async_client.cache.origin_cloud_regions.with_raw_response.bulk_edit( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + body=[ + { + "ip": "192.0.2.1", + "region": "us-east-1", + "vendor": "aws", + }, + { + "ip": "2001:db8::1", + "region": "us-central1", + "vendor": "gcp", + }, + ], + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionBulkEditResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_streaming_response_bulk_edit(self, async_client: AsyncCloudflare) -> None: + async with async_client.cache.origin_cloud_regions.with_streaming_response.bulk_edit( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + body=[ + { + "ip": "192.0.2.1", + "region": "us-east-1", + "vendor": "aws", + }, + { + "ip": "2001:db8::1", + "region": "us-central1", + "vendor": "gcp", + }, + ], + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionBulkEditResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_bulk_edit(self, async_client: AsyncCloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + await async_client.cache.origin_cloud_regions.with_raw_response.bulk_edit( + zone_id="", + body=[ + { + "ip": "192.0.2.1", + "region": "us-east-1", + "vendor": "aws", + }, + { + "ip": "2001:db8::1", + "region": "us-central1", + "vendor": "gcp", + }, + ], + ) + + @parametrize + async def test_method_edit(self, async_client: AsyncCloudflare) -> None: + origin_cloud_region = await async_client.cache.origin_cloud_regions.edit( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ip="2001:db8::1", + region="us-central1", + vendor="gcp", + ) + assert_matches_type(Optional[OriginCloudRegionEditResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_raw_response_edit(self, async_client: AsyncCloudflare) -> None: + response = await async_client.cache.origin_cloud_regions.with_raw_response.edit( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ip="2001:db8::1", + region="us-central1", + vendor="gcp", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionEditResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_streaming_response_edit(self, async_client: AsyncCloudflare) -> None: + async with async_client.cache.origin_cloud_regions.with_streaming_response.edit( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ip="2001:db8::1", + region="us-central1", + vendor="gcp", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionEditResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_edit(self, async_client: AsyncCloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + await async_client.cache.origin_cloud_regions.with_raw_response.edit( + zone_id="", + ip="2001:db8::1", + region="us-central1", + vendor="gcp", + ) + + @parametrize + async def test_method_get(self, async_client: AsyncCloudflare) -> None: + origin_cloud_region = await async_client.cache.origin_cloud_regions.get( + origin_ip="192.0.2.1", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + assert_matches_type(Optional[OriginCloudRegionGetResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_raw_response_get(self, async_client: AsyncCloudflare) -> None: + response = await async_client.cache.origin_cloud_regions.with_raw_response.get( + origin_ip="192.0.2.1", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionGetResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_streaming_response_get(self, async_client: AsyncCloudflare) -> None: + async with async_client.cache.origin_cloud_regions.with_streaming_response.get( + origin_ip="192.0.2.1", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionGetResponse], origin_cloud_region, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_get(self, async_client: AsyncCloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + await async_client.cache.origin_cloud_regions.with_raw_response.get( + origin_ip="192.0.2.1", + zone_id="", + ) + + with pytest.raises(ValueError, match=r"Expected a non-empty value for `origin_ip` but received ''"): + await async_client.cache.origin_cloud_regions.with_raw_response.get( + origin_ip="", + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + @parametrize + async def test_method_supported_regions(self, async_client: AsyncCloudflare) -> None: + origin_cloud_region = await async_client.cache.origin_cloud_regions.supported_regions( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + assert_matches_type(Optional[OriginCloudRegionSupportedRegionsResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_raw_response_supported_regions(self, async_client: AsyncCloudflare) -> None: + response = await async_client.cache.origin_cloud_regions.with_raw_response.supported_regions( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + origin_cloud_region = await response.parse() + assert_matches_type(Optional[OriginCloudRegionSupportedRegionsResponse], origin_cloud_region, path=["response"]) + + @parametrize + async def test_streaming_response_supported_regions(self, async_client: AsyncCloudflare) -> None: + async with async_client.cache.origin_cloud_regions.with_streaming_response.supported_regions( + zone_id="023e105f4ecef8ad9ca31a8372d0c353", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + origin_cloud_region = await response.parse() + assert_matches_type( + Optional[OriginCloudRegionSupportedRegionsResponse], origin_cloud_region, path=["response"] + ) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_supported_regions(self, async_client: AsyncCloudflare) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `zone_id` but received ''"): + await async_client.cache.origin_cloud_regions.with_raw_response.supported_regions( + zone_id="", + ) From e547a3ec962cbe20c7b0016c07250df0030e580f Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:34:28 -0500 Subject: [PATCH 04/27] chore(cloudforce_one): update generated types and methods --- .../threat_events/threat_events.py | 24 ++++++++++++------- .../threat_event_list_params.py | 5 ++++ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/cloudflare/resources/cloudforce_one/threat_events/threat_events.py b/src/cloudflare/resources/cloudforce_one/threat_events/threat_events.py index 2bf7fa22434..b95f6db0e71 100644 --- a/src/cloudflare/resources/cloudforce_one/threat_events/threat_events.py +++ b/src/cloudflare/resources/cloudforce_one/threat_events/threat_events.py @@ -276,11 +276,11 @@ def list( timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> ThreatEventListResponse: """ - When `datasetId` is unspecified, events will be listed from the - `Cloudforce One Threat Events` dataset. To list existing datasets (and their - IDs), use the + Use `datasetId=all` or `datasetId=*` to query all event datasets for the account + (limited to 10). When `datasetId` is unspecified, events are listed from the + default Cloudforce One Threat Events dataset. To list existing datasets, use the [`List Datasets`](https://developers.cloudflare.com/api/resources/cloudforce_one/subresources/threat_events/subresources/datasets/methods/list/) - endpoint). Also, must provide query parameters. + endpoint. Args: account_id: Account ID. @@ -290,6 +290,10 @@ def list( result_info.cursor field. Use cursor-based pagination for deep pagination (beyond 100,000 records) or for optimal performance. + dataset_id: Dataset IDs to query events from (array of UUIDs), or special value 'all' or + '\\**' to query all event datasets for the account. If not provided, uses the + default dataset. + page: Page number (1-indexed) for offset-based pagination. Limited to offset of 100,000 records. For deep pagination, use cursor-based pagination instead. @@ -675,11 +679,11 @@ async def list( timeout: float | httpx.Timeout | None | NotGiven = not_given, ) -> ThreatEventListResponse: """ - When `datasetId` is unspecified, events will be listed from the - `Cloudforce One Threat Events` dataset. To list existing datasets (and their - IDs), use the + Use `datasetId=all` or `datasetId=*` to query all event datasets for the account + (limited to 10). When `datasetId` is unspecified, events are listed from the + default Cloudforce One Threat Events dataset. To list existing datasets, use the [`List Datasets`](https://developers.cloudflare.com/api/resources/cloudforce_one/subresources/threat_events/subresources/datasets/methods/list/) - endpoint). Also, must provide query parameters. + endpoint. Args: account_id: Account ID. @@ -689,6 +693,10 @@ async def list( result_info.cursor field. Use cursor-based pagination for deep pagination (beyond 100,000 records) or for optimal performance. + dataset_id: Dataset IDs to query events from (array of UUIDs), or special value 'all' or + '\\**' to query all event datasets for the account. If not provided, uses the + default dataset. + page: Page number (1-indexed) for offset-based pagination. Limited to offset of 100,000 records. For deep pagination, use cursor-based pagination instead. diff --git a/src/cloudflare/types/cloudforce_one/threat_event_list_params.py b/src/cloudflare/types/cloudforce_one/threat_event_list_params.py index a5fbc858698..d0a33c525d5 100644 --- a/src/cloudflare/types/cloudforce_one/threat_event_list_params.py +++ b/src/cloudflare/types/cloudforce_one/threat_event_list_params.py @@ -25,6 +25,11 @@ class ThreatEventListParams(TypedDict, total=False): """ dataset_id: Annotated[SequenceNotStr[str], PropertyInfo(alias="datasetId")] + """ + Dataset IDs to query events from (array of UUIDs), or special value 'all' or + '\\**' to query all event datasets for the account. If not provided, uses the + default dataset. + """ force_refresh: Annotated[bool, PropertyInfo(alias="forceRefresh")] From 04af216ac1635fc5b0ccd64b141a511c64f3ec75 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:35:41 -0500 Subject: [PATCH 05/27] chore(email_security): update generated types and methods --- .../email_security/investigate/investigate.py | 4 +- .../investigate/detection_get_response.py | 46 ++++++++++++++++++- .../investigate_get_response.py | 6 ++- .../email_security/investigate_list_params.py | 2 +- .../investigate_list_response.py | 6 ++- 5 files changed, 58 insertions(+), 6 deletions(-) diff --git a/src/cloudflare/resources/email_security/investigate/investigate.py b/src/cloudflare/resources/email_security/investigate/investigate.py index f161711f98d..9fd1bee5ed0 100644 --- a/src/cloudflare/resources/email_security/investigate/investigate.py +++ b/src/cloudflare/resources/email_security/investigate/investigate.py @@ -188,7 +188,7 @@ def list( page: Deprecated: Use cursor pagination instead. - per_page: The number of results per page. + per_page: The number of results per page. Maximum value is 1000. query: The space-delimited term used in the query. The search is case-insensitive. @@ -436,7 +436,7 @@ def list( page: Deprecated: Use cursor pagination instead. - per_page: The number of results per page. + per_page: The number of results per page. Maximum value is 1000. query: The space-delimited term used in the query. The search is case-insensitive. diff --git a/src/cloudflare/types/email_security/investigate/detection_get_response.py b/src/cloudflare/types/email_security/investigate/detection_get_response.py index 0897317cee2..444f1b45083 100644 --- a/src/cloudflare/types/email_security/investigate/detection_get_response.py +++ b/src/cloudflare/types/email_security/investigate/detection_get_response.py @@ -5,7 +5,16 @@ from ...._models import BaseModel -__all__ = ["DetectionGetResponse", "Attachment", "Header", "Link", "SenderInfo", "ThreatCategory", "Validation"] +__all__ = [ + "DetectionGetResponse", + "Attachment", + "Finding", + "Header", + "Link", + "SenderInfo", + "ThreatCategory", + "Validation", +] class Attachment(BaseModel): @@ -33,6 +42,39 @@ class Attachment(BaseModel): name: Optional[str] = None +class Finding(BaseModel): + attachment: Optional[str] = None + + detail: Optional[str] = None + + detection: Optional[ + Literal[ + "MALICIOUS", + "MALICIOUS-BEC", + "SUSPICIOUS", + "SPOOF", + "SPAM", + "BULK", + "ENCRYPTED", + "EXTERNAL", + "UNKNOWN", + "NONE", + ] + ] = None + + field: Optional[str] = None + + name: Optional[str] = None + + portion: Optional[str] = None + + reason: Optional[str] = None + + score: Optional[float] = None + + value: Optional[str] = None + + class Header(BaseModel): name: str @@ -82,6 +124,8 @@ class DetectionGetResponse(BaseModel): attachments: List[Attachment] + findings: List[Finding] + headers: List[Header] links: List[Link] diff --git a/src/cloudflare/types/email_security/investigate_get_response.py b/src/cloudflare/types/email_security/investigate_get_response.py index eb1b7a11982..1396753de51 100644 --- a/src/cloudflare/types/email_security/investigate_get_response.py +++ b/src/cloudflare/types/email_security/investigate_get_response.py @@ -128,6 +128,10 @@ class InvestigateGetResponse(BaseModel): ] ] = None + delivery_status: Optional[ + List[Literal["delivered", "moved", "quarantined", "rejected", "deferred", "bounced", "queued"]] + ] = None + edf_hash: Optional[str] = None envelope_from: Optional[str] = None @@ -150,7 +154,7 @@ class InvestigateGetResponse(BaseModel): ] = None findings: Optional[List[Finding]] = None - """Deprecated.""" + """Deprecated: use `/investigate/{id}/detections` instead.""" from_: Optional[str] = FieldInfo(alias="from", default=None) diff --git a/src/cloudflare/types/email_security/investigate_list_params.py b/src/cloudflare/types/email_security/investigate_list_params.py index 960e2998fba..e200d780eea 100644 --- a/src/cloudflare/types/email_security/investigate_list_params.py +++ b/src/cloudflare/types/email_security/investigate_list_params.py @@ -51,7 +51,7 @@ class InvestigateListParams(TypedDict, total=False): """Deprecated: Use cursor pagination instead.""" per_page: int - """The number of results per page.""" + """The number of results per page. Maximum value is 1000.""" query: str """The space-delimited term used in the query. The search is case-insensitive. diff --git a/src/cloudflare/types/email_security/investigate_list_response.py b/src/cloudflare/types/email_security/investigate_list_response.py index f9c44c7b2fc..12c5ae7cb75 100644 --- a/src/cloudflare/types/email_security/investigate_list_response.py +++ b/src/cloudflare/types/email_security/investigate_list_response.py @@ -128,6 +128,10 @@ class InvestigateListResponse(BaseModel): ] ] = None + delivery_status: Optional[ + List[Literal["delivered", "moved", "quarantined", "rejected", "deferred", "bounced", "queued"]] + ] = None + edf_hash: Optional[str] = None envelope_from: Optional[str] = None @@ -150,7 +154,7 @@ class InvestigateListResponse(BaseModel): ] = None findings: Optional[List[Finding]] = None - """Deprecated.""" + """Deprecated: use `/investigate/{id}/detections` instead.""" from_: Optional[str] = FieldInfo(alias="from", default=None) From 8f57bb855a45cd7300370d10267792a4aa08eb2c Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:36:14 -0500 Subject: [PATCH 06/27] chore(iam): update generated types and methods --- .../resources/iam/user_groups/members.py | 20 +++++----- .../iam/user_groups/member_create_params.py | 6 +-- .../iam/user_groups/member_update_params.py | 6 +-- .../iam/user_groups/test_members.py | 40 +++++++++---------- 4 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/cloudflare/resources/iam/user_groups/members.py b/src/cloudflare/resources/iam/user_groups/members.py index 1e68197614f..cd55897743d 100644 --- a/src/cloudflare/resources/iam/user_groups/members.py +++ b/src/cloudflare/resources/iam/user_groups/members.py @@ -53,7 +53,7 @@ def create( user_group_id: str, *, account_id: str | None = None, - body: Iterable[member_create_params.Body], + members: Iterable[member_create_params.Member], # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -89,7 +89,7 @@ def create( account_id=account_id, user_group_id=user_group_id, ), - body=maybe_transform(body, Iterable[member_create_params.Body]), + body=maybe_transform(members, Iterable[member_create_params.Member]), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -105,7 +105,7 @@ def update( user_group_id: str, *, account_id: str | None = None, - body: Iterable[member_update_params.Body], + members: Iterable[member_update_params.Member], # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -121,7 +121,7 @@ def update( user_group_id: User Group identifier tag. - body: Set/Replace members to a user group. + members: Set/Replace members to a user group. extra_headers: Send extra headers @@ -144,7 +144,7 @@ def update( user_group_id=user_group_id, ), page=SyncSinglePage[MemberUpdateResponse], - body=maybe_transform(body, Iterable[member_update_params.Body]), + body=maybe_transform(members, Iterable[member_update_params.Member]), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), @@ -297,7 +297,7 @@ async def create( user_group_id: str, *, account_id: str | None = None, - body: Iterable[member_create_params.Body], + members: Iterable[member_create_params.Member], # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -333,7 +333,7 @@ async def create( account_id=account_id, user_group_id=user_group_id, ), - body=await async_maybe_transform(body, Iterable[member_create_params.Body]), + body=await async_maybe_transform(members, Iterable[member_create_params.Member]), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -349,7 +349,7 @@ def update( user_group_id: str, *, account_id: str | None = None, - body: Iterable[member_update_params.Body], + members: Iterable[member_update_params.Member], # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -365,7 +365,7 @@ def update( user_group_id: User Group identifier tag. - body: Set/Replace members to a user group. + members: Set/Replace members to a user group. extra_headers: Send extra headers @@ -388,7 +388,7 @@ def update( user_group_id=user_group_id, ), page=AsyncSinglePage[MemberUpdateResponse], - body=maybe_transform(body, Iterable[member_update_params.Body]), + body=maybe_transform(members, Iterable[member_update_params.Member]), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout ), diff --git a/src/cloudflare/types/iam/user_groups/member_create_params.py b/src/cloudflare/types/iam/user_groups/member_create_params.py index ca4c234cfbf..fe09b3b57f3 100644 --- a/src/cloudflare/types/iam/user_groups/member_create_params.py +++ b/src/cloudflare/types/iam/user_groups/member_create_params.py @@ -5,16 +5,16 @@ from typing import Iterable from typing_extensions import Required, TypedDict -__all__ = ["MemberCreateParams", "Body"] +__all__ = ["MemberCreateParams", "Member"] class MemberCreateParams(TypedDict, total=False): account_id: str """Account identifier tag.""" - body: Required[Iterable[Body]] + members: Required[Iterable[Member]] -class Body(TypedDict, total=False): +class Member(TypedDict, total=False): id: Required[str] """The identifier of an existing account Member.""" diff --git a/src/cloudflare/types/iam/user_groups/member_update_params.py b/src/cloudflare/types/iam/user_groups/member_update_params.py index 69f572b934c..017f3356339 100644 --- a/src/cloudflare/types/iam/user_groups/member_update_params.py +++ b/src/cloudflare/types/iam/user_groups/member_update_params.py @@ -5,17 +5,17 @@ from typing import Iterable from typing_extensions import Required, TypedDict -__all__ = ["MemberUpdateParams", "Body"] +__all__ = ["MemberUpdateParams", "Member"] class MemberUpdateParams(TypedDict, total=False): account_id: str """Account identifier tag.""" - body: Required[Iterable[Body]] + members: Required[Iterable[Member]] """Set/Replace members to a user group.""" -class Body(TypedDict, total=False): +class Member(TypedDict, total=False): id: Required[str] """The identifier of an existing account Member.""" diff --git a/tests/api_resources/iam/user_groups/test_members.py b/tests/api_resources/iam/user_groups/test_members.py index 603db00d3d0..c9830c6e646 100644 --- a/tests/api_resources/iam/user_groups/test_members.py +++ b/tests/api_resources/iam/user_groups/test_members.py @@ -28,7 +28,7 @@ def test_method_create(self, client: Cloudflare) -> None: member = client.iam.user_groups.members.create( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) @@ -37,7 +37,7 @@ def test_raw_response_create(self, client: Cloudflare) -> None: response = client.iam.user_groups.members.with_raw_response.create( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) assert response.is_closed is True @@ -50,7 +50,7 @@ def test_streaming_response_create(self, client: Cloudflare) -> None: with client.iam.user_groups.members.with_streaming_response.create( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -66,14 +66,14 @@ def test_path_params_create(self, client: Cloudflare) -> None: client.iam.user_groups.members.with_raw_response.create( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) with pytest.raises(ValueError, match=r"Expected a non-empty value for `user_group_id` but received ''"): client.iam.user_groups.members.with_raw_response.create( user_group_id="", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) @parametrize @@ -81,7 +81,7 @@ def test_method_update(self, client: Cloudflare) -> None: member = client.iam.user_groups.members.update( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) assert_matches_type(SyncSinglePage[MemberUpdateResponse], member, path=["response"]) @@ -90,7 +90,7 @@ def test_raw_response_update(self, client: Cloudflare) -> None: response = client.iam.user_groups.members.with_raw_response.update( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) assert response.is_closed is True @@ -103,7 +103,7 @@ def test_streaming_response_update(self, client: Cloudflare) -> None: with client.iam.user_groups.members.with_streaming_response.update( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -119,14 +119,14 @@ def test_path_params_update(self, client: Cloudflare) -> None: client.iam.user_groups.members.with_raw_response.update( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) with pytest.raises(ValueError, match=r"Expected a non-empty value for `user_group_id` but received ''"): client.iam.user_groups.members.with_raw_response.update( user_group_id="", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) @parametrize @@ -258,7 +258,7 @@ async def test_method_create(self, async_client: AsyncCloudflare) -> None: member = await async_client.iam.user_groups.members.create( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) assert_matches_type(Optional[MemberCreateResponse], member, path=["response"]) @@ -267,7 +267,7 @@ async def test_raw_response_create(self, async_client: AsyncCloudflare) -> None: response = await async_client.iam.user_groups.members.with_raw_response.create( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) assert response.is_closed is True @@ -280,7 +280,7 @@ async def test_streaming_response_create(self, async_client: AsyncCloudflare) -> async with async_client.iam.user_groups.members.with_streaming_response.create( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -296,14 +296,14 @@ async def test_path_params_create(self, async_client: AsyncCloudflare) -> None: await async_client.iam.user_groups.members.with_raw_response.create( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) with pytest.raises(ValueError, match=r"Expected a non-empty value for `user_group_id` but received ''"): await async_client.iam.user_groups.members.with_raw_response.create( user_group_id="", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) @parametrize @@ -311,7 +311,7 @@ async def test_method_update(self, async_client: AsyncCloudflare) -> None: member = await async_client.iam.user_groups.members.update( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) assert_matches_type(AsyncSinglePage[MemberUpdateResponse], member, path=["response"]) @@ -320,7 +320,7 @@ async def test_raw_response_update(self, async_client: AsyncCloudflare) -> None: response = await async_client.iam.user_groups.members.with_raw_response.update( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) assert response.is_closed is True @@ -333,7 +333,7 @@ async def test_streaming_response_update(self, async_client: AsyncCloudflare) -> async with async_client.iam.user_groups.members.with_streaming_response.update( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -349,14 +349,14 @@ async def test_path_params_update(self, async_client: AsyncCloudflare) -> None: await async_client.iam.user_groups.members.with_raw_response.update( user_group_id="023e105f4ecef8ad9ca31a8372d0c353", account_id="", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) with pytest.raises(ValueError, match=r"Expected a non-empty value for `user_group_id` but received ''"): await async_client.iam.user_groups.members.with_raw_response.update( user_group_id="", account_id="023e105f4ecef8ad9ca31a8372d0c353", - body=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], + members=[{"id": "023e105f4ecef8ad9ca31a8372d0c353"}], ) @parametrize From 91a6635f6f5f5933113ee7c5a2bfdcbccdc428ca Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:36:46 -0500 Subject: [PATCH 07/27] chore(logpush): update generated types and methods --- src/cloudflare/resources/logpush/datasets/fields.py | 2 ++ src/cloudflare/resources/logpush/datasets/jobs.py | 2 ++ src/cloudflare/resources/logpush/jobs.py | 2 ++ src/cloudflare/types/logpush/job_create_params.py | 1 + src/cloudflare/types/logpush/logpush_job.py | 1 + src/cloudflare/types/logpush/output_options.py | 6 ++++++ src/cloudflare/types/logpush/output_options_param.py | 6 ++++++ tests/api_resources/logpush/test_jobs.py | 4 ++++ 8 files changed, 24 insertions(+) diff --git a/src/cloudflare/resources/logpush/datasets/fields.py b/src/cloudflare/resources/logpush/datasets/fields.py index 9e49fbc0cad..cd59d6f68ba 100644 --- a/src/cloudflare/resources/logpush/datasets/fields.py +++ b/src/cloudflare/resources/logpush/datasets/fields.py @@ -58,6 +58,7 @@ def get( "dns_firewall_logs", "dns_logs", "email_security_alerts", + "email_security_post_delivery_events", "firewall_events", "gateway_dns", "gateway_http", @@ -180,6 +181,7 @@ async def get( "dns_firewall_logs", "dns_logs", "email_security_alerts", + "email_security_post_delivery_events", "firewall_events", "gateway_dns", "gateway_http", diff --git a/src/cloudflare/resources/logpush/datasets/jobs.py b/src/cloudflare/resources/logpush/datasets/jobs.py index 5cbac38c0aa..1902463dd00 100644 --- a/src/cloudflare/resources/logpush/datasets/jobs.py +++ b/src/cloudflare/resources/logpush/datasets/jobs.py @@ -59,6 +59,7 @@ def get( "dns_firewall_logs", "dns_logs", "email_security_alerts", + "email_security_post_delivery_events", "firewall_events", "gateway_dns", "gateway_http", @@ -176,6 +177,7 @@ def get( "dns_firewall_logs", "dns_logs", "email_security_alerts", + "email_security_post_delivery_events", "firewall_events", "gateway_dns", "gateway_http", diff --git a/src/cloudflare/resources/logpush/jobs.py b/src/cloudflare/resources/logpush/jobs.py index 923de998f9c..cd1c3d91d4a 100644 --- a/src/cloudflare/resources/logpush/jobs.py +++ b/src/cloudflare/resources/logpush/jobs.py @@ -68,6 +68,7 @@ def create( "dns_firewall_logs", "dns_logs", "email_security_alerts", + "email_security_post_delivery_events", "firewall_events", "gateway_dns", "gateway_http", @@ -592,6 +593,7 @@ async def create( "dns_firewall_logs", "dns_logs", "email_security_alerts", + "email_security_post_delivery_events", "firewall_events", "gateway_dns", "gateway_http", diff --git a/src/cloudflare/types/logpush/job_create_params.py b/src/cloudflare/types/logpush/job_create_params.py index 53236f7b18c..15b72c6c169 100644 --- a/src/cloudflare/types/logpush/job_create_params.py +++ b/src/cloudflare/types/logpush/job_create_params.py @@ -38,6 +38,7 @@ class JobCreateParams(TypedDict, total=False): "dns_firewall_logs", "dns_logs", "email_security_alerts", + "email_security_post_delivery_events", "firewall_events", "gateway_dns", "gateway_http", diff --git a/src/cloudflare/types/logpush/logpush_job.py b/src/cloudflare/types/logpush/logpush_job.py index 3d38bb4c678..3233139adf2 100644 --- a/src/cloudflare/types/logpush/logpush_job.py +++ b/src/cloudflare/types/logpush/logpush_job.py @@ -28,6 +28,7 @@ class LogpushJob(BaseModel): "dns_firewall_logs", "dns_logs", "email_security_alerts", + "email_security_post_delivery_events", "firewall_events", "gateway_dns", "gateway_http", diff --git a/src/cloudflare/types/logpush/output_options.py b/src/cloudflare/types/logpush/output_options.py index 55196f3e139..51f66c686b0 100644 --- a/src/cloudflare/types/logpush/output_options.py +++ b/src/cloudflare/types/logpush/output_options.py @@ -38,6 +38,12 @@ class OutputOptions(BaseModel): specify all the fields names you are interested in. """ + merge_subrequests: Optional[bool] = None + """If set to true, subrequests will be merged into the parent request. + + Only supported for the `http_requests` dataset. + """ + output_type: Optional[Literal["ndjson", "csv"]] = None """Specifies the output type, such as `ndjson` or `csv`. diff --git a/src/cloudflare/types/logpush/output_options_param.py b/src/cloudflare/types/logpush/output_options_param.py index f592a97e929..66e0821dbf8 100644 --- a/src/cloudflare/types/logpush/output_options_param.py +++ b/src/cloudflare/types/logpush/output_options_param.py @@ -39,6 +39,12 @@ class OutputOptionsParam(TypedDict, total=False): specify all the fields names you are interested in. """ + merge_subrequests: Optional[bool] + """If set to true, subrequests will be merged into the parent request. + + Only supported for the `http_requests` dataset. + """ + output_type: Literal["ndjson", "csv"] """Specifies the output type, such as `ndjson` or `csv`. diff --git a/tests/api_resources/logpush/test_jobs.py b/tests/api_resources/logpush/test_jobs.py index 862caad9f98..465a81c9b56 100644 --- a/tests/api_resources/logpush/test_jobs.py +++ b/tests/api_resources/logpush/test_jobs.py @@ -49,6 +49,7 @@ def test_method_create_with_all_params(self, client: Cloudflare) -> None: "cve_2021_44228": False, "field_delimiter": ",", "field_names": ["Datetime", "DstIP", "SrcIP"], + "merge_subrequests": True, "output_type": "ndjson", "record_delimiter": "", "record_prefix": "{", @@ -135,6 +136,7 @@ def test_method_update_with_all_params(self, client: Cloudflare) -> None: "cve_2021_44228": False, "field_delimiter": ",", "field_names": ["Datetime", "DstIP", "SrcIP"], + "merge_subrequests": True, "output_type": "ndjson", "record_delimiter": "", "record_prefix": "{", @@ -404,6 +406,7 @@ async def test_method_create_with_all_params(self, async_client: AsyncCloudflare "cve_2021_44228": False, "field_delimiter": ",", "field_names": ["Datetime", "DstIP", "SrcIP"], + "merge_subrequests": True, "output_type": "ndjson", "record_delimiter": "", "record_prefix": "{", @@ -490,6 +493,7 @@ async def test_method_update_with_all_params(self, async_client: AsyncCloudflare "cve_2021_44228": False, "field_delimiter": ",", "field_names": ["Datetime", "DstIP", "SrcIP"], + "merge_subrequests": True, "output_type": "ndjson", "record_delimiter": "", "record_prefix": "{", From 846f7e940a324fe737edeb8ed1be23d19ec462f4 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:37:18 -0500 Subject: [PATCH 08/27] chore(organizations): update generated types and methods --- .../organizations/organization_profile.py | 24 +++++------ .../types/organizations/__init__.py | 1 - .../test_organization_profile.py | 40 +++++++++---------- 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/src/cloudflare/resources/organizations/organization_profile.py b/src/cloudflare/resources/organizations/organization_profile.py index 5d11872fc2d..1bf721d9640 100644 --- a/src/cloudflare/resources/organizations/organization_profile.py +++ b/src/cloudflare/resources/organizations/organization_profile.py @@ -19,9 +19,7 @@ from ..._wrappers import ResultWrapper from ..._base_client import make_request_options from ...types.organizations import organization_profile_update_params -from ...types.organizations.organization_profile_get_params import ( # type: ignore[import-not-found] # pyright: ignore[reportMissingImports] - Result, # pyright: ignore[reportUnknownVariableType] -) +from ...types.organizations.organization_profile_get_params import Result __all__ = ["OrganizationProfileResource", "AsyncOrganizationProfileResource"] @@ -97,7 +95,7 @@ def update( cast_to=NoneType, ) - def get( # pyright: ignore[reportUnknownParameterType] + def get( self, organization_id: str, *, @@ -131,9 +129,9 @@ def get( # pyright: ignore[reportUnknownParameterType] extra_query=extra_query, extra_body=extra_body, timeout=timeout, - post_parser=ResultWrapper[Result]._unwrapper, # pyright: ignore[reportUnknownMemberType, reportUnknownArgumentType] + post_parser=ResultWrapper[Result]._unwrapper, ), - cast_to=cast(Type[Result], ResultWrapper[Result]), # pyright: ignore[reportUnknownArgumentType] + cast_to=cast(Type[Result], ResultWrapper[Result]), ) @@ -208,7 +206,7 @@ async def update( cast_to=NoneType, ) - async def get( # pyright: ignore[reportUnknownParameterType] + async def get( self, organization_id: str, *, @@ -242,9 +240,9 @@ async def get( # pyright: ignore[reportUnknownParameterType] extra_query=extra_query, extra_body=extra_body, timeout=timeout, - post_parser=ResultWrapper[Result]._unwrapper, # pyright: ignore[reportUnknownMemberType, reportUnknownArgumentType] + post_parser=ResultWrapper[Result]._unwrapper, ), - cast_to=cast(Type[Result], ResultWrapper[Result]), # pyright: ignore[reportUnknownArgumentType] + cast_to=cast(Type[Result], ResultWrapper[Result]), ) @@ -256,7 +254,7 @@ def __init__(self, organization_profile: OrganizationProfileResource) -> None: organization_profile.update, ) self.get = to_raw_response_wrapper( - organization_profile.get, # pyright: ignore[reportUnknownMemberType, reportUnknownArgumentType] + organization_profile.get, ) @@ -268,7 +266,7 @@ def __init__(self, organization_profile: AsyncOrganizationProfileResource) -> No organization_profile.update, ) self.get = async_to_raw_response_wrapper( - organization_profile.get, # pyright: ignore[reportUnknownMemberType, reportUnknownArgumentType] + organization_profile.get, ) @@ -280,7 +278,7 @@ def __init__(self, organization_profile: OrganizationProfileResource) -> None: organization_profile.update, ) self.get = to_streamed_response_wrapper( - organization_profile.get, # pyright: ignore[reportUnknownMemberType, reportUnknownArgumentType] + organization_profile.get, ) @@ -292,5 +290,5 @@ def __init__(self, organization_profile: AsyncOrganizationProfileResource) -> No organization_profile.update, ) self.get = async_to_streamed_response_wrapper( - organization_profile.get, # pyright: ignore[reportUnknownMemberType, reportUnknownArgumentType] + organization_profile.get, ) diff --git a/src/cloudflare/types/organizations/__init__.py b/src/cloudflare/types/organizations/__init__.py index af7b2fd5f68..5a572cf4049 100644 --- a/src/cloudflare/types/organizations/__init__.py +++ b/src/cloudflare/types/organizations/__init__.py @@ -3,7 +3,6 @@ from __future__ import annotations from .organization import Organization as Organization -from .organization_profile import OrganizationProfile as OrganizationProfile from .organization_list_params import OrganizationListParams as OrganizationListParams from .organization_create_params import OrganizationCreateParams as OrganizationCreateParams from .organization_update_params import OrganizationUpdateParams as OrganizationUpdateParams diff --git a/tests/api_resources/organizations/test_organization_profile.py b/tests/api_resources/organizations/test_organization_profile.py index a35af6ef2da..769bf2368a8 100644 --- a/tests/api_resources/organizations/test_organization_profile.py +++ b/tests/api_resources/organizations/test_organization_profile.py @@ -9,9 +9,7 @@ from cloudflare import Cloudflare, AsyncCloudflare from tests.utils import assert_matches_type -from cloudflare.types.organizations.organization_profile_get_params import ( # pyright: ignore[reportMissingImports] - Result, # pyright: ignore[reportUnknownVariableType] -) +from cloudflare.types.organizations.organization_profile_get_params import Result base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -79,32 +77,32 @@ def test_path_params_update(self, client: Cloudflare) -> None: @parametrize def test_method_get(self, client: Cloudflare) -> None: - organization_profile = client.organizations.organization_profile.get( # pyright: ignore[reportUnknownVariableType, reportUnknownMemberType] + organization_profile = client.organizations.organization_profile.get( "a7b9c3d2e8f4g1h5i6j0k9l2m3n7o4p8", ) - assert_matches_type(Result, organization_profile, path=["response"]) # pyright: ignore[reportUnknownArgumentType] + assert_matches_type(Result, organization_profile, path=["response"]) @parametrize def test_raw_response_get(self, client: Cloudflare) -> None: - response = client.organizations.organization_profile.with_raw_response.get( # pyright: ignore[reportUnknownVariableType] + response = client.organizations.organization_profile.with_raw_response.get( "a7b9c3d2e8f4g1h5i6j0k9l2m3n7o4p8", ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization_profile = response.parse() # pyright: ignore[reportUnknownVariableType] - assert_matches_type(Result, organization_profile, path=["response"]) # pyright: ignore[reportUnknownArgumentType] + organization_profile = response.parse() + assert_matches_type(Result, organization_profile, path=["response"]) @parametrize def test_streaming_response_get(self, client: Cloudflare) -> None: - with client.organizations.organization_profile.with_streaming_response.get( # pyright: ignore[reportUnknownVariableType] + with client.organizations.organization_profile.with_streaming_response.get( "a7b9c3d2e8f4g1h5i6j0k9l2m3n7o4p8", - ) as response: # pyright: ignore[reportUnknownVariableType] + ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization_profile = response.parse() # pyright: ignore[reportUnknownVariableType] - assert_matches_type(Result, organization_profile, path=["response"]) # pyright: ignore[reportUnknownArgumentType] + organization_profile = response.parse() + assert_matches_type(Result, organization_profile, path=["response"]) assert cast(Any, response.is_closed) is True @@ -181,32 +179,32 @@ async def test_path_params_update(self, async_client: AsyncCloudflare) -> None: @parametrize async def test_method_get(self, async_client: AsyncCloudflare) -> None: - organization_profile = await async_client.organizations.organization_profile.get( # pyright: ignore[reportUnknownVariableType, reportUnknownMemberType] + organization_profile = await async_client.organizations.organization_profile.get( "a7b9c3d2e8f4g1h5i6j0k9l2m3n7o4p8", ) - assert_matches_type(Result, organization_profile, path=["response"]) # pyright: ignore[reportUnknownArgumentType] + assert_matches_type(Result, organization_profile, path=["response"]) @parametrize async def test_raw_response_get(self, async_client: AsyncCloudflare) -> None: - response = await async_client.organizations.organization_profile.with_raw_response.get( # pyright: ignore[reportUnknownVariableType] + response = await async_client.organizations.organization_profile.with_raw_response.get( "a7b9c3d2e8f4g1h5i6j0k9l2m3n7o4p8", ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization_profile = await response.parse() # pyright: ignore[reportUnknownVariableType] - assert_matches_type(Result, organization_profile, path=["response"]) # pyright: ignore[reportUnknownArgumentType] + organization_profile = await response.parse() + assert_matches_type(Result, organization_profile, path=["response"]) @parametrize async def test_streaming_response_get(self, async_client: AsyncCloudflare) -> None: - async with async_client.organizations.organization_profile.with_streaming_response.get( # pyright: ignore[reportUnknownVariableType] + async with async_client.organizations.organization_profile.with_streaming_response.get( "a7b9c3d2e8f4g1h5i6j0k9l2m3n7o4p8", - ) as response: # pyright: ignore[reportUnknownVariableType] + ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" - organization_profile = await response.parse() # pyright: ignore[reportUnknownVariableType] - assert_matches_type(Result, organization_profile, path=["response"]) # pyright: ignore[reportUnknownArgumentType] + organization_profile = await response.parse() + assert_matches_type(Result, organization_profile, path=["response"]) assert cast(Any, response.is_closed) is True From 7b90c41f7fbccfaf6b8f53064693cbbcdaa6b848 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:38:20 -0500 Subject: [PATCH 09/27] chore(workflows): update generated types and methods --- .../resources/workflows/instances/status.py | 24 +++++++++++++-- .../workflows/instances/status_edit_params.py | 19 ++++++++++-- .../workflows/instances/test_status.py | 30 +++++++++++++++++++ 3 files changed, 68 insertions(+), 5 deletions(-) diff --git a/src/cloudflare/resources/workflows/instances/status.py b/src/cloudflare/resources/workflows/instances/status.py index eb3b52525f0..fb2f7515979 100644 --- a/src/cloudflare/resources/workflows/instances/status.py +++ b/src/cloudflare/resources/workflows/instances/status.py @@ -7,7 +7,7 @@ import httpx -from ...._types import Body, Query, Headers, NotGiven, not_given +from ...._types import Body, Omit, Query, Headers, NotGiven, omit, not_given from ...._utils import path_template, maybe_transform, async_maybe_transform from ...._compat import cached_property from ...._resource import SyncAPIResource, AsyncAPIResource @@ -52,6 +52,7 @@ def edit( account_id: str | None = None, workflow_name: str, status: Literal["resume", "pause", "terminate", "restart"], + from_: status_edit_params.From | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -66,6 +67,8 @@ def edit( Args: status: Apply action to instance. + from_: Step to restart from. Only applicable when status is "restart". + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -89,7 +92,13 @@ def edit( workflow_name=workflow_name, instance_id=instance_id, ), - body=maybe_transform({"status": status}, status_edit_params.StatusEditParams), + body=maybe_transform( + { + "status": status, + "from_": from_, + }, + status_edit_params.StatusEditParams, + ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -128,6 +137,7 @@ async def edit( account_id: str | None = None, workflow_name: str, status: Literal["resume", "pause", "terminate", "restart"], + from_: status_edit_params.From | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -142,6 +152,8 @@ async def edit( Args: status: Apply action to instance. + from_: Step to restart from. Only applicable when status is "restart". + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -165,7 +177,13 @@ async def edit( workflow_name=workflow_name, instance_id=instance_id, ), - body=await async_maybe_transform({"status": status}, status_edit_params.StatusEditParams), + body=await async_maybe_transform( + { + "status": status, + "from_": from_, + }, + status_edit_params.StatusEditParams, + ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, diff --git a/src/cloudflare/types/workflows/instances/status_edit_params.py b/src/cloudflare/types/workflows/instances/status_edit_params.py index edce6009d3c..33f83553d8a 100644 --- a/src/cloudflare/types/workflows/instances/status_edit_params.py +++ b/src/cloudflare/types/workflows/instances/status_edit_params.py @@ -2,9 +2,11 @@ from __future__ import annotations -from typing_extensions import Literal, Required, TypedDict +from typing_extensions import Literal, Required, Annotated, TypedDict -__all__ = ["StatusEditParams"] +from ...._utils import PropertyInfo + +__all__ = ["StatusEditParams", "From"] class StatusEditParams(TypedDict, total=False): @@ -14,3 +16,16 @@ class StatusEditParams(TypedDict, total=False): status: Required[Literal["resume", "pause", "terminate", "restart"]] """Apply action to instance.""" + + from_: Annotated[From, PropertyInfo(alias="from")] + """Step to restart from. Only applicable when status is "restart".""" + + +class From(TypedDict, total=False): + """Step to restart from. Only applicable when status is "restart".""" + + name: Required[str] + + count: int + + type: Literal["do", "sleep", "waitForEvent"] diff --git a/tests/api_resources/workflows/instances/test_status.py b/tests/api_resources/workflows/instances/test_status.py index 5b7e8ff5db9..6cf1e77a82d 100644 --- a/tests/api_resources/workflows/instances/test_status.py +++ b/tests/api_resources/workflows/instances/test_status.py @@ -27,6 +27,21 @@ def test_method_edit(self, client: Cloudflare) -> None: ) assert_matches_type(StatusEditResponse, status, path=["response"]) + @parametrize + def test_method_edit_with_all_params(self, client: Cloudflare) -> None: + status = client.workflows.instances.status.edit( + instance_id="x", + account_id="account_id", + workflow_name="x", + status="resume", + from_={ + "name": "x", + "count": 1, + "type": "do", + }, + ) + assert_matches_type(StatusEditResponse, status, path=["response"]) + @parametrize def test_raw_response_edit(self, client: Cloudflare) -> None: response = client.workflows.instances.status.with_raw_response.edit( @@ -99,6 +114,21 @@ async def test_method_edit(self, async_client: AsyncCloudflare) -> None: ) assert_matches_type(StatusEditResponse, status, path=["response"]) + @parametrize + async def test_method_edit_with_all_params(self, async_client: AsyncCloudflare) -> None: + status = await async_client.workflows.instances.status.edit( + instance_id="x", + account_id="account_id", + workflow_name="x", + status="resume", + from_={ + "name": "x", + "count": 1, + "type": "do", + }, + ) + assert_matches_type(StatusEditResponse, status, path=["response"]) + @parametrize async def test_raw_response_edit(self, async_client: AsyncCloudflare) -> None: response = await async_client.workflows.instances.status.with_raw_response.edit( From 414bf41d37df541b7ef527b82fb706b5c8308f23 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:39:47 -0500 Subject: [PATCH 10/27] chore(zero_trust): update generated types and methods --- .../resources/zero_trust/gateway/lists/lists.py | 10 ++++++---- .../types/zero_trust/gateway/gateway_list.py | 2 +- .../types/zero_trust/gateway/list_create_params.py | 2 +- .../types/zero_trust/gateway/list_create_response.py | 2 +- .../types/zero_trust/gateway/list_list_params.py | 2 +- .../types/zero_trust/gateway/rule_setting.py | 10 ++++++++-- .../types/zero_trust/gateway/rule_setting_param.py | 10 ++++++++-- tests/api_resources/zero_trust/gateway/test_rules.py | 4 ++++ 8 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/cloudflare/resources/zero_trust/gateway/lists/lists.py b/src/cloudflare/resources/zero_trust/gateway/lists/lists.py index 4706f33c4c6..a141a7ef1a3 100644 --- a/src/cloudflare/resources/zero_trust/gateway/lists/lists.py +++ b/src/cloudflare/resources/zero_trust/gateway/lists/lists.py @@ -64,7 +64,7 @@ def create( *, account_id: str | None = None, name: str, - type: Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE"], + type: Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE", "AAGUID"], description: str | Omit = omit, items: Iterable[list_create_params.Item] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -186,7 +186,8 @@ def list( self, *, account_id: str | None = None, - type: Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE"] | Omit = omit, + type: Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE", "AAGUID"] + | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -400,7 +401,7 @@ async def create( *, account_id: str | None = None, name: str, - type: Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE"], + type: Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE", "AAGUID"], description: str | Omit = omit, items: Iterable[list_create_params.Item] | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. @@ -522,7 +523,8 @@ def list( self, *, account_id: str | None = None, - type: Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE"] | Omit = omit, + type: Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE", "AAGUID"] + | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, diff --git a/src/cloudflare/types/zero_trust/gateway/gateway_list.py b/src/cloudflare/types/zero_trust/gateway/gateway_list.py index 5051ff743cb..02ceb52079b 100644 --- a/src/cloudflare/types/zero_trust/gateway/gateway_list.py +++ b/src/cloudflare/types/zero_trust/gateway/gateway_list.py @@ -28,7 +28,7 @@ class GatewayList(BaseModel): name: Optional[str] = None """Specify the list name.""" - type: Optional[Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE"]] = None + type: Optional[Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE", "AAGUID"]] = None """Specify the list type.""" updated_at: Optional[datetime] = None diff --git a/src/cloudflare/types/zero_trust/gateway/list_create_params.py b/src/cloudflare/types/zero_trust/gateway/list_create_params.py index aee65050a6b..57342cb6be7 100644 --- a/src/cloudflare/types/zero_trust/gateway/list_create_params.py +++ b/src/cloudflare/types/zero_trust/gateway/list_create_params.py @@ -14,7 +14,7 @@ class ListCreateParams(TypedDict, total=False): name: Required[str] """Specify the list name.""" - type: Required[Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE"]] + type: Required[Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE", "AAGUID"]] """Specify the list type.""" description: str diff --git a/src/cloudflare/types/zero_trust/gateway/list_create_response.py b/src/cloudflare/types/zero_trust/gateway/list_create_response.py index 0aa554d4b58..96e72c4c388 100644 --- a/src/cloudflare/types/zero_trust/gateway/list_create_response.py +++ b/src/cloudflare/types/zero_trust/gateway/list_create_response.py @@ -25,7 +25,7 @@ class ListCreateResponse(BaseModel): name: Optional[str] = None """Specify the list name.""" - type: Optional[Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE"]] = None + type: Optional[Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE", "AAGUID"]] = None """Specify the list type.""" updated_at: Optional[datetime] = None diff --git a/src/cloudflare/types/zero_trust/gateway/list_list_params.py b/src/cloudflare/types/zero_trust/gateway/list_list_params.py index 5d15d3a75fe..e695f4feadf 100644 --- a/src/cloudflare/types/zero_trust/gateway/list_list_params.py +++ b/src/cloudflare/types/zero_trust/gateway/list_list_params.py @@ -10,5 +10,5 @@ class ListListParams(TypedDict, total=False): account_id: str - type: Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE"] + type: Literal["SERIAL", "URL", "DOMAIN", "EMAIL", "IP", "CATEGORY", "LOCATION", "DEVICE", "AAGUID"] """Specify the list type.""" diff --git a/src/cloudflare/types/zero_trust/gateway/rule_setting.py b/src/cloudflare/types/zero_trust/gateway/rule_setting.py index 4d9f97e1d55..f35a853629b 100644 --- a/src/cloudflare/types/zero_trust/gateway/rule_setting.py +++ b/src/cloudflare/types/zero_trust/gateway/rule_setting.py @@ -64,8 +64,8 @@ class BISOAdminControls(BaseModel): download: Optional[Literal["enabled", "disabled", "remote_only"]] = None """Configure download behavior. - When set to remote_only, users can view downloads but cannot save them. Applies - only when version == "v2". + When set to remote_only, users can view downloads but cannot save them. If this + field is absent, downloading remains enabled. Applies only when version == "v2". """ dp: Optional[bool] = None @@ -105,6 +105,12 @@ class BISOAdminControls(BaseModel): version: Optional[Literal["v1", "v2"]] = None """Indicate which version of the browser isolation controls should apply.""" + wm_id: Optional[str] = None + """Specify the watermark ID (UUID) to apply to the isolated browser session. + + When present, enables watermark rendering in the isolated browser. + """ + class BlockPage(BaseModel): """Configure custom block page settings. diff --git a/src/cloudflare/types/zero_trust/gateway/rule_setting_param.py b/src/cloudflare/types/zero_trust/gateway/rule_setting_param.py index 415870cae73..7303c240398 100644 --- a/src/cloudflare/types/zero_trust/gateway/rule_setting_param.py +++ b/src/cloudflare/types/zero_trust/gateway/rule_setting_param.py @@ -64,8 +64,8 @@ class BISOAdminControls(TypedDict, total=False): download: Literal["enabled", "disabled", "remote_only"] """Configure download behavior. - When set to remote_only, users can view downloads but cannot save them. Applies - only when version == "v2". + When set to remote_only, users can view downloads but cannot save them. If this + field is absent, downloading remains enabled. Applies only when version == "v2". """ dp: bool @@ -105,6 +105,12 @@ class BISOAdminControls(TypedDict, total=False): version: Literal["v1", "v2"] """Indicate which version of the browser isolation controls should apply.""" + wm_id: str + """Specify the watermark ID (UUID) to apply to the isolated browser session. + + When present, enables watermark rendering in the isolated browser. + """ + class BlockPage(TypedDict, total=False): """Configure custom block page settings. diff --git a/tests/api_resources/zero_trust/gateway/test_rules.py b/tests/api_resources/zero_trust/gateway/test_rules.py index e425820ab37..58c1846d958 100644 --- a/tests/api_resources/zero_trust/gateway/test_rules.py +++ b/tests/api_resources/zero_trust/gateway/test_rules.py @@ -66,6 +66,7 @@ def test_method_create_with_all_params(self, client: Cloudflare) -> None: "printing": "enabled", "upload": "enabled", "version": "v1", + "wm_id": "475345dc-5299-4b6e-8f6a-3d3e4c8e9f1a", }, "block_page": { "target_uri": "https://example.com", @@ -230,6 +231,7 @@ def test_method_update_with_all_params(self, client: Cloudflare) -> None: "printing": "enabled", "upload": "enabled", "version": "v1", + "wm_id": "475345dc-5299-4b6e-8f6a-3d3e4c8e9f1a", }, "block_page": { "target_uri": "https://example.com", @@ -629,6 +631,7 @@ async def test_method_create_with_all_params(self, async_client: AsyncCloudflare "printing": "enabled", "upload": "enabled", "version": "v1", + "wm_id": "475345dc-5299-4b6e-8f6a-3d3e4c8e9f1a", }, "block_page": { "target_uri": "https://example.com", @@ -793,6 +796,7 @@ async def test_method_update_with_all_params(self, async_client: AsyncCloudflare "printing": "enabled", "upload": "enabled", "version": "v1", + "wm_id": "475345dc-5299-4b6e-8f6a-3d3e4c8e9f1a", }, "block_page": { "target_uri": "https://example.com", From 7484f7afb402e5c52086054cc68f8bc2420664f5 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:50:03 -0500 Subject: [PATCH 11/27] chore(audit_logs): update generated types and methods --- src/cloudflare/resources/audit_logs.py | 276 ------------------------- 1 file changed, 276 deletions(-) delete mode 100644 src/cloudflare/resources/audit_logs.py diff --git a/src/cloudflare/resources/audit_logs.py b/src/cloudflare/resources/audit_logs.py deleted file mode 100644 index 1a682f5ac0e..00000000000 --- a/src/cloudflare/resources/audit_logs.py +++ /dev/null @@ -1,276 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Union -from datetime import date, datetime -from typing_extensions import Literal - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from .._utils import maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from ..pagination import SyncV4PagePaginationArray, AsyncV4PagePaginationArray -from .._base_client import AsyncPaginator, make_request_options -from ..types.audit_logs import audit_log_list_params -from ..types.shared.audit_log import AuditLog - -__all__ = ["AuditLogsResource", "AsyncAuditLogsResource"] - - -class AuditLogsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> AuditLogsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AuditLogsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AuditLogsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AuditLogsResourceWithStreamingResponse(self) - - def list( - self, - *, - account_id: str, - id: str | Omit = omit, - action: audit_log_list_params.Action | Omit = omit, - actor: audit_log_list_params.Actor | Omit = omit, - before: Union[Union[str, date], Union[str, datetime]] | Omit = omit, - direction: Literal["desc", "asc"] | Omit = omit, - export: bool | Omit = omit, - hide_user_logs: bool | Omit = omit, - page: float | Omit = omit, - per_page: float | Omit = omit, - since: Union[Union[str, date], Union[str, datetime]] | Omit = omit, - zone: audit_log_list_params.Zone | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncV4PagePaginationArray[AuditLog]: - """Gets a list of audit logs for an account. - - Can be filtered by who made the - change, on which zone, and the timeframe of the change. - - Args: - account_id: Identifier - - id: Finds a specific log by its ID. - - before: Limits the returned results to logs older than the specified date. A `full-date` - that conforms to RFC3339. - - direction: Changes the direction of the chronological sorting. - - export: Indicates that this request is an export of logs in CSV format. - - hide_user_logs: Indicates whether or not to hide user level audit logs. - - page: Defines which page of results to return. - - per_page: Sets the number of results to return per page. - - since: Limits the returned results to logs newer than the specified date. A `full-date` - that conforms to RFC3339. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not account_id: - raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") - return self._get_api_list( - f"/accounts/{account_id}/audit_logs", - page=SyncV4PagePaginationArray[AuditLog], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "id": id, - "action": action, - "actor": actor, - "before": before, - "direction": direction, - "export": export, - "hide_user_logs": hide_user_logs, - "page": page, - "per_page": per_page, - "since": since, - "zone": zone, - }, - audit_log_list_params.AuditLogListParams, - ), - ), - model=AuditLog, - ) - - -class AsyncAuditLogsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncAuditLogsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncAuditLogsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncAuditLogsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncAuditLogsResourceWithStreamingResponse(self) - - def list( - self, - *, - account_id: str, - id: str | Omit = omit, - action: audit_log_list_params.Action | Omit = omit, - actor: audit_log_list_params.Actor | Omit = omit, - before: Union[Union[str, date], Union[str, datetime]] | Omit = omit, - direction: Literal["desc", "asc"] | Omit = omit, - export: bool | Omit = omit, - hide_user_logs: bool | Omit = omit, - page: float | Omit = omit, - per_page: float | Omit = omit, - since: Union[Union[str, date], Union[str, datetime]] | Omit = omit, - zone: audit_log_list_params.Zone | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[AuditLog, AsyncV4PagePaginationArray[AuditLog]]: - """Gets a list of audit logs for an account. - - Can be filtered by who made the - change, on which zone, and the timeframe of the change. - - Args: - account_id: Identifier - - id: Finds a specific log by its ID. - - before: Limits the returned results to logs older than the specified date. A `full-date` - that conforms to RFC3339. - - direction: Changes the direction of the chronological sorting. - - export: Indicates that this request is an export of logs in CSV format. - - hide_user_logs: Indicates whether or not to hide user level audit logs. - - page: Defines which page of results to return. - - per_page: Sets the number of results to return per page. - - since: Limits the returned results to logs newer than the specified date. A `full-date` - that conforms to RFC3339. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not account_id: - raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") - return self._get_api_list( - f"/accounts/{account_id}/audit_logs", - page=AsyncV4PagePaginationArray[AuditLog], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "id": id, - "action": action, - "actor": actor, - "before": before, - "direction": direction, - "export": export, - "hide_user_logs": hide_user_logs, - "page": page, - "per_page": per_page, - "since": since, - "zone": zone, - }, - audit_log_list_params.AuditLogListParams, - ), - ), - model=AuditLog, - ) - - -class AuditLogsResourceWithRawResponse: - def __init__(self, audit_logs: AuditLogsResource) -> None: - self._audit_logs = audit_logs - - self.list = to_raw_response_wrapper( - audit_logs.list, - ) - - -class AsyncAuditLogsResourceWithRawResponse: - def __init__(self, audit_logs: AsyncAuditLogsResource) -> None: - self._audit_logs = audit_logs - - self.list = async_to_raw_response_wrapper( - audit_logs.list, - ) - - -class AuditLogsResourceWithStreamingResponse: - def __init__(self, audit_logs: AuditLogsResource) -> None: - self._audit_logs = audit_logs - - self.list = to_streamed_response_wrapper( - audit_logs.list, - ) - - -class AsyncAuditLogsResourceWithStreamingResponse: - def __init__(self, audit_logs: AsyncAuditLogsResource) -> None: - self._audit_logs = audit_logs - - self.list = async_to_streamed_response_wrapper( - audit_logs.list, - ) From afd0093ce1ae2014664ebf14fdbe65a1234373f3 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:51:14 -0500 Subject: [PATCH 12/27] chore(bot_management): update generated types and methods --- src/cloudflare/resources/bot_management.py | 1274 -------------------- 1 file changed, 1274 deletions(-) delete mode 100644 src/cloudflare/resources/bot_management.py diff --git a/src/cloudflare/resources/bot_management.py b/src/cloudflare/resources/bot_management.py deleted file mode 100644 index 07b76763411..00000000000 --- a/src/cloudflare/resources/bot_management.py +++ /dev/null @@ -1,1274 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Any, Optional, cast -from typing_extensions import Literal, overload - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from .._utils import required_args, maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from .._base_client import make_request_options -from ..types.bot_management import bot_management_update_params -from ..types.bot_management.bot_management_get_response import BotManagementGetResponse -from ..types.bot_management.bot_management_update_response import BotManagementUpdateResponse - -__all__ = ["BotManagementResource", "AsyncBotManagementResource"] - - -class BotManagementResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> BotManagementResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return BotManagementResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> BotManagementResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return BotManagementResourceWithStreamingResponse(self) - - @overload - def update( - self, - *, - zone_id: str, - ai_bots_protection: Literal["block", "disabled", "only_on_ad_pages"] | Omit = omit, - cf_robots_variant: Literal["off", "policy_only"] | Omit = omit, - crawler_protection: Literal["enabled", "disabled"] | Omit = omit, - enable_js: bool | Omit = omit, - fight_mode: bool | Omit = omit, - is_robots_txt_managed: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[BotManagementUpdateResponse]: - """ - Updates the Bot Management configuration for a zone. - - This API is used to update: - - - **Bot Fight Mode** - - **Super Bot Fight Mode** - - **Bot Management for Enterprise** - - See [Bot Plans](https://developers.cloudflare.com/bots/plans/) for more - information on the different plans \\ - If you recently upgraded or downgraded your plan, refer to the following examples - to clean up old configurations. Copy and paste the example body to remove old zone - configurations based on your current plan. - - #### Clean up configuration for Bot Fight Mode plan - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "suppress_session_score": false - } - ``` - - #### Clean up configuration for SBFM Pro plan - - ```json - { - "sbfm_likely_automated": "allow", - "fight_mode": false - } - ``` - - #### Clean up configuration for SBFM Biz plan - - ```json - { - "fight_mode": false - } - ``` - - #### Clean up configuration for BM Enterprise Subscription plan - - It is strongly recommended that you ensure you have - [custom rules](https://developers.cloudflare.com/waf/custom-rules/) in place to - protect your zone before disabling the SBFM rules. Without these protections, - your zone is vulnerable to attacks. - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "fight_mode": false - } - ``` - - Args: - zone_id: Identifier. - - ai_bots_protection: Enable rule to block AI Scrapers and Crawlers. Please note the value - `only_on_ad_pages` is currently not available for Enterprise customers. - - cf_robots_variant: Specifies the Robots Access Control License variant to use. - - crawler_protection: Enable rule to punish AI Scrapers and Crawlers via a link maze. - - enable_js: Use lightweight, invisible JavaScript detections to improve Bot Management. - [Learn more about JavaScript Detections](https://developers.cloudflare.com/bots/reference/javascript-detections/). - - fight_mode: Whether to enable Bot Fight Mode. - - is_robots_txt_managed: Enable cloudflare managed robots.txt. If an existing robots.txt is detected, - then managed robots.txt will be prepended to the existing robots.txt. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - ... - - @overload - def update( - self, - *, - zone_id: str, - ai_bots_protection: Literal["block", "disabled", "only_on_ad_pages"] | Omit = omit, - cf_robots_variant: Literal["off", "policy_only"] | Omit = omit, - crawler_protection: Literal["enabled", "disabled"] | Omit = omit, - enable_js: bool | Omit = omit, - is_robots_txt_managed: bool | Omit = omit, - optimize_wordpress: bool | Omit = omit, - sbfm_definitely_automated: Literal["allow", "block", "managed_challenge"] | Omit = omit, - sbfm_static_resource_protection: bool | Omit = omit, - sbfm_verified_bots: Literal["allow", "block"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[BotManagementUpdateResponse]: - """ - Updates the Bot Management configuration for a zone. - - This API is used to update: - - - **Bot Fight Mode** - - **Super Bot Fight Mode** - - **Bot Management for Enterprise** - - See [Bot Plans](https://developers.cloudflare.com/bots/plans/) for more - information on the different plans \\ - If you recently upgraded or downgraded your plan, refer to the following examples - to clean up old configurations. Copy and paste the example body to remove old zone - configurations based on your current plan. - - #### Clean up configuration for Bot Fight Mode plan - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "suppress_session_score": false - } - ``` - - #### Clean up configuration for SBFM Pro plan - - ```json - { - "sbfm_likely_automated": "allow", - "fight_mode": false - } - ``` - - #### Clean up configuration for SBFM Biz plan - - ```json - { - "fight_mode": false - } - ``` - - #### Clean up configuration for BM Enterprise Subscription plan - - It is strongly recommended that you ensure you have - [custom rules](https://developers.cloudflare.com/waf/custom-rules/) in place to - protect your zone before disabling the SBFM rules. Without these protections, - your zone is vulnerable to attacks. - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "fight_mode": false - } - ``` - - Args: - zone_id: Identifier. - - ai_bots_protection: Enable rule to block AI Scrapers and Crawlers. Please note the value - `only_on_ad_pages` is currently not available for Enterprise customers. - - cf_robots_variant: Specifies the Robots Access Control License variant to use. - - crawler_protection: Enable rule to punish AI Scrapers and Crawlers via a link maze. - - enable_js: Use lightweight, invisible JavaScript detections to improve Bot Management. - [Learn more about JavaScript Detections](https://developers.cloudflare.com/bots/reference/javascript-detections/). - - is_robots_txt_managed: Enable cloudflare managed robots.txt. If an existing robots.txt is detected, - then managed robots.txt will be prepended to the existing robots.txt. - - optimize_wordpress: Whether to optimize Super Bot Fight Mode protections for Wordpress. - - sbfm_definitely_automated: Super Bot Fight Mode (SBFM) action to take on definitely automated requests. - - sbfm_static_resource_protection: Super Bot Fight Mode (SBFM) to enable static resource protection. Enable if - static resources on your application need bot protection. Note: Static resource - protection can also result in legitimate traffic being blocked. - - sbfm_verified_bots: Super Bot Fight Mode (SBFM) action to take on verified bots requests. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - ... - - @overload - def update( - self, - *, - zone_id: str, - ai_bots_protection: Literal["block", "disabled", "only_on_ad_pages"] | Omit = omit, - cf_robots_variant: Literal["off", "policy_only"] | Omit = omit, - crawler_protection: Literal["enabled", "disabled"] | Omit = omit, - enable_js: bool | Omit = omit, - is_robots_txt_managed: bool | Omit = omit, - optimize_wordpress: bool | Omit = omit, - sbfm_definitely_automated: Literal["allow", "block", "managed_challenge"] | Omit = omit, - sbfm_likely_automated: Literal["allow", "block", "managed_challenge"] | Omit = omit, - sbfm_static_resource_protection: bool | Omit = omit, - sbfm_verified_bots: Literal["allow", "block"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[BotManagementUpdateResponse]: - """ - Updates the Bot Management configuration for a zone. - - This API is used to update: - - - **Bot Fight Mode** - - **Super Bot Fight Mode** - - **Bot Management for Enterprise** - - See [Bot Plans](https://developers.cloudflare.com/bots/plans/) for more - information on the different plans \\ - If you recently upgraded or downgraded your plan, refer to the following examples - to clean up old configurations. Copy and paste the example body to remove old zone - configurations based on your current plan. - - #### Clean up configuration for Bot Fight Mode plan - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "suppress_session_score": false - } - ``` - - #### Clean up configuration for SBFM Pro plan - - ```json - { - "sbfm_likely_automated": "allow", - "fight_mode": false - } - ``` - - #### Clean up configuration for SBFM Biz plan - - ```json - { - "fight_mode": false - } - ``` - - #### Clean up configuration for BM Enterprise Subscription plan - - It is strongly recommended that you ensure you have - [custom rules](https://developers.cloudflare.com/waf/custom-rules/) in place to - protect your zone before disabling the SBFM rules. Without these protections, - your zone is vulnerable to attacks. - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "fight_mode": false - } - ``` - - Args: - zone_id: Identifier. - - ai_bots_protection: Enable rule to block AI Scrapers and Crawlers. Please note the value - `only_on_ad_pages` is currently not available for Enterprise customers. - - cf_robots_variant: Specifies the Robots Access Control License variant to use. - - crawler_protection: Enable rule to punish AI Scrapers and Crawlers via a link maze. - - enable_js: Use lightweight, invisible JavaScript detections to improve Bot Management. - [Learn more about JavaScript Detections](https://developers.cloudflare.com/bots/reference/javascript-detections/). - - is_robots_txt_managed: Enable cloudflare managed robots.txt. If an existing robots.txt is detected, - then managed robots.txt will be prepended to the existing robots.txt. - - optimize_wordpress: Whether to optimize Super Bot Fight Mode protections for Wordpress. - - sbfm_definitely_automated: Super Bot Fight Mode (SBFM) action to take on definitely automated requests. - - sbfm_likely_automated: Super Bot Fight Mode (SBFM) action to take on likely automated requests. - - sbfm_static_resource_protection: Super Bot Fight Mode (SBFM) to enable static resource protection. Enable if - static resources on your application need bot protection. Note: Static resource - protection can also result in legitimate traffic being blocked. - - sbfm_verified_bots: Super Bot Fight Mode (SBFM) action to take on verified bots requests. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - ... - - @overload - def update( - self, - *, - zone_id: str, - ai_bots_protection: Literal["block", "disabled", "only_on_ad_pages"] | Omit = omit, - auto_update_model: bool | Omit = omit, - bm_cookie_enabled: bool | Omit = omit, - cf_robots_variant: Literal["off", "policy_only"] | Omit = omit, - crawler_protection: Literal["enabled", "disabled"] | Omit = omit, - enable_js: bool | Omit = omit, - is_robots_txt_managed: bool | Omit = omit, - suppress_session_score: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[BotManagementUpdateResponse]: - """ - Updates the Bot Management configuration for a zone. - - This API is used to update: - - - **Bot Fight Mode** - - **Super Bot Fight Mode** - - **Bot Management for Enterprise** - - See [Bot Plans](https://developers.cloudflare.com/bots/plans/) for more - information on the different plans \\ - If you recently upgraded or downgraded your plan, refer to the following examples - to clean up old configurations. Copy and paste the example body to remove old zone - configurations based on your current plan. - - #### Clean up configuration for Bot Fight Mode plan - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "suppress_session_score": false - } - ``` - - #### Clean up configuration for SBFM Pro plan - - ```json - { - "sbfm_likely_automated": "allow", - "fight_mode": false - } - ``` - - #### Clean up configuration for SBFM Biz plan - - ```json - { - "fight_mode": false - } - ``` - - #### Clean up configuration for BM Enterprise Subscription plan - - It is strongly recommended that you ensure you have - [custom rules](https://developers.cloudflare.com/waf/custom-rules/) in place to - protect your zone before disabling the SBFM rules. Without these protections, - your zone is vulnerable to attacks. - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "fight_mode": false - } - ``` - - Args: - zone_id: Identifier. - - ai_bots_protection: Enable rule to block AI Scrapers and Crawlers. Please note the value - `only_on_ad_pages` is currently not available for Enterprise customers. - - auto_update_model: Automatically update to the newest bot detection models created by Cloudflare as - they are released. - [Learn more.](https://developers.cloudflare.com/bots/reference/machine-learning-models#model-versions-and-release-notes) - - bm_cookie_enabled: Indicates that the bot management cookie can be placed on end user devices - accessing the site. Defaults to true - - cf_robots_variant: Specifies the Robots Access Control License variant to use. - - crawler_protection: Enable rule to punish AI Scrapers and Crawlers via a link maze. - - enable_js: Use lightweight, invisible JavaScript detections to improve Bot Management. - [Learn more about JavaScript Detections](https://developers.cloudflare.com/bots/reference/javascript-detections/). - - is_robots_txt_managed: Enable cloudflare managed robots.txt. If an existing robots.txt is detected, - then managed robots.txt will be prepended to the existing robots.txt. - - suppress_session_score: Whether to disable tracking the highest bot score for a session in the Bot - Management cookie. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - ... - - @required_args(["zone_id"]) - def update( - self, - *, - zone_id: str, - ai_bots_protection: Literal["block", "disabled", "only_on_ad_pages"] | Omit = omit, - cf_robots_variant: Literal["off", "policy_only"] | Omit = omit, - crawler_protection: Literal["enabled", "disabled"] | Omit = omit, - enable_js: bool | Omit = omit, - fight_mode: bool | Omit = omit, - is_robots_txt_managed: bool | Omit = omit, - optimize_wordpress: bool | Omit = omit, - sbfm_definitely_automated: Literal["allow", "block", "managed_challenge"] | Omit = omit, - sbfm_static_resource_protection: bool | Omit = omit, - sbfm_verified_bots: Literal["allow", "block"] | Omit = omit, - sbfm_likely_automated: Literal["allow", "block", "managed_challenge"] | Omit = omit, - auto_update_model: bool | Omit = omit, - bm_cookie_enabled: bool | Omit = omit, - suppress_session_score: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[BotManagementUpdateResponse]: - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return cast( - Optional[BotManagementUpdateResponse], - self._put( - f"/zones/{zone_id}/bot_management", - body=maybe_transform( - { - "ai_bots_protection": ai_bots_protection, - "cf_robots_variant": cf_robots_variant, - "crawler_protection": crawler_protection, - "enable_js": enable_js, - "fight_mode": fight_mode, - "is_robots_txt_managed": is_robots_txt_managed, - "optimize_wordpress": optimize_wordpress, - "sbfm_definitely_automated": sbfm_definitely_automated, - "sbfm_static_resource_protection": sbfm_static_resource_protection, - "sbfm_verified_bots": sbfm_verified_bots, - "sbfm_likely_automated": sbfm_likely_automated, - "auto_update_model": auto_update_model, - "bm_cookie_enabled": bm_cookie_enabled, - "suppress_session_score": suppress_session_score, - }, - bot_management_update_params.BotManagementUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[BotManagementUpdateResponse]]._unwrapper, - ), - cast_to=cast( - Any, ResultWrapper[BotManagementUpdateResponse] - ), # Union types cannot be passed in as arguments in the type system - ), - ) - - def get( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[BotManagementGetResponse]: - """ - Retrieve a zone's Bot Management Config - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return cast( - Optional[BotManagementGetResponse], - self._get( - f"/zones/{zone_id}/bot_management", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[BotManagementGetResponse]]._unwrapper, - ), - cast_to=cast( - Any, ResultWrapper[BotManagementGetResponse] - ), # Union types cannot be passed in as arguments in the type system - ), - ) - - -class AsyncBotManagementResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncBotManagementResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncBotManagementResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncBotManagementResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncBotManagementResourceWithStreamingResponse(self) - - @overload - async def update( - self, - *, - zone_id: str, - ai_bots_protection: Literal["block", "disabled", "only_on_ad_pages"] | Omit = omit, - cf_robots_variant: Literal["off", "policy_only"] | Omit = omit, - crawler_protection: Literal["enabled", "disabled"] | Omit = omit, - enable_js: bool | Omit = omit, - fight_mode: bool | Omit = omit, - is_robots_txt_managed: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[BotManagementUpdateResponse]: - """ - Updates the Bot Management configuration for a zone. - - This API is used to update: - - - **Bot Fight Mode** - - **Super Bot Fight Mode** - - **Bot Management for Enterprise** - - See [Bot Plans](https://developers.cloudflare.com/bots/plans/) for more - information on the different plans \\ - If you recently upgraded or downgraded your plan, refer to the following examples - to clean up old configurations. Copy and paste the example body to remove old zone - configurations based on your current plan. - - #### Clean up configuration for Bot Fight Mode plan - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "suppress_session_score": false - } - ``` - - #### Clean up configuration for SBFM Pro plan - - ```json - { - "sbfm_likely_automated": "allow", - "fight_mode": false - } - ``` - - #### Clean up configuration for SBFM Biz plan - - ```json - { - "fight_mode": false - } - ``` - - #### Clean up configuration for BM Enterprise Subscription plan - - It is strongly recommended that you ensure you have - [custom rules](https://developers.cloudflare.com/waf/custom-rules/) in place to - protect your zone before disabling the SBFM rules. Without these protections, - your zone is vulnerable to attacks. - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "fight_mode": false - } - ``` - - Args: - zone_id: Identifier. - - ai_bots_protection: Enable rule to block AI Scrapers and Crawlers. Please note the value - `only_on_ad_pages` is currently not available for Enterprise customers. - - cf_robots_variant: Specifies the Robots Access Control License variant to use. - - crawler_protection: Enable rule to punish AI Scrapers and Crawlers via a link maze. - - enable_js: Use lightweight, invisible JavaScript detections to improve Bot Management. - [Learn more about JavaScript Detections](https://developers.cloudflare.com/bots/reference/javascript-detections/). - - fight_mode: Whether to enable Bot Fight Mode. - - is_robots_txt_managed: Enable cloudflare managed robots.txt. If an existing robots.txt is detected, - then managed robots.txt will be prepended to the existing robots.txt. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - ... - - @overload - async def update( - self, - *, - zone_id: str, - ai_bots_protection: Literal["block", "disabled", "only_on_ad_pages"] | Omit = omit, - cf_robots_variant: Literal["off", "policy_only"] | Omit = omit, - crawler_protection: Literal["enabled", "disabled"] | Omit = omit, - enable_js: bool | Omit = omit, - is_robots_txt_managed: bool | Omit = omit, - optimize_wordpress: bool | Omit = omit, - sbfm_definitely_automated: Literal["allow", "block", "managed_challenge"] | Omit = omit, - sbfm_static_resource_protection: bool | Omit = omit, - sbfm_verified_bots: Literal["allow", "block"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[BotManagementUpdateResponse]: - """ - Updates the Bot Management configuration for a zone. - - This API is used to update: - - - **Bot Fight Mode** - - **Super Bot Fight Mode** - - **Bot Management for Enterprise** - - See [Bot Plans](https://developers.cloudflare.com/bots/plans/) for more - information on the different plans \\ - If you recently upgraded or downgraded your plan, refer to the following examples - to clean up old configurations. Copy and paste the example body to remove old zone - configurations based on your current plan. - - #### Clean up configuration for Bot Fight Mode plan - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "suppress_session_score": false - } - ``` - - #### Clean up configuration for SBFM Pro plan - - ```json - { - "sbfm_likely_automated": "allow", - "fight_mode": false - } - ``` - - #### Clean up configuration for SBFM Biz plan - - ```json - { - "fight_mode": false - } - ``` - - #### Clean up configuration for BM Enterprise Subscription plan - - It is strongly recommended that you ensure you have - [custom rules](https://developers.cloudflare.com/waf/custom-rules/) in place to - protect your zone before disabling the SBFM rules. Without these protections, - your zone is vulnerable to attacks. - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "fight_mode": false - } - ``` - - Args: - zone_id: Identifier. - - ai_bots_protection: Enable rule to block AI Scrapers and Crawlers. Please note the value - `only_on_ad_pages` is currently not available for Enterprise customers. - - cf_robots_variant: Specifies the Robots Access Control License variant to use. - - crawler_protection: Enable rule to punish AI Scrapers and Crawlers via a link maze. - - enable_js: Use lightweight, invisible JavaScript detections to improve Bot Management. - [Learn more about JavaScript Detections](https://developers.cloudflare.com/bots/reference/javascript-detections/). - - is_robots_txt_managed: Enable cloudflare managed robots.txt. If an existing robots.txt is detected, - then managed robots.txt will be prepended to the existing robots.txt. - - optimize_wordpress: Whether to optimize Super Bot Fight Mode protections for Wordpress. - - sbfm_definitely_automated: Super Bot Fight Mode (SBFM) action to take on definitely automated requests. - - sbfm_static_resource_protection: Super Bot Fight Mode (SBFM) to enable static resource protection. Enable if - static resources on your application need bot protection. Note: Static resource - protection can also result in legitimate traffic being blocked. - - sbfm_verified_bots: Super Bot Fight Mode (SBFM) action to take on verified bots requests. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - ... - - @overload - async def update( - self, - *, - zone_id: str, - ai_bots_protection: Literal["block", "disabled", "only_on_ad_pages"] | Omit = omit, - cf_robots_variant: Literal["off", "policy_only"] | Omit = omit, - crawler_protection: Literal["enabled", "disabled"] | Omit = omit, - enable_js: bool | Omit = omit, - is_robots_txt_managed: bool | Omit = omit, - optimize_wordpress: bool | Omit = omit, - sbfm_definitely_automated: Literal["allow", "block", "managed_challenge"] | Omit = omit, - sbfm_likely_automated: Literal["allow", "block", "managed_challenge"] | Omit = omit, - sbfm_static_resource_protection: bool | Omit = omit, - sbfm_verified_bots: Literal["allow", "block"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[BotManagementUpdateResponse]: - """ - Updates the Bot Management configuration for a zone. - - This API is used to update: - - - **Bot Fight Mode** - - **Super Bot Fight Mode** - - **Bot Management for Enterprise** - - See [Bot Plans](https://developers.cloudflare.com/bots/plans/) for more - information on the different plans \\ - If you recently upgraded or downgraded your plan, refer to the following examples - to clean up old configurations. Copy and paste the example body to remove old zone - configurations based on your current plan. - - #### Clean up configuration for Bot Fight Mode plan - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "suppress_session_score": false - } - ``` - - #### Clean up configuration for SBFM Pro plan - - ```json - { - "sbfm_likely_automated": "allow", - "fight_mode": false - } - ``` - - #### Clean up configuration for SBFM Biz plan - - ```json - { - "fight_mode": false - } - ``` - - #### Clean up configuration for BM Enterprise Subscription plan - - It is strongly recommended that you ensure you have - [custom rules](https://developers.cloudflare.com/waf/custom-rules/) in place to - protect your zone before disabling the SBFM rules. Without these protections, - your zone is vulnerable to attacks. - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "fight_mode": false - } - ``` - - Args: - zone_id: Identifier. - - ai_bots_protection: Enable rule to block AI Scrapers and Crawlers. Please note the value - `only_on_ad_pages` is currently not available for Enterprise customers. - - cf_robots_variant: Specifies the Robots Access Control License variant to use. - - crawler_protection: Enable rule to punish AI Scrapers and Crawlers via a link maze. - - enable_js: Use lightweight, invisible JavaScript detections to improve Bot Management. - [Learn more about JavaScript Detections](https://developers.cloudflare.com/bots/reference/javascript-detections/). - - is_robots_txt_managed: Enable cloudflare managed robots.txt. If an existing robots.txt is detected, - then managed robots.txt will be prepended to the existing robots.txt. - - optimize_wordpress: Whether to optimize Super Bot Fight Mode protections for Wordpress. - - sbfm_definitely_automated: Super Bot Fight Mode (SBFM) action to take on definitely automated requests. - - sbfm_likely_automated: Super Bot Fight Mode (SBFM) action to take on likely automated requests. - - sbfm_static_resource_protection: Super Bot Fight Mode (SBFM) to enable static resource protection. Enable if - static resources on your application need bot protection. Note: Static resource - protection can also result in legitimate traffic being blocked. - - sbfm_verified_bots: Super Bot Fight Mode (SBFM) action to take on verified bots requests. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - ... - - @overload - async def update( - self, - *, - zone_id: str, - ai_bots_protection: Literal["block", "disabled", "only_on_ad_pages"] | Omit = omit, - auto_update_model: bool | Omit = omit, - bm_cookie_enabled: bool | Omit = omit, - cf_robots_variant: Literal["off", "policy_only"] | Omit = omit, - crawler_protection: Literal["enabled", "disabled"] | Omit = omit, - enable_js: bool | Omit = omit, - is_robots_txt_managed: bool | Omit = omit, - suppress_session_score: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[BotManagementUpdateResponse]: - """ - Updates the Bot Management configuration for a zone. - - This API is used to update: - - - **Bot Fight Mode** - - **Super Bot Fight Mode** - - **Bot Management for Enterprise** - - See [Bot Plans](https://developers.cloudflare.com/bots/plans/) for more - information on the different plans \\ - If you recently upgraded or downgraded your plan, refer to the following examples - to clean up old configurations. Copy and paste the example body to remove old zone - configurations based on your current plan. - - #### Clean up configuration for Bot Fight Mode plan - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "suppress_session_score": false - } - ``` - - #### Clean up configuration for SBFM Pro plan - - ```json - { - "sbfm_likely_automated": "allow", - "fight_mode": false - } - ``` - - #### Clean up configuration for SBFM Biz plan - - ```json - { - "fight_mode": false - } - ``` - - #### Clean up configuration for BM Enterprise Subscription plan - - It is strongly recommended that you ensure you have - [custom rules](https://developers.cloudflare.com/waf/custom-rules/) in place to - protect your zone before disabling the SBFM rules. Without these protections, - your zone is vulnerable to attacks. - - ```json - { - "sbfm_likely_automated": "allow", - "sbfm_definitely_automated": "allow", - "sbfm_verified_bots": "allow", - "sbfm_static_resource_protection": false, - "optimize_wordpress": false, - "fight_mode": false - } - ``` - - Args: - zone_id: Identifier. - - ai_bots_protection: Enable rule to block AI Scrapers and Crawlers. Please note the value - `only_on_ad_pages` is currently not available for Enterprise customers. - - auto_update_model: Automatically update to the newest bot detection models created by Cloudflare as - they are released. - [Learn more.](https://developers.cloudflare.com/bots/reference/machine-learning-models#model-versions-and-release-notes) - - bm_cookie_enabled: Indicates that the bot management cookie can be placed on end user devices - accessing the site. Defaults to true - - cf_robots_variant: Specifies the Robots Access Control License variant to use. - - crawler_protection: Enable rule to punish AI Scrapers and Crawlers via a link maze. - - enable_js: Use lightweight, invisible JavaScript detections to improve Bot Management. - [Learn more about JavaScript Detections](https://developers.cloudflare.com/bots/reference/javascript-detections/). - - is_robots_txt_managed: Enable cloudflare managed robots.txt. If an existing robots.txt is detected, - then managed robots.txt will be prepended to the existing robots.txt. - - suppress_session_score: Whether to disable tracking the highest bot score for a session in the Bot - Management cookie. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - ... - - @required_args(["zone_id"]) - async def update( - self, - *, - zone_id: str, - ai_bots_protection: Literal["block", "disabled", "only_on_ad_pages"] | Omit = omit, - cf_robots_variant: Literal["off", "policy_only"] | Omit = omit, - crawler_protection: Literal["enabled", "disabled"] | Omit = omit, - enable_js: bool | Omit = omit, - fight_mode: bool | Omit = omit, - is_robots_txt_managed: bool | Omit = omit, - optimize_wordpress: bool | Omit = omit, - sbfm_definitely_automated: Literal["allow", "block", "managed_challenge"] | Omit = omit, - sbfm_static_resource_protection: bool | Omit = omit, - sbfm_verified_bots: Literal["allow", "block"] | Omit = omit, - sbfm_likely_automated: Literal["allow", "block", "managed_challenge"] | Omit = omit, - auto_update_model: bool | Omit = omit, - bm_cookie_enabled: bool | Omit = omit, - suppress_session_score: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[BotManagementUpdateResponse]: - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return cast( - Optional[BotManagementUpdateResponse], - await self._put( - f"/zones/{zone_id}/bot_management", - body=await async_maybe_transform( - { - "ai_bots_protection": ai_bots_protection, - "cf_robots_variant": cf_robots_variant, - "crawler_protection": crawler_protection, - "enable_js": enable_js, - "fight_mode": fight_mode, - "is_robots_txt_managed": is_robots_txt_managed, - "optimize_wordpress": optimize_wordpress, - "sbfm_definitely_automated": sbfm_definitely_automated, - "sbfm_static_resource_protection": sbfm_static_resource_protection, - "sbfm_verified_bots": sbfm_verified_bots, - "sbfm_likely_automated": sbfm_likely_automated, - "auto_update_model": auto_update_model, - "bm_cookie_enabled": bm_cookie_enabled, - "suppress_session_score": suppress_session_score, - }, - bot_management_update_params.BotManagementUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[BotManagementUpdateResponse]]._unwrapper, - ), - cast_to=cast( - Any, ResultWrapper[BotManagementUpdateResponse] - ), # Union types cannot be passed in as arguments in the type system - ), - ) - - async def get( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[BotManagementGetResponse]: - """ - Retrieve a zone's Bot Management Config - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return cast( - Optional[BotManagementGetResponse], - await self._get( - f"/zones/{zone_id}/bot_management", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[BotManagementGetResponse]]._unwrapper, - ), - cast_to=cast( - Any, ResultWrapper[BotManagementGetResponse] - ), # Union types cannot be passed in as arguments in the type system - ), - ) - - -class BotManagementResourceWithRawResponse: - def __init__(self, bot_management: BotManagementResource) -> None: - self._bot_management = bot_management - - self.update = to_raw_response_wrapper( - bot_management.update, - ) - self.get = to_raw_response_wrapper( - bot_management.get, - ) - - -class AsyncBotManagementResourceWithRawResponse: - def __init__(self, bot_management: AsyncBotManagementResource) -> None: - self._bot_management = bot_management - - self.update = async_to_raw_response_wrapper( - bot_management.update, - ) - self.get = async_to_raw_response_wrapper( - bot_management.get, - ) - - -class BotManagementResourceWithStreamingResponse: - def __init__(self, bot_management: BotManagementResource) -> None: - self._bot_management = bot_management - - self.update = to_streamed_response_wrapper( - bot_management.update, - ) - self.get = to_streamed_response_wrapper( - bot_management.get, - ) - - -class AsyncBotManagementResourceWithStreamingResponse: - def __init__(self, bot_management: AsyncBotManagementResource) -> None: - self._bot_management = bot_management - - self.update = async_to_streamed_response_wrapper( - bot_management.update, - ) - self.get = async_to_streamed_response_wrapper( - bot_management.get, - ) From 1cf3ffd6b7647311e0a98b06582950fe0e9ae6d3 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:51:44 -0500 Subject: [PATCH 13/27] chore(client_certificates): update generated types and methods --- .../resources/client_certificates.py | 678 ------------------ 1 file changed, 678 deletions(-) delete mode 100644 src/cloudflare/resources/client_certificates.py diff --git a/src/cloudflare/resources/client_certificates.py b/src/cloudflare/resources/client_certificates.py deleted file mode 100644 index 3a347848901..00000000000 --- a/src/cloudflare/resources/client_certificates.py +++ /dev/null @@ -1,678 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Type, Optional, cast -from typing_extensions import Literal - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from ..pagination import SyncV4PagePaginationArray, AsyncV4PagePaginationArray -from .._base_client import AsyncPaginator, make_request_options -from ..types.client_certificates import ( - client_certificate_edit_params, - client_certificate_list_params, - client_certificate_create_params, -) -from ..types.client_certificates.client_certificate import ClientCertificate - -__all__ = ["ClientCertificatesResource", "AsyncClientCertificatesResource"] - - -class ClientCertificatesResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> ClientCertificatesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return ClientCertificatesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> ClientCertificatesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return ClientCertificatesResourceWithStreamingResponse(self) - - def create( - self, - *, - zone_id: str, - csr: str, - validity_days: int, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[ClientCertificate]: - """ - Create a new API Shield mTLS Client Certificate - - Args: - zone_id: Identifier. - - csr: The Certificate Signing Request (CSR). Must be newline-encoded. - - validity_days: The number of days the Client Certificate will be valid after the issued_on date - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._post( - f"/zones/{zone_id}/client_certificates", - body=maybe_transform( - { - "csr": csr, - "validity_days": validity_days, - }, - client_certificate_create_params.ClientCertificateCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[ClientCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[ClientCertificate]], ResultWrapper[ClientCertificate]), - ) - - def list( - self, - *, - zone_id: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - page: float | Omit = omit, - per_page: float | Omit = omit, - status: Literal["all", "active", "pending_reactivation", "pending_revocation", "revoked"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncV4PagePaginationArray[ClientCertificate]: - """ - List all of your Zone's API Shield mTLS Client Certificates by Status and/or - using Pagination - - Args: - zone_id: Identifier. - - limit: Limit to the number of records returned. - - offset: Offset the results - - page: Page number of paginated results. - - per_page: Number of records per page. - - status: Client Certitifcate Status to filter results by. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get_api_list( - f"/zones/{zone_id}/client_certificates", - page=SyncV4PagePaginationArray[ClientCertificate], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "limit": limit, - "offset": offset, - "page": page, - "per_page": per_page, - "status": status, - }, - client_certificate_list_params.ClientCertificateListParams, - ), - ), - model=ClientCertificate, - ) - - def delete( - self, - client_certificate_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[ClientCertificate]: - """ - Set a API Shield mTLS Client Certificate to pending_revocation status for - processing to revoked status. - - Args: - zone_id: Identifier. - - client_certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not client_certificate_id: - raise ValueError( - f"Expected a non-empty value for `client_certificate_id` but received {client_certificate_id!r}" - ) - return self._delete( - f"/zones/{zone_id}/client_certificates/{client_certificate_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[ClientCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[ClientCertificate]], ResultWrapper[ClientCertificate]), - ) - - def edit( - self, - client_certificate_id: str, - *, - zone_id: str, - reactivate: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[ClientCertificate]: - """ - If a API Shield mTLS Client Certificate is in a pending_revocation state, you - may reactivate it with this endpoint. - - Args: - zone_id: Identifier. - - client_certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not client_certificate_id: - raise ValueError( - f"Expected a non-empty value for `client_certificate_id` but received {client_certificate_id!r}" - ) - return self._patch( - f"/zones/{zone_id}/client_certificates/{client_certificate_id}", - body=maybe_transform( - {"reactivate": reactivate}, client_certificate_edit_params.ClientCertificateEditParams - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[ClientCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[ClientCertificate]], ResultWrapper[ClientCertificate]), - ) - - def get( - self, - client_certificate_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[ClientCertificate]: - """ - Get Details for a single mTLS API Shield Client Certificate - - Args: - zone_id: Identifier. - - client_certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not client_certificate_id: - raise ValueError( - f"Expected a non-empty value for `client_certificate_id` but received {client_certificate_id!r}" - ) - return self._get( - f"/zones/{zone_id}/client_certificates/{client_certificate_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[ClientCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[ClientCertificate]], ResultWrapper[ClientCertificate]), - ) - - -class AsyncClientCertificatesResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncClientCertificatesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncClientCertificatesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncClientCertificatesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncClientCertificatesResourceWithStreamingResponse(self) - - async def create( - self, - *, - zone_id: str, - csr: str, - validity_days: int, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[ClientCertificate]: - """ - Create a new API Shield mTLS Client Certificate - - Args: - zone_id: Identifier. - - csr: The Certificate Signing Request (CSR). Must be newline-encoded. - - validity_days: The number of days the Client Certificate will be valid after the issued_on date - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._post( - f"/zones/{zone_id}/client_certificates", - body=await async_maybe_transform( - { - "csr": csr, - "validity_days": validity_days, - }, - client_certificate_create_params.ClientCertificateCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[ClientCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[ClientCertificate]], ResultWrapper[ClientCertificate]), - ) - - def list( - self, - *, - zone_id: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - page: float | Omit = omit, - per_page: float | Omit = omit, - status: Literal["all", "active", "pending_reactivation", "pending_revocation", "revoked"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[ClientCertificate, AsyncV4PagePaginationArray[ClientCertificate]]: - """ - List all of your Zone's API Shield mTLS Client Certificates by Status and/or - using Pagination - - Args: - zone_id: Identifier. - - limit: Limit to the number of records returned. - - offset: Offset the results - - page: Page number of paginated results. - - per_page: Number of records per page. - - status: Client Certitifcate Status to filter results by. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get_api_list( - f"/zones/{zone_id}/client_certificates", - page=AsyncV4PagePaginationArray[ClientCertificate], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "limit": limit, - "offset": offset, - "page": page, - "per_page": per_page, - "status": status, - }, - client_certificate_list_params.ClientCertificateListParams, - ), - ), - model=ClientCertificate, - ) - - async def delete( - self, - client_certificate_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[ClientCertificate]: - """ - Set a API Shield mTLS Client Certificate to pending_revocation status for - processing to revoked status. - - Args: - zone_id: Identifier. - - client_certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not client_certificate_id: - raise ValueError( - f"Expected a non-empty value for `client_certificate_id` but received {client_certificate_id!r}" - ) - return await self._delete( - f"/zones/{zone_id}/client_certificates/{client_certificate_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[ClientCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[ClientCertificate]], ResultWrapper[ClientCertificate]), - ) - - async def edit( - self, - client_certificate_id: str, - *, - zone_id: str, - reactivate: bool | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[ClientCertificate]: - """ - If a API Shield mTLS Client Certificate is in a pending_revocation state, you - may reactivate it with this endpoint. - - Args: - zone_id: Identifier. - - client_certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not client_certificate_id: - raise ValueError( - f"Expected a non-empty value for `client_certificate_id` but received {client_certificate_id!r}" - ) - return await self._patch( - f"/zones/{zone_id}/client_certificates/{client_certificate_id}", - body=await async_maybe_transform( - {"reactivate": reactivate}, client_certificate_edit_params.ClientCertificateEditParams - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[ClientCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[ClientCertificate]], ResultWrapper[ClientCertificate]), - ) - - async def get( - self, - client_certificate_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[ClientCertificate]: - """ - Get Details for a single mTLS API Shield Client Certificate - - Args: - zone_id: Identifier. - - client_certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not client_certificate_id: - raise ValueError( - f"Expected a non-empty value for `client_certificate_id` but received {client_certificate_id!r}" - ) - return await self._get( - f"/zones/{zone_id}/client_certificates/{client_certificate_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[ClientCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[ClientCertificate]], ResultWrapper[ClientCertificate]), - ) - - -class ClientCertificatesResourceWithRawResponse: - def __init__(self, client_certificates: ClientCertificatesResource) -> None: - self._client_certificates = client_certificates - - self.create = to_raw_response_wrapper( - client_certificates.create, - ) - self.list = to_raw_response_wrapper( - client_certificates.list, - ) - self.delete = to_raw_response_wrapper( - client_certificates.delete, - ) - self.edit = to_raw_response_wrapper( - client_certificates.edit, - ) - self.get = to_raw_response_wrapper( - client_certificates.get, - ) - - -class AsyncClientCertificatesResourceWithRawResponse: - def __init__(self, client_certificates: AsyncClientCertificatesResource) -> None: - self._client_certificates = client_certificates - - self.create = async_to_raw_response_wrapper( - client_certificates.create, - ) - self.list = async_to_raw_response_wrapper( - client_certificates.list, - ) - self.delete = async_to_raw_response_wrapper( - client_certificates.delete, - ) - self.edit = async_to_raw_response_wrapper( - client_certificates.edit, - ) - self.get = async_to_raw_response_wrapper( - client_certificates.get, - ) - - -class ClientCertificatesResourceWithStreamingResponse: - def __init__(self, client_certificates: ClientCertificatesResource) -> None: - self._client_certificates = client_certificates - - self.create = to_streamed_response_wrapper( - client_certificates.create, - ) - self.list = to_streamed_response_wrapper( - client_certificates.list, - ) - self.delete = to_streamed_response_wrapper( - client_certificates.delete, - ) - self.edit = to_streamed_response_wrapper( - client_certificates.edit, - ) - self.get = to_streamed_response_wrapper( - client_certificates.get, - ) - - -class AsyncClientCertificatesResourceWithStreamingResponse: - def __init__(self, client_certificates: AsyncClientCertificatesResource) -> None: - self._client_certificates = client_certificates - - self.create = async_to_streamed_response_wrapper( - client_certificates.create, - ) - self.list = async_to_streamed_response_wrapper( - client_certificates.list, - ) - self.delete = async_to_streamed_response_wrapper( - client_certificates.delete, - ) - self.edit = async_to_streamed_response_wrapper( - client_certificates.edit, - ) - self.get = async_to_streamed_response_wrapper( - client_certificates.get, - ) From fbac9f9cce018c9962137d2b8d6e32370fd3dc4f Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:52:14 -0500 Subject: [PATCH 14/27] chore(custom_nameservers): update generated types and methods --- .../resources/custom_nameservers.py | 388 ------------------ 1 file changed, 388 deletions(-) delete mode 100644 src/cloudflare/resources/custom_nameservers.py diff --git a/src/cloudflare/resources/custom_nameservers.py b/src/cloudflare/resources/custom_nameservers.py deleted file mode 100644 index 6545ebd198c..00000000000 --- a/src/cloudflare/resources/custom_nameservers.py +++ /dev/null @@ -1,388 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Type, Optional, cast - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from ..pagination import SyncSinglePage, AsyncSinglePage -from .._base_client import AsyncPaginator, make_request_options -from ..types.custom_nameservers import custom_nameserver_create_params -from ..types.custom_nameservers.custom_nameserver import CustomNameserver -from ..types.custom_nameservers.custom_nameserver_delete_response import CustomNameserverDeleteResponse - -__all__ = ["CustomNameserversResource", "AsyncCustomNameserversResource"] - - -class CustomNameserversResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> CustomNameserversResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return CustomNameserversResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> CustomNameserversResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return CustomNameserversResourceWithStreamingResponse(self) - - def create( - self, - *, - account_id: str, - ns_name: str, - ns_set: float | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[CustomNameserver]: - """ - Add Account Custom Nameserver - - Args: - account_id: Account identifier tag. - - ns_name: The FQDN of the name server. - - ns_set: The number of the set that this name server belongs to. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not account_id: - raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") - return self._post( - f"/accounts/{account_id}/custom_ns", - body=maybe_transform( - { - "ns_name": ns_name, - "ns_set": ns_set, - }, - custom_nameserver_create_params.CustomNameserverCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[CustomNameserver]]._unwrapper, - ), - cast_to=cast(Type[Optional[CustomNameserver]], ResultWrapper[CustomNameserver]), - ) - - def delete( - self, - custom_ns_id: str, - *, - account_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncSinglePage[CustomNameserverDeleteResponse]: - """ - Delete Account Custom Nameserver - - Args: - account_id: Account identifier tag. - - custom_ns_id: The FQDN of the name server. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not account_id: - raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") - if not custom_ns_id: - raise ValueError(f"Expected a non-empty value for `custom_ns_id` but received {custom_ns_id!r}") - return self._get_api_list( - f"/accounts/{account_id}/custom_ns/{custom_ns_id}", - page=SyncSinglePage[CustomNameserverDeleteResponse], - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - model=str, - method="delete", - ) - - def get( - self, - *, - account_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncSinglePage[CustomNameserver]: - """ - List an account's custom nameservers. - - Args: - account_id: Account identifier tag. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not account_id: - raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") - return self._get_api_list( - f"/accounts/{account_id}/custom_ns", - page=SyncSinglePage[CustomNameserver], - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - model=CustomNameserver, - ) - - -class AsyncCustomNameserversResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncCustomNameserversResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncCustomNameserversResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncCustomNameserversResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncCustomNameserversResourceWithStreamingResponse(self) - - async def create( - self, - *, - account_id: str, - ns_name: str, - ns_set: float | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[CustomNameserver]: - """ - Add Account Custom Nameserver - - Args: - account_id: Account identifier tag. - - ns_name: The FQDN of the name server. - - ns_set: The number of the set that this name server belongs to. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not account_id: - raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") - return await self._post( - f"/accounts/{account_id}/custom_ns", - body=await async_maybe_transform( - { - "ns_name": ns_name, - "ns_set": ns_set, - }, - custom_nameserver_create_params.CustomNameserverCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[CustomNameserver]]._unwrapper, - ), - cast_to=cast(Type[Optional[CustomNameserver]], ResultWrapper[CustomNameserver]), - ) - - def delete( - self, - custom_ns_id: str, - *, - account_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[CustomNameserverDeleteResponse, AsyncSinglePage[CustomNameserverDeleteResponse]]: - """ - Delete Account Custom Nameserver - - Args: - account_id: Account identifier tag. - - custom_ns_id: The FQDN of the name server. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not account_id: - raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") - if not custom_ns_id: - raise ValueError(f"Expected a non-empty value for `custom_ns_id` but received {custom_ns_id!r}") - return self._get_api_list( - f"/accounts/{account_id}/custom_ns/{custom_ns_id}", - page=AsyncSinglePage[CustomNameserverDeleteResponse], - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - model=str, - method="delete", - ) - - def get( - self, - *, - account_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[CustomNameserver, AsyncSinglePage[CustomNameserver]]: - """ - List an account's custom nameservers. - - Args: - account_id: Account identifier tag. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not account_id: - raise ValueError(f"Expected a non-empty value for `account_id` but received {account_id!r}") - return self._get_api_list( - f"/accounts/{account_id}/custom_ns", - page=AsyncSinglePage[CustomNameserver], - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - model=CustomNameserver, - ) - - -class CustomNameserversResourceWithRawResponse: - def __init__(self, custom_nameservers: CustomNameserversResource) -> None: - self._custom_nameservers = custom_nameservers - - self.create = to_raw_response_wrapper( - custom_nameservers.create, - ) - self.delete = to_raw_response_wrapper( - custom_nameservers.delete, - ) - self.get = to_raw_response_wrapper( - custom_nameservers.get, - ) - - -class AsyncCustomNameserversResourceWithRawResponse: - def __init__(self, custom_nameservers: AsyncCustomNameserversResource) -> None: - self._custom_nameservers = custom_nameservers - - self.create = async_to_raw_response_wrapper( - custom_nameservers.create, - ) - self.delete = async_to_raw_response_wrapper( - custom_nameservers.delete, - ) - self.get = async_to_raw_response_wrapper( - custom_nameservers.get, - ) - - -class CustomNameserversResourceWithStreamingResponse: - def __init__(self, custom_nameservers: CustomNameserversResource) -> None: - self._custom_nameservers = custom_nameservers - - self.create = to_streamed_response_wrapper( - custom_nameservers.create, - ) - self.delete = to_streamed_response_wrapper( - custom_nameservers.delete, - ) - self.get = to_streamed_response_wrapper( - custom_nameservers.get, - ) - - -class AsyncCustomNameserversResourceWithStreamingResponse: - def __init__(self, custom_nameservers: AsyncCustomNameserversResource) -> None: - self._custom_nameservers = custom_nameservers - - self.create = async_to_streamed_response_wrapper( - custom_nameservers.create, - ) - self.delete = async_to_streamed_response_wrapper( - custom_nameservers.delete, - ) - self.get = async_to_streamed_response_wrapper( - custom_nameservers.get, - ) From 909a51d7486a5a85a22be5d8788f4720397f879e Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:52:43 -0500 Subject: [PATCH 15/27] chore(dcv_delegation): update generated types and methods --- src/cloudflare/resources/dcv_delegation.py | 180 --------------------- 1 file changed, 180 deletions(-) delete mode 100644 src/cloudflare/resources/dcv_delegation.py diff --git a/src/cloudflare/resources/dcv_delegation.py b/src/cloudflare/resources/dcv_delegation.py deleted file mode 100644 index f421bf26ac2..00000000000 --- a/src/cloudflare/resources/dcv_delegation.py +++ /dev/null @@ -1,180 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Type, Optional, cast - -import httpx - -from .._types import Body, Query, Headers, NotGiven, not_given -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from .._base_client import make_request_options -from ..types.dcv_delegation.dcv_delegation_uuid import DCVDelegationUUID - -__all__ = ["DCVDelegationResource", "AsyncDCVDelegationResource"] - - -class DCVDelegationResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> DCVDelegationResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return DCVDelegationResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> DCVDelegationResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return DCVDelegationResourceWithStreamingResponse(self) - - def get( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[DCVDelegationUUID]: - """ - Retrieve the account and zone specific unique identifier used as part of the - CNAME target for DCV Delegation. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get( - f"/zones/{zone_id}/dcv_delegation/uuid", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[DCVDelegationUUID]]._unwrapper, - ), - cast_to=cast(Type[Optional[DCVDelegationUUID]], ResultWrapper[DCVDelegationUUID]), - ) - - -class AsyncDCVDelegationResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncDCVDelegationResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncDCVDelegationResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncDCVDelegationResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncDCVDelegationResourceWithStreamingResponse(self) - - async def get( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[DCVDelegationUUID]: - """ - Retrieve the account and zone specific unique identifier used as part of the - CNAME target for DCV Delegation. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._get( - f"/zones/{zone_id}/dcv_delegation/uuid", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[DCVDelegationUUID]]._unwrapper, - ), - cast_to=cast(Type[Optional[DCVDelegationUUID]], ResultWrapper[DCVDelegationUUID]), - ) - - -class DCVDelegationResourceWithRawResponse: - def __init__(self, dcv_delegation: DCVDelegationResource) -> None: - self._dcv_delegation = dcv_delegation - - self.get = to_raw_response_wrapper( - dcv_delegation.get, - ) - - -class AsyncDCVDelegationResourceWithRawResponse: - def __init__(self, dcv_delegation: AsyncDCVDelegationResource) -> None: - self._dcv_delegation = dcv_delegation - - self.get = async_to_raw_response_wrapper( - dcv_delegation.get, - ) - - -class DCVDelegationResourceWithStreamingResponse: - def __init__(self, dcv_delegation: DCVDelegationResource) -> None: - self._dcv_delegation = dcv_delegation - - self.get = to_streamed_response_wrapper( - dcv_delegation.get, - ) - - -class AsyncDCVDelegationResourceWithStreamingResponse: - def __init__(self, dcv_delegation: AsyncDCVDelegationResource) -> None: - self._dcv_delegation = dcv_delegation - - self.get = async_to_streamed_response_wrapper( - dcv_delegation.get, - ) From c1861b1636e3a0a4e06a3f4af9b2130cdc048f16 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:53:13 -0500 Subject: [PATCH 16/27] chore(filters): update generated types and methods --- src/cloudflare/resources/filters.py | 976 ---------------------------- 1 file changed, 976 deletions(-) delete mode 100644 src/cloudflare/resources/filters.py diff --git a/src/cloudflare/resources/filters.py b/src/cloudflare/resources/filters.py deleted file mode 100644 index 9ecfd9dc3ab..00000000000 --- a/src/cloudflare/resources/filters.py +++ /dev/null @@ -1,976 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import typing_extensions -from typing import Type, Iterable, Optional, cast - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from ..pagination import SyncSinglePage, AsyncSinglePage, SyncV4PagePaginationArray, AsyncV4PagePaginationArray -from .._base_client import AsyncPaginator, make_request_options -from ..types.filters import ( - filter_list_params, - filter_update_params, - filter_bulk_delete_params, - filter_bulk_update_params, -) -from ..types.filters.firewall_filter import FirewallFilter -from ..types.filters.firewall_filter_param import FirewallFilterParam -from ..types.filters.filter_delete_response import FilterDeleteResponse -from ..types.filters.filter_bulk_delete_response import FilterBulkDeleteResponse - -__all__ = ["FiltersResource", "AsyncFiltersResource"] - - -class FiltersResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> FiltersResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return FiltersResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> FiltersResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return FiltersResourceWithStreamingResponse(self) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - def create( - self, - *, - zone_id: str, - body: Iterable[FirewallFilterParam], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncSinglePage[FirewallFilter]: - """ - Creates one or more filters. - - Args: - zone_id: Defines an identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get_api_list( - f"/zones/{zone_id}/filters", - page=SyncSinglePage[FirewallFilter], - body=maybe_transform(body, Iterable[FirewallFilterParam]), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - model=FirewallFilter, - method="post", - ) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - def update( - self, - filter_id: str, - *, - zone_id: str, - description: str | Omit = omit, - expression: str | Omit = omit, - paused: bool | Omit = omit, - ref: str | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> FirewallFilter: - """ - Updates an existing filter. - - Args: - zone_id: Defines an identifier. - - filter_id: The unique identifier of the filter. - - description: An informative summary of the filter. - - expression: The filter expression. For more information, refer to - [Expressions](https://developers.cloudflare.com/ruleset-engine/rules-language/expressions/). - - paused: When true, indicates that the filter is currently paused. - - ref: A short reference tag. Allows you to select related filters. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not filter_id: - raise ValueError(f"Expected a non-empty value for `filter_id` but received {filter_id!r}") - return self._put( - f"/zones/{zone_id}/filters/{filter_id}", - body=maybe_transform( - { - "description": description, - "expression": expression, - "paused": paused, - "ref": ref, - }, - filter_update_params.FilterUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[FirewallFilter]._unwrapper, - ), - cast_to=cast(Type[FirewallFilter], ResultWrapper[FirewallFilter]), - ) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - def list( - self, - *, - zone_id: str, - id: str | Omit = omit, - description: str | Omit = omit, - expression: str | Omit = omit, - page: float | Omit = omit, - paused: bool | Omit = omit, - per_page: float | Omit = omit, - ref: str | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncV4PagePaginationArray[FirewallFilter]: - """Fetches filters in a zone. - - You can filter the results using several optional - parameters. - - Args: - zone_id: Defines an identifier. - - id: The unique identifier of the filter. - - description: A case-insensitive string to find in the description. - - expression: A case-insensitive string to find in the expression. - - page: Page number of paginated results. - - paused: When true, indicates that the filter is currently paused. - - per_page: Number of filters per page. - - ref: The filter ref (a short reference tag) to search for. Must be an exact match. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get_api_list( - f"/zones/{zone_id}/filters", - page=SyncV4PagePaginationArray[FirewallFilter], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "id": id, - "description": description, - "expression": expression, - "page": page, - "paused": paused, - "per_page": per_page, - "ref": ref, - }, - filter_list_params.FilterListParams, - ), - ), - model=FirewallFilter, - ) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - def delete( - self, - filter_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> FilterDeleteResponse: - """ - Deletes an existing filter. - - Args: - zone_id: Defines an identifier. - - filter_id: The unique identifier of the filter. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not filter_id: - raise ValueError(f"Expected a non-empty value for `filter_id` but received {filter_id!r}") - return self._delete( - f"/zones/{zone_id}/filters/{filter_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[FilterDeleteResponse]._unwrapper, - ), - cast_to=cast(Type[FilterDeleteResponse], ResultWrapper[FilterDeleteResponse]), - ) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - def bulk_delete( - self, - *, - zone_id: str, - id: SequenceNotStr[str], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[FilterBulkDeleteResponse]: - """ - Deletes one or more existing filters. - - Args: - zone_id: Defines an identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._delete( - f"/zones/{zone_id}/filters", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"id": id}, filter_bulk_delete_params.FilterBulkDeleteParams), - post_parser=ResultWrapper[Optional[FilterBulkDeleteResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[FilterBulkDeleteResponse]], ResultWrapper[FilterBulkDeleteResponse]), - ) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - def bulk_update( - self, - *, - zone_id: str, - body: Iterable[filter_bulk_update_params.Body], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncSinglePage[FirewallFilter]: - """ - Updates one or more existing filters. - - Args: - zone_id: Defines an identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get_api_list( - f"/zones/{zone_id}/filters", - page=SyncSinglePage[FirewallFilter], - body=maybe_transform(body, Iterable[filter_bulk_update_params.Body]), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - model=FirewallFilter, - method="put", - ) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - def get( - self, - filter_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> FirewallFilter: - """ - Fetches the details of a filter. - - Args: - zone_id: Defines an identifier. - - filter_id: The unique identifier of the filter. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not filter_id: - raise ValueError(f"Expected a non-empty value for `filter_id` but received {filter_id!r}") - return self._get( - f"/zones/{zone_id}/filters/{filter_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[FirewallFilter]._unwrapper, - ), - cast_to=cast(Type[FirewallFilter], ResultWrapper[FirewallFilter]), - ) - - -class AsyncFiltersResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncFiltersResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncFiltersResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncFiltersResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncFiltersResourceWithStreamingResponse(self) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - def create( - self, - *, - zone_id: str, - body: Iterable[FirewallFilterParam], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[FirewallFilter, AsyncSinglePage[FirewallFilter]]: - """ - Creates one or more filters. - - Args: - zone_id: Defines an identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get_api_list( - f"/zones/{zone_id}/filters", - page=AsyncSinglePage[FirewallFilter], - body=maybe_transform(body, Iterable[FirewallFilterParam]), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - model=FirewallFilter, - method="post", - ) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - async def update( - self, - filter_id: str, - *, - zone_id: str, - description: str | Omit = omit, - expression: str | Omit = omit, - paused: bool | Omit = omit, - ref: str | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> FirewallFilter: - """ - Updates an existing filter. - - Args: - zone_id: Defines an identifier. - - filter_id: The unique identifier of the filter. - - description: An informative summary of the filter. - - expression: The filter expression. For more information, refer to - [Expressions](https://developers.cloudflare.com/ruleset-engine/rules-language/expressions/). - - paused: When true, indicates that the filter is currently paused. - - ref: A short reference tag. Allows you to select related filters. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not filter_id: - raise ValueError(f"Expected a non-empty value for `filter_id` but received {filter_id!r}") - return await self._put( - f"/zones/{zone_id}/filters/{filter_id}", - body=await async_maybe_transform( - { - "description": description, - "expression": expression, - "paused": paused, - "ref": ref, - }, - filter_update_params.FilterUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[FirewallFilter]._unwrapper, - ), - cast_to=cast(Type[FirewallFilter], ResultWrapper[FirewallFilter]), - ) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - def list( - self, - *, - zone_id: str, - id: str | Omit = omit, - description: str | Omit = omit, - expression: str | Omit = omit, - page: float | Omit = omit, - paused: bool | Omit = omit, - per_page: float | Omit = omit, - ref: str | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[FirewallFilter, AsyncV4PagePaginationArray[FirewallFilter]]: - """Fetches filters in a zone. - - You can filter the results using several optional - parameters. - - Args: - zone_id: Defines an identifier. - - id: The unique identifier of the filter. - - description: A case-insensitive string to find in the description. - - expression: A case-insensitive string to find in the expression. - - page: Page number of paginated results. - - paused: When true, indicates that the filter is currently paused. - - per_page: Number of filters per page. - - ref: The filter ref (a short reference tag) to search for. Must be an exact match. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get_api_list( - f"/zones/{zone_id}/filters", - page=AsyncV4PagePaginationArray[FirewallFilter], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "id": id, - "description": description, - "expression": expression, - "page": page, - "paused": paused, - "per_page": per_page, - "ref": ref, - }, - filter_list_params.FilterListParams, - ), - ), - model=FirewallFilter, - ) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - async def delete( - self, - filter_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> FilterDeleteResponse: - """ - Deletes an existing filter. - - Args: - zone_id: Defines an identifier. - - filter_id: The unique identifier of the filter. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not filter_id: - raise ValueError(f"Expected a non-empty value for `filter_id` but received {filter_id!r}") - return await self._delete( - f"/zones/{zone_id}/filters/{filter_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[FilterDeleteResponse]._unwrapper, - ), - cast_to=cast(Type[FilterDeleteResponse], ResultWrapper[FilterDeleteResponse]), - ) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - async def bulk_delete( - self, - *, - zone_id: str, - id: SequenceNotStr[str], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[FilterBulkDeleteResponse]: - """ - Deletes one or more existing filters. - - Args: - zone_id: Defines an identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._delete( - f"/zones/{zone_id}/filters", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform({"id": id}, filter_bulk_delete_params.FilterBulkDeleteParams), - post_parser=ResultWrapper[Optional[FilterBulkDeleteResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[FilterBulkDeleteResponse]], ResultWrapper[FilterBulkDeleteResponse]), - ) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - def bulk_update( - self, - *, - zone_id: str, - body: Iterable[filter_bulk_update_params.Body], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[FirewallFilter, AsyncSinglePage[FirewallFilter]]: - """ - Updates one or more existing filters. - - Args: - zone_id: Defines an identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get_api_list( - f"/zones/{zone_id}/filters", - page=AsyncSinglePage[FirewallFilter], - body=maybe_transform(body, Iterable[filter_bulk_update_params.Body]), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - model=FirewallFilter, - method="put", - ) - - @typing_extensions.deprecated( - "The Filters API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#firewall-rules-api-and-filters-api for full details." - ) - async def get( - self, - filter_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> FirewallFilter: - """ - Fetches the details of a filter. - - Args: - zone_id: Defines an identifier. - - filter_id: The unique identifier of the filter. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not filter_id: - raise ValueError(f"Expected a non-empty value for `filter_id` but received {filter_id!r}") - return await self._get( - f"/zones/{zone_id}/filters/{filter_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[FirewallFilter]._unwrapper, - ), - cast_to=cast(Type[FirewallFilter], ResultWrapper[FirewallFilter]), - ) - - -class FiltersResourceWithRawResponse: - def __init__(self, filters: FiltersResource) -> None: - self._filters = filters - - self.create = ( # pyright: ignore[reportDeprecated] - to_raw_response_wrapper( - filters.create, # pyright: ignore[reportDeprecated], - ) - ) - self.update = ( # pyright: ignore[reportDeprecated] - to_raw_response_wrapper( - filters.update, # pyright: ignore[reportDeprecated], - ) - ) - self.list = ( # pyright: ignore[reportDeprecated] - to_raw_response_wrapper( - filters.list, # pyright: ignore[reportDeprecated], - ) - ) - self.delete = ( # pyright: ignore[reportDeprecated] - to_raw_response_wrapper( - filters.delete, # pyright: ignore[reportDeprecated], - ) - ) - self.bulk_delete = ( # pyright: ignore[reportDeprecated] - to_raw_response_wrapper( - filters.bulk_delete, # pyright: ignore[reportDeprecated], - ) - ) - self.bulk_update = ( # pyright: ignore[reportDeprecated] - to_raw_response_wrapper( - filters.bulk_update, # pyright: ignore[reportDeprecated], - ) - ) - self.get = ( # pyright: ignore[reportDeprecated] - to_raw_response_wrapper( - filters.get, # pyright: ignore[reportDeprecated], - ) - ) - - -class AsyncFiltersResourceWithRawResponse: - def __init__(self, filters: AsyncFiltersResource) -> None: - self._filters = filters - - self.create = ( # pyright: ignore[reportDeprecated] - async_to_raw_response_wrapper( - filters.create, # pyright: ignore[reportDeprecated], - ) - ) - self.update = ( # pyright: ignore[reportDeprecated] - async_to_raw_response_wrapper( - filters.update, # pyright: ignore[reportDeprecated], - ) - ) - self.list = ( # pyright: ignore[reportDeprecated] - async_to_raw_response_wrapper( - filters.list, # pyright: ignore[reportDeprecated], - ) - ) - self.delete = ( # pyright: ignore[reportDeprecated] - async_to_raw_response_wrapper( - filters.delete, # pyright: ignore[reportDeprecated], - ) - ) - self.bulk_delete = ( # pyright: ignore[reportDeprecated] - async_to_raw_response_wrapper( - filters.bulk_delete, # pyright: ignore[reportDeprecated], - ) - ) - self.bulk_update = ( # pyright: ignore[reportDeprecated] - async_to_raw_response_wrapper( - filters.bulk_update, # pyright: ignore[reportDeprecated], - ) - ) - self.get = ( # pyright: ignore[reportDeprecated] - async_to_raw_response_wrapper( - filters.get, # pyright: ignore[reportDeprecated], - ) - ) - - -class FiltersResourceWithStreamingResponse: - def __init__(self, filters: FiltersResource) -> None: - self._filters = filters - - self.create = ( # pyright: ignore[reportDeprecated] - to_streamed_response_wrapper( - filters.create, # pyright: ignore[reportDeprecated], - ) - ) - self.update = ( # pyright: ignore[reportDeprecated] - to_streamed_response_wrapper( - filters.update, # pyright: ignore[reportDeprecated], - ) - ) - self.list = ( # pyright: ignore[reportDeprecated] - to_streamed_response_wrapper( - filters.list, # pyright: ignore[reportDeprecated], - ) - ) - self.delete = ( # pyright: ignore[reportDeprecated] - to_streamed_response_wrapper( - filters.delete, # pyright: ignore[reportDeprecated], - ) - ) - self.bulk_delete = ( # pyright: ignore[reportDeprecated] - to_streamed_response_wrapper( - filters.bulk_delete, # pyright: ignore[reportDeprecated], - ) - ) - self.bulk_update = ( # pyright: ignore[reportDeprecated] - to_streamed_response_wrapper( - filters.bulk_update, # pyright: ignore[reportDeprecated], - ) - ) - self.get = ( # pyright: ignore[reportDeprecated] - to_streamed_response_wrapper( - filters.get, # pyright: ignore[reportDeprecated], - ) - ) - - -class AsyncFiltersResourceWithStreamingResponse: - def __init__(self, filters: AsyncFiltersResource) -> None: - self._filters = filters - - self.create = ( # pyright: ignore[reportDeprecated] - async_to_streamed_response_wrapper( - filters.create, # pyright: ignore[reportDeprecated], - ) - ) - self.update = ( # pyright: ignore[reportDeprecated] - async_to_streamed_response_wrapper( - filters.update, # pyright: ignore[reportDeprecated], - ) - ) - self.list = ( # pyright: ignore[reportDeprecated] - async_to_streamed_response_wrapper( - filters.list, # pyright: ignore[reportDeprecated], - ) - ) - self.delete = ( # pyright: ignore[reportDeprecated] - async_to_streamed_response_wrapper( - filters.delete, # pyright: ignore[reportDeprecated], - ) - ) - self.bulk_delete = ( # pyright: ignore[reportDeprecated] - async_to_streamed_response_wrapper( - filters.bulk_delete, # pyright: ignore[reportDeprecated], - ) - ) - self.bulk_update = ( # pyright: ignore[reportDeprecated] - async_to_streamed_response_wrapper( - filters.bulk_update, # pyright: ignore[reportDeprecated], - ) - ) - self.get = ( # pyright: ignore[reportDeprecated] - async_to_streamed_response_wrapper( - filters.get, # pyright: ignore[reportDeprecated], - ) - ) From f268d9068042154124880312084a717472279a9a Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:53:46 -0500 Subject: [PATCH 17/27] chore(fraud): update generated types and methods --- src/cloudflare/resources/fraud.py | 319 ------------------------------ 1 file changed, 319 deletions(-) delete mode 100644 src/cloudflare/resources/fraud.py diff --git a/src/cloudflare/resources/fraud.py b/src/cloudflare/resources/fraud.py deleted file mode 100644 index 0d4c657d1c8..00000000000 --- a/src/cloudflare/resources/fraud.py +++ /dev/null @@ -1,319 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Type, Optional, cast -from typing_extensions import Literal - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from ..types.fraud import fraud_update_params -from .._base_client import make_request_options -from ..types.fraud.fraud_settings import FraudSettings - -__all__ = ["FraudResource", "AsyncFraudResource"] - - -class FraudResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> FraudResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return FraudResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> FraudResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return FraudResourceWithStreamingResponse(self) - - def update( - self, - *, - zone_id: str, - user_profiles: Literal["enabled", "disabled"] | Omit = omit, - username_expressions: SequenceNotStr[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[FraudSettings]: - """ - Update Fraud Detection settings for a zone. - - Notes on `username_expressions` behavior: - - - If omitted or set to null, expressions are not modified. - - If provided as an empty array `[]`, all expressions will be cleared. - - Args: - zone_id: Identifier. - - user_profiles: Whether Fraud User Profiles is enabled for the zone. - - username_expressions: List of expressions to detect usernames in write HTTP requests. - - - Maximum of 10 expressions. - - Omit or set to null to leave unchanged on update. - - Provide an empty array `[]` to clear all expressions on update. - - Invalid expressions will result in a 10400 Bad Request with details in the - `messages` array. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._put( - f"/zones/{zone_id}/fraud_detection/settings", - body=maybe_transform( - { - "user_profiles": user_profiles, - "username_expressions": username_expressions, - }, - fraud_update_params.FraudUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[FraudSettings]]._unwrapper, - ), - cast_to=cast(Type[Optional[FraudSettings]], ResultWrapper[FraudSettings]), - ) - - def get( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[FraudSettings]: - """ - Retrieve Fraud Detection settings for a zone. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get( - f"/zones/{zone_id}/fraud_detection/settings", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[FraudSettings]]._unwrapper, - ), - cast_to=cast(Type[Optional[FraudSettings]], ResultWrapper[FraudSettings]), - ) - - -class AsyncFraudResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncFraudResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncFraudResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncFraudResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncFraudResourceWithStreamingResponse(self) - - async def update( - self, - *, - zone_id: str, - user_profiles: Literal["enabled", "disabled"] | Omit = omit, - username_expressions: SequenceNotStr[str] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[FraudSettings]: - """ - Update Fraud Detection settings for a zone. - - Notes on `username_expressions` behavior: - - - If omitted or set to null, expressions are not modified. - - If provided as an empty array `[]`, all expressions will be cleared. - - Args: - zone_id: Identifier. - - user_profiles: Whether Fraud User Profiles is enabled for the zone. - - username_expressions: List of expressions to detect usernames in write HTTP requests. - - - Maximum of 10 expressions. - - Omit or set to null to leave unchanged on update. - - Provide an empty array `[]` to clear all expressions on update. - - Invalid expressions will result in a 10400 Bad Request with details in the - `messages` array. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._put( - f"/zones/{zone_id}/fraud_detection/settings", - body=await async_maybe_transform( - { - "user_profiles": user_profiles, - "username_expressions": username_expressions, - }, - fraud_update_params.FraudUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[FraudSettings]]._unwrapper, - ), - cast_to=cast(Type[Optional[FraudSettings]], ResultWrapper[FraudSettings]), - ) - - async def get( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[FraudSettings]: - """ - Retrieve Fraud Detection settings for a zone. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._get( - f"/zones/{zone_id}/fraud_detection/settings", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[FraudSettings]]._unwrapper, - ), - cast_to=cast(Type[Optional[FraudSettings]], ResultWrapper[FraudSettings]), - ) - - -class FraudResourceWithRawResponse: - def __init__(self, fraud: FraudResource) -> None: - self._fraud = fraud - - self.update = to_raw_response_wrapper( - fraud.update, - ) - self.get = to_raw_response_wrapper( - fraud.get, - ) - - -class AsyncFraudResourceWithRawResponse: - def __init__(self, fraud: AsyncFraudResource) -> None: - self._fraud = fraud - - self.update = async_to_raw_response_wrapper( - fraud.update, - ) - self.get = async_to_raw_response_wrapper( - fraud.get, - ) - - -class FraudResourceWithStreamingResponse: - def __init__(self, fraud: FraudResource) -> None: - self._fraud = fraud - - self.update = to_streamed_response_wrapper( - fraud.update, - ) - self.get = to_streamed_response_wrapper( - fraud.get, - ) - - -class AsyncFraudResourceWithStreamingResponse: - def __init__(self, fraud: AsyncFraudResource) -> None: - self._fraud = fraud - - self.update = async_to_streamed_response_wrapper( - fraud.update, - ) - self.get = async_to_streamed_response_wrapper( - fraud.get, - ) From 912930489582475d3d9d5b3036ddbd5eb4948760 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:54:16 -0500 Subject: [PATCH 18/27] chore(ips): update generated types and methods --- src/cloudflare/resources/ips.py | 194 -------------------------------- 1 file changed, 194 deletions(-) delete mode 100644 src/cloudflare/resources/ips.py diff --git a/src/cloudflare/resources/ips.py b/src/cloudflare/resources/ips.py deleted file mode 100644 index 29d43e4eaa5..00000000000 --- a/src/cloudflare/resources/ips.py +++ /dev/null @@ -1,194 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Any, Optional, cast - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from ..types.ips import ip_list_params -from .._base_client import make_request_options -from ..types.ips.ip_list_response import IPListResponse - -__all__ = ["IPsResource", "AsyncIPsResource"] - - -class IPsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> IPsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return IPsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> IPsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return IPsResourceWithStreamingResponse(self) - - def list( - self, - *, - networks: str | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[IPListResponse]: - """ - Get IPs used on the Cloudflare/JD Cloud network, see - https://www.cloudflare.com/ips for Cloudflare IPs or - https://developers.cloudflare.com/china-network/reference/infrastructure/ for JD - Cloud IPs. - - Args: - networks: Specified as `jdcloud` to list IPs used by JD Cloud data centers. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return cast( - Optional[IPListResponse], - self._get( - "/ips", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform({"networks": networks}, ip_list_params.IPListParams), - post_parser=ResultWrapper[Optional[IPListResponse]]._unwrapper, - ), - cast_to=cast( - Any, ResultWrapper[IPListResponse] - ), # Union types cannot be passed in as arguments in the type system - ), - ) - - -class AsyncIPsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncIPsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncIPsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncIPsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncIPsResourceWithStreamingResponse(self) - - async def list( - self, - *, - networks: str | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[IPListResponse]: - """ - Get IPs used on the Cloudflare/JD Cloud network, see - https://www.cloudflare.com/ips for Cloudflare IPs or - https://developers.cloudflare.com/china-network/reference/infrastructure/ for JD - Cloud IPs. - - Args: - networks: Specified as `jdcloud` to list IPs used by JD Cloud data centers. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return cast( - Optional[IPListResponse], - await self._get( - "/ips", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform({"networks": networks}, ip_list_params.IPListParams), - post_parser=ResultWrapper[Optional[IPListResponse]]._unwrapper, - ), - cast_to=cast( - Any, ResultWrapper[IPListResponse] - ), # Union types cannot be passed in as arguments in the type system - ), - ) - - -class IPsResourceWithRawResponse: - def __init__(self, ips: IPsResource) -> None: - self._ips = ips - - self.list = to_raw_response_wrapper( - ips.list, - ) - - -class AsyncIPsResourceWithRawResponse: - def __init__(self, ips: AsyncIPsResource) -> None: - self._ips = ips - - self.list = async_to_raw_response_wrapper( - ips.list, - ) - - -class IPsResourceWithStreamingResponse: - def __init__(self, ips: IPsResource) -> None: - self._ips = ips - - self.list = to_streamed_response_wrapper( - ips.list, - ) - - -class AsyncIPsResourceWithStreamingResponse: - def __init__(self, ips: AsyncIPsResource) -> None: - self._ips = ips - - self.list = async_to_streamed_response_wrapper( - ips.list, - ) From ba8ebe3f300dac36774a7cc2c53b05c9a4edd260 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:54:47 -0500 Subject: [PATCH 19/27] chore(keyless_certificates): update generated types and methods --- .../resources/keyless_certificates.py | 713 ------------------ 1 file changed, 713 deletions(-) delete mode 100644 src/cloudflare/resources/keyless_certificates.py diff --git a/src/cloudflare/resources/keyless_certificates.py b/src/cloudflare/resources/keyless_certificates.py deleted file mode 100644 index 8b0180c31d5..00000000000 --- a/src/cloudflare/resources/keyless_certificates.py +++ /dev/null @@ -1,713 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Type, Optional, cast - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from ..pagination import SyncSinglePage, AsyncSinglePage -from .._base_client import AsyncPaginator, make_request_options -from ..types.custom_hostnames import BundleMethod -from ..types.keyless_certificates import keyless_certificate_edit_params, keyless_certificate_create_params -from ..types.custom_hostnames.bundle_method import BundleMethod -from ..types.keyless_certificates.tunnel_param import TunnelParam -from ..types.keyless_certificates.keyless_certificate import KeylessCertificate -from ..types.keyless_certificates.keyless_certificate_delete_response import KeylessCertificateDeleteResponse - -__all__ = ["KeylessCertificatesResource", "AsyncKeylessCertificatesResource"] - - -class KeylessCertificatesResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> KeylessCertificatesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return KeylessCertificatesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> KeylessCertificatesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return KeylessCertificatesResourceWithStreamingResponse(self) - - def create( - self, - *, - zone_id: str, - certificate: str, - host: str, - port: float, - bundle_method: BundleMethod | Omit = omit, - name: str | Omit = omit, - tunnel: TunnelParam | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[KeylessCertificate]: - """ - Creates a Keyless SSL configuration that allows SSL/TLS termination without - exposing private keys to Cloudflare. Keys remain on your infrastructure. - - Args: - zone_id: Identifier. - - certificate: The zone's SSL certificate or SSL certificate and intermediate(s). - - host: The keyless SSL name. - - port: The keyless SSL port used to communicate between Cloudflare and the client's - Keyless SSL server. - - bundle_method: A ubiquitous bundle has the highest probability of being verified everywhere, - even by clients using outdated or unusual trust stores. An optimal bundle uses - the shortest chain and newest intermediates. And the force bundle verifies the - chain, but does not otherwise modify it. - - name: The keyless SSL name. - - tunnel: Configuration for using Keyless SSL through a Cloudflare Tunnel - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._post( - f"/zones/{zone_id}/keyless_certificates", - body=maybe_transform( - { - "certificate": certificate, - "host": host, - "port": port, - "bundle_method": bundle_method, - "name": name, - "tunnel": tunnel, - }, - keyless_certificate_create_params.KeylessCertificateCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[KeylessCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[KeylessCertificate]], ResultWrapper[KeylessCertificate]), - ) - - def list( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncSinglePage[KeylessCertificate]: - """ - List all Keyless SSL configurations for a given zone. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get_api_list( - f"/zones/{zone_id}/keyless_certificates", - page=SyncSinglePage[KeylessCertificate], - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - model=KeylessCertificate, - ) - - def delete( - self, - keyless_certificate_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[KeylessCertificateDeleteResponse]: - """Removes a Keyless SSL configuration. - - SSL connections will no longer use the - keyless server for cryptographic operations. - - Args: - zone_id: Identifier. - - keyless_certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not keyless_certificate_id: - raise ValueError( - f"Expected a non-empty value for `keyless_certificate_id` but received {keyless_certificate_id!r}" - ) - return self._delete( - f"/zones/{zone_id}/keyless_certificates/{keyless_certificate_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[KeylessCertificateDeleteResponse]]._unwrapper, - ), - cast_to=cast( - Type[Optional[KeylessCertificateDeleteResponse]], ResultWrapper[KeylessCertificateDeleteResponse] - ), - ) - - def edit( - self, - keyless_certificate_id: str, - *, - zone_id: str, - enabled: bool | Omit = omit, - host: str | Omit = omit, - name: str | Omit = omit, - port: float | Omit = omit, - tunnel: TunnelParam | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[KeylessCertificate]: - """This will update attributes of a Keyless SSL. - - Consists of one or more of the - following: host,name,port. - - Args: - zone_id: Identifier. - - keyless_certificate_id: Identifier. - - enabled: Whether or not the Keyless SSL is on or off. - - host: The keyless SSL name. - - name: The keyless SSL name. - - port: The keyless SSL port used to communicate between Cloudflare and the client's - Keyless SSL server. - - tunnel: Configuration for using Keyless SSL through a Cloudflare Tunnel - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not keyless_certificate_id: - raise ValueError( - f"Expected a non-empty value for `keyless_certificate_id` but received {keyless_certificate_id!r}" - ) - return self._patch( - f"/zones/{zone_id}/keyless_certificates/{keyless_certificate_id}", - body=maybe_transform( - { - "enabled": enabled, - "host": host, - "name": name, - "port": port, - "tunnel": tunnel, - }, - keyless_certificate_edit_params.KeylessCertificateEditParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[KeylessCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[KeylessCertificate]], ResultWrapper[KeylessCertificate]), - ) - - def get( - self, - keyless_certificate_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[KeylessCertificate]: - """ - Get details for one Keyless SSL configuration. - - Args: - zone_id: Identifier. - - keyless_certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not keyless_certificate_id: - raise ValueError( - f"Expected a non-empty value for `keyless_certificate_id` but received {keyless_certificate_id!r}" - ) - return self._get( - f"/zones/{zone_id}/keyless_certificates/{keyless_certificate_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[KeylessCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[KeylessCertificate]], ResultWrapper[KeylessCertificate]), - ) - - -class AsyncKeylessCertificatesResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncKeylessCertificatesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncKeylessCertificatesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncKeylessCertificatesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncKeylessCertificatesResourceWithStreamingResponse(self) - - async def create( - self, - *, - zone_id: str, - certificate: str, - host: str, - port: float, - bundle_method: BundleMethod | Omit = omit, - name: str | Omit = omit, - tunnel: TunnelParam | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[KeylessCertificate]: - """ - Creates a Keyless SSL configuration that allows SSL/TLS termination without - exposing private keys to Cloudflare. Keys remain on your infrastructure. - - Args: - zone_id: Identifier. - - certificate: The zone's SSL certificate or SSL certificate and intermediate(s). - - host: The keyless SSL name. - - port: The keyless SSL port used to communicate between Cloudflare and the client's - Keyless SSL server. - - bundle_method: A ubiquitous bundle has the highest probability of being verified everywhere, - even by clients using outdated or unusual trust stores. An optimal bundle uses - the shortest chain and newest intermediates. And the force bundle verifies the - chain, but does not otherwise modify it. - - name: The keyless SSL name. - - tunnel: Configuration for using Keyless SSL through a Cloudflare Tunnel - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._post( - f"/zones/{zone_id}/keyless_certificates", - body=await async_maybe_transform( - { - "certificate": certificate, - "host": host, - "port": port, - "bundle_method": bundle_method, - "name": name, - "tunnel": tunnel, - }, - keyless_certificate_create_params.KeylessCertificateCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[KeylessCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[KeylessCertificate]], ResultWrapper[KeylessCertificate]), - ) - - def list( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[KeylessCertificate, AsyncSinglePage[KeylessCertificate]]: - """ - List all Keyless SSL configurations for a given zone. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get_api_list( - f"/zones/{zone_id}/keyless_certificates", - page=AsyncSinglePage[KeylessCertificate], - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - model=KeylessCertificate, - ) - - async def delete( - self, - keyless_certificate_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[KeylessCertificateDeleteResponse]: - """Removes a Keyless SSL configuration. - - SSL connections will no longer use the - keyless server for cryptographic operations. - - Args: - zone_id: Identifier. - - keyless_certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not keyless_certificate_id: - raise ValueError( - f"Expected a non-empty value for `keyless_certificate_id` but received {keyless_certificate_id!r}" - ) - return await self._delete( - f"/zones/{zone_id}/keyless_certificates/{keyless_certificate_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[KeylessCertificateDeleteResponse]]._unwrapper, - ), - cast_to=cast( - Type[Optional[KeylessCertificateDeleteResponse]], ResultWrapper[KeylessCertificateDeleteResponse] - ), - ) - - async def edit( - self, - keyless_certificate_id: str, - *, - zone_id: str, - enabled: bool | Omit = omit, - host: str | Omit = omit, - name: str | Omit = omit, - port: float | Omit = omit, - tunnel: TunnelParam | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[KeylessCertificate]: - """This will update attributes of a Keyless SSL. - - Consists of one or more of the - following: host,name,port. - - Args: - zone_id: Identifier. - - keyless_certificate_id: Identifier. - - enabled: Whether or not the Keyless SSL is on or off. - - host: The keyless SSL name. - - name: The keyless SSL name. - - port: The keyless SSL port used to communicate between Cloudflare and the client's - Keyless SSL server. - - tunnel: Configuration for using Keyless SSL through a Cloudflare Tunnel - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not keyless_certificate_id: - raise ValueError( - f"Expected a non-empty value for `keyless_certificate_id` but received {keyless_certificate_id!r}" - ) - return await self._patch( - f"/zones/{zone_id}/keyless_certificates/{keyless_certificate_id}", - body=await async_maybe_transform( - { - "enabled": enabled, - "host": host, - "name": name, - "port": port, - "tunnel": tunnel, - }, - keyless_certificate_edit_params.KeylessCertificateEditParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[KeylessCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[KeylessCertificate]], ResultWrapper[KeylessCertificate]), - ) - - async def get( - self, - keyless_certificate_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[KeylessCertificate]: - """ - Get details for one Keyless SSL configuration. - - Args: - zone_id: Identifier. - - keyless_certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not keyless_certificate_id: - raise ValueError( - f"Expected a non-empty value for `keyless_certificate_id` but received {keyless_certificate_id!r}" - ) - return await self._get( - f"/zones/{zone_id}/keyless_certificates/{keyless_certificate_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[KeylessCertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[KeylessCertificate]], ResultWrapper[KeylessCertificate]), - ) - - -class KeylessCertificatesResourceWithRawResponse: - def __init__(self, keyless_certificates: KeylessCertificatesResource) -> None: - self._keyless_certificates = keyless_certificates - - self.create = to_raw_response_wrapper( - keyless_certificates.create, - ) - self.list = to_raw_response_wrapper( - keyless_certificates.list, - ) - self.delete = to_raw_response_wrapper( - keyless_certificates.delete, - ) - self.edit = to_raw_response_wrapper( - keyless_certificates.edit, - ) - self.get = to_raw_response_wrapper( - keyless_certificates.get, - ) - - -class AsyncKeylessCertificatesResourceWithRawResponse: - def __init__(self, keyless_certificates: AsyncKeylessCertificatesResource) -> None: - self._keyless_certificates = keyless_certificates - - self.create = async_to_raw_response_wrapper( - keyless_certificates.create, - ) - self.list = async_to_raw_response_wrapper( - keyless_certificates.list, - ) - self.delete = async_to_raw_response_wrapper( - keyless_certificates.delete, - ) - self.edit = async_to_raw_response_wrapper( - keyless_certificates.edit, - ) - self.get = async_to_raw_response_wrapper( - keyless_certificates.get, - ) - - -class KeylessCertificatesResourceWithStreamingResponse: - def __init__(self, keyless_certificates: KeylessCertificatesResource) -> None: - self._keyless_certificates = keyless_certificates - - self.create = to_streamed_response_wrapper( - keyless_certificates.create, - ) - self.list = to_streamed_response_wrapper( - keyless_certificates.list, - ) - self.delete = to_streamed_response_wrapper( - keyless_certificates.delete, - ) - self.edit = to_streamed_response_wrapper( - keyless_certificates.edit, - ) - self.get = to_streamed_response_wrapper( - keyless_certificates.get, - ) - - -class AsyncKeylessCertificatesResourceWithStreamingResponse: - def __init__(self, keyless_certificates: AsyncKeylessCertificatesResource) -> None: - self._keyless_certificates = keyless_certificates - - self.create = async_to_streamed_response_wrapper( - keyless_certificates.create, - ) - self.list = async_to_streamed_response_wrapper( - keyless_certificates.list, - ) - self.delete = async_to_streamed_response_wrapper( - keyless_certificates.delete, - ) - self.edit = async_to_streamed_response_wrapper( - keyless_certificates.edit, - ) - self.get = async_to_streamed_response_wrapper( - keyless_certificates.get, - ) From 57ad613a1365deb5e712b02b53b1501643e10b15 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:55:16 -0500 Subject: [PATCH 20/27] chore(managed_transforms): update generated types and methods --- .../resources/managed_transforms.py | 381 ------------------ 1 file changed, 381 deletions(-) delete mode 100644 src/cloudflare/resources/managed_transforms.py diff --git a/src/cloudflare/resources/managed_transforms.py b/src/cloudflare/resources/managed_transforms.py deleted file mode 100644 index 1b70c745c06..00000000000 --- a/src/cloudflare/resources/managed_transforms.py +++ /dev/null @@ -1,381 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Type, Iterable, cast - -import httpx - -from .._types import Body, Query, Headers, NoneType, NotGiven, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from .._base_client import make_request_options -from ..types.managed_transforms import managed_transform_edit_params -from ..types.managed_transforms.managed_transform_edit_response import ManagedTransformEditResponse -from ..types.managed_transforms.managed_transform_list_response import ManagedTransformListResponse - -__all__ = ["ManagedTransformsResource", "AsyncManagedTransformsResource"] - - -class ManagedTransformsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> ManagedTransformsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return ManagedTransformsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> ManagedTransformsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return ManagedTransformsResourceWithStreamingResponse(self) - - def list( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ManagedTransformListResponse: - """ - Fetches a list of all Managed Transforms. - - Args: - zone_id: The unique ID of the zone. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get( - f"/zones/{zone_id}/managed_headers", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[ManagedTransformListResponse]._unwrapper, - ), - cast_to=cast(Type[ManagedTransformListResponse], ResultWrapper[ManagedTransformListResponse]), - ) - - def delete( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> None: - """ - Disables all Managed Transforms. - - Args: - zone_id: The unique ID of the zone. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - extra_headers = {"Accept": "*/*", **(extra_headers or {})} - return self._delete( - f"/zones/{zone_id}/managed_headers", - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=NoneType, - ) - - def edit( - self, - *, - zone_id: str, - managed_request_headers: Iterable[managed_transform_edit_params.ManagedRequestHeader], - managed_response_headers: Iterable[managed_transform_edit_params.ManagedResponseHeader], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ManagedTransformEditResponse: - """ - Updates the status of one or more Managed Transforms. - - Args: - zone_id: The unique ID of the zone. - - managed_request_headers: The list of Managed Request Transforms. - - managed_response_headers: The list of Managed Response Transforms. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._patch( - f"/zones/{zone_id}/managed_headers", - body=maybe_transform( - { - "managed_request_headers": managed_request_headers, - "managed_response_headers": managed_response_headers, - }, - managed_transform_edit_params.ManagedTransformEditParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[ManagedTransformEditResponse]._unwrapper, - ), - cast_to=cast(Type[ManagedTransformEditResponse], ResultWrapper[ManagedTransformEditResponse]), - ) - - -class AsyncManagedTransformsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncManagedTransformsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncManagedTransformsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncManagedTransformsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncManagedTransformsResourceWithStreamingResponse(self) - - async def list( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ManagedTransformListResponse: - """ - Fetches a list of all Managed Transforms. - - Args: - zone_id: The unique ID of the zone. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._get( - f"/zones/{zone_id}/managed_headers", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[ManagedTransformListResponse]._unwrapper, - ), - cast_to=cast(Type[ManagedTransformListResponse], ResultWrapper[ManagedTransformListResponse]), - ) - - async def delete( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> None: - """ - Disables all Managed Transforms. - - Args: - zone_id: The unique ID of the zone. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - extra_headers = {"Accept": "*/*", **(extra_headers or {})} - return await self._delete( - f"/zones/{zone_id}/managed_headers", - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=NoneType, - ) - - async def edit( - self, - *, - zone_id: str, - managed_request_headers: Iterable[managed_transform_edit_params.ManagedRequestHeader], - managed_response_headers: Iterable[managed_transform_edit_params.ManagedResponseHeader], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> ManagedTransformEditResponse: - """ - Updates the status of one or more Managed Transforms. - - Args: - zone_id: The unique ID of the zone. - - managed_request_headers: The list of Managed Request Transforms. - - managed_response_headers: The list of Managed Response Transforms. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._patch( - f"/zones/{zone_id}/managed_headers", - body=await async_maybe_transform( - { - "managed_request_headers": managed_request_headers, - "managed_response_headers": managed_response_headers, - }, - managed_transform_edit_params.ManagedTransformEditParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[ManagedTransformEditResponse]._unwrapper, - ), - cast_to=cast(Type[ManagedTransformEditResponse], ResultWrapper[ManagedTransformEditResponse]), - ) - - -class ManagedTransformsResourceWithRawResponse: - def __init__(self, managed_transforms: ManagedTransformsResource) -> None: - self._managed_transforms = managed_transforms - - self.list = to_raw_response_wrapper( - managed_transforms.list, - ) - self.delete = to_raw_response_wrapper( - managed_transforms.delete, - ) - self.edit = to_raw_response_wrapper( - managed_transforms.edit, - ) - - -class AsyncManagedTransformsResourceWithRawResponse: - def __init__(self, managed_transforms: AsyncManagedTransformsResource) -> None: - self._managed_transforms = managed_transforms - - self.list = async_to_raw_response_wrapper( - managed_transforms.list, - ) - self.delete = async_to_raw_response_wrapper( - managed_transforms.delete, - ) - self.edit = async_to_raw_response_wrapper( - managed_transforms.edit, - ) - - -class ManagedTransformsResourceWithStreamingResponse: - def __init__(self, managed_transforms: ManagedTransformsResource) -> None: - self._managed_transforms = managed_transforms - - self.list = to_streamed_response_wrapper( - managed_transforms.list, - ) - self.delete = to_streamed_response_wrapper( - managed_transforms.delete, - ) - self.edit = to_streamed_response_wrapper( - managed_transforms.edit, - ) - - -class AsyncManagedTransformsResourceWithStreamingResponse: - def __init__(self, managed_transforms: AsyncManagedTransformsResource) -> None: - self._managed_transforms = managed_transforms - - self.list = async_to_streamed_response_wrapper( - managed_transforms.list, - ) - self.delete = async_to_streamed_response_wrapper( - managed_transforms.delete, - ) - self.edit = async_to_streamed_response_wrapper( - managed_transforms.edit, - ) From 5b4517a05f1fb0052183c66beb3c7a194cc40558 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:55:46 -0500 Subject: [PATCH 21/27] chore(memberships): update generated types and methods --- src/cloudflare/resources/memberships.py | 515 ------------------------ 1 file changed, 515 deletions(-) delete mode 100644 src/cloudflare/resources/memberships.py diff --git a/src/cloudflare/resources/memberships.py b/src/cloudflare/resources/memberships.py deleted file mode 100644 index 1bc6e6ba7b3..00000000000 --- a/src/cloudflare/resources/memberships.py +++ /dev/null @@ -1,515 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Type, Optional, cast -from typing_extensions import Literal - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from ..pagination import SyncV4PagePaginationArray, AsyncV4PagePaginationArray -from .._base_client import AsyncPaginator, make_request_options -from ..types.memberships import membership_list_params, membership_update_params -from ..types.memberships.membership import Membership -from ..types.memberships.membership_get_response import MembershipGetResponse -from ..types.memberships.membership_delete_response import MembershipDeleteResponse -from ..types.memberships.membership_update_response import MembershipUpdateResponse - -__all__ = ["MembershipsResource", "AsyncMembershipsResource"] - - -class MembershipsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> MembershipsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return MembershipsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> MembershipsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return MembershipsResourceWithStreamingResponse(self) - - def update( - self, - membership_id: str, - *, - status: Literal["accepted", "rejected"], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[MembershipUpdateResponse]: - """ - Accept or reject this account invitation. - - Args: - membership_id: Membership identifier tag. - - status: Whether to accept or reject this account invitation. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not membership_id: - raise ValueError(f"Expected a non-empty value for `membership_id` but received {membership_id!r}") - return self._put( - f"/memberships/{membership_id}", - body=maybe_transform({"status": status}, membership_update_params.MembershipUpdateParams), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[MembershipUpdateResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[MembershipUpdateResponse]], ResultWrapper[MembershipUpdateResponse]), - ) - - def list( - self, - *, - account: membership_list_params.Account | Omit = omit, - direction: Literal["asc", "desc"] | Omit = omit, - name: str | Omit = omit, - order: Literal["id", "account.name", "status"] | Omit = omit, - page: float | Omit = omit, - per_page: float | Omit = omit, - status: Literal["accepted", "pending", "rejected"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncV4PagePaginationArray[Membership]: - """ - List memberships of accounts the user can access. - - Args: - direction: Direction to order memberships. - - name: Account name - - order: Field to order memberships by. - - page: Page number of paginated results. - - per_page: Number of memberships per page. - - status: Status of this membership. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._get_api_list( - "/memberships", - page=SyncV4PagePaginationArray[Membership], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "account": account, - "direction": direction, - "name": name, - "order": order, - "page": page, - "per_page": per_page, - "status": status, - }, - membership_list_params.MembershipListParams, - ), - ), - model=Membership, - ) - - def delete( - self, - membership_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[MembershipDeleteResponse]: - """ - Remove the associated member from an account. - - Args: - membership_id: Membership identifier tag. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not membership_id: - raise ValueError(f"Expected a non-empty value for `membership_id` but received {membership_id!r}") - return self._delete( - f"/memberships/{membership_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[MembershipDeleteResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[MembershipDeleteResponse]], ResultWrapper[MembershipDeleteResponse]), - ) - - def get( - self, - membership_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[MembershipGetResponse]: - """ - Get a specific membership. - - Args: - membership_id: Membership identifier tag. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not membership_id: - raise ValueError(f"Expected a non-empty value for `membership_id` but received {membership_id!r}") - return self._get( - f"/memberships/{membership_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[MembershipGetResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[MembershipGetResponse]], ResultWrapper[MembershipGetResponse]), - ) - - -class AsyncMembershipsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncMembershipsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncMembershipsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncMembershipsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncMembershipsResourceWithStreamingResponse(self) - - async def update( - self, - membership_id: str, - *, - status: Literal["accepted", "rejected"], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[MembershipUpdateResponse]: - """ - Accept or reject this account invitation. - - Args: - membership_id: Membership identifier tag. - - status: Whether to accept or reject this account invitation. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not membership_id: - raise ValueError(f"Expected a non-empty value for `membership_id` but received {membership_id!r}") - return await self._put( - f"/memberships/{membership_id}", - body=await async_maybe_transform({"status": status}, membership_update_params.MembershipUpdateParams), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[MembershipUpdateResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[MembershipUpdateResponse]], ResultWrapper[MembershipUpdateResponse]), - ) - - def list( - self, - *, - account: membership_list_params.Account | Omit = omit, - direction: Literal["asc", "desc"] | Omit = omit, - name: str | Omit = omit, - order: Literal["id", "account.name", "status"] | Omit = omit, - page: float | Omit = omit, - per_page: float | Omit = omit, - status: Literal["accepted", "pending", "rejected"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[Membership, AsyncV4PagePaginationArray[Membership]]: - """ - List memberships of accounts the user can access. - - Args: - direction: Direction to order memberships. - - name: Account name - - order: Field to order memberships by. - - page: Page number of paginated results. - - per_page: Number of memberships per page. - - status: Status of this membership. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._get_api_list( - "/memberships", - page=AsyncV4PagePaginationArray[Membership], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "account": account, - "direction": direction, - "name": name, - "order": order, - "page": page, - "per_page": per_page, - "status": status, - }, - membership_list_params.MembershipListParams, - ), - ), - model=Membership, - ) - - async def delete( - self, - membership_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[MembershipDeleteResponse]: - """ - Remove the associated member from an account. - - Args: - membership_id: Membership identifier tag. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not membership_id: - raise ValueError(f"Expected a non-empty value for `membership_id` but received {membership_id!r}") - return await self._delete( - f"/memberships/{membership_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[MembershipDeleteResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[MembershipDeleteResponse]], ResultWrapper[MembershipDeleteResponse]), - ) - - async def get( - self, - membership_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[MembershipGetResponse]: - """ - Get a specific membership. - - Args: - membership_id: Membership identifier tag. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not membership_id: - raise ValueError(f"Expected a non-empty value for `membership_id` but received {membership_id!r}") - return await self._get( - f"/memberships/{membership_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[MembershipGetResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[MembershipGetResponse]], ResultWrapper[MembershipGetResponse]), - ) - - -class MembershipsResourceWithRawResponse: - def __init__(self, memberships: MembershipsResource) -> None: - self._memberships = memberships - - self.update = to_raw_response_wrapper( - memberships.update, - ) - self.list = to_raw_response_wrapper( - memberships.list, - ) - self.delete = to_raw_response_wrapper( - memberships.delete, - ) - self.get = to_raw_response_wrapper( - memberships.get, - ) - - -class AsyncMembershipsResourceWithRawResponse: - def __init__(self, memberships: AsyncMembershipsResource) -> None: - self._memberships = memberships - - self.update = async_to_raw_response_wrapper( - memberships.update, - ) - self.list = async_to_raw_response_wrapper( - memberships.list, - ) - self.delete = async_to_raw_response_wrapper( - memberships.delete, - ) - self.get = async_to_raw_response_wrapper( - memberships.get, - ) - - -class MembershipsResourceWithStreamingResponse: - def __init__(self, memberships: MembershipsResource) -> None: - self._memberships = memberships - - self.update = to_streamed_response_wrapper( - memberships.update, - ) - self.list = to_streamed_response_wrapper( - memberships.list, - ) - self.delete = to_streamed_response_wrapper( - memberships.delete, - ) - self.get = to_streamed_response_wrapper( - memberships.get, - ) - - -class AsyncMembershipsResourceWithStreamingResponse: - def __init__(self, memberships: AsyncMembershipsResource) -> None: - self._memberships = memberships - - self.update = async_to_streamed_response_wrapper( - memberships.update, - ) - self.list = async_to_streamed_response_wrapper( - memberships.list, - ) - self.delete = async_to_streamed_response_wrapper( - memberships.delete, - ) - self.get = async_to_streamed_response_wrapper( - memberships.get, - ) From 9a5c08b077cae22d706e4046b4d8f812265b52e2 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:56:15 -0500 Subject: [PATCH 22/27] chore(origin_ca_certificates): update generated types and methods --- .../resources/origin_ca_certificates.py | 569 ------------------ 1 file changed, 569 deletions(-) delete mode 100644 src/cloudflare/resources/origin_ca_certificates.py diff --git a/src/cloudflare/resources/origin_ca_certificates.py b/src/cloudflare/resources/origin_ca_certificates.py deleted file mode 100644 index 1943091279a..00000000000 --- a/src/cloudflare/resources/origin_ca_certificates.py +++ /dev/null @@ -1,569 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Type, Optional, cast - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from ..types.ssl import RequestValidity -from ..pagination import SyncV4PagePaginationArray, AsyncV4PagePaginationArray -from .._base_client import AsyncPaginator, make_request_options -from ..types.ssl.request_validity import RequestValidity -from ..types.origin_ca_certificates import origin_ca_certificate_list_params, origin_ca_certificate_create_params -from ..types.shared.certificate_request_type import CertificateRequestType -from ..types.origin_ca_certificates.origin_ca_certificate import OriginCACertificate -from ..types.origin_ca_certificates.origin_ca_certificate_delete_response import OriginCACertificateDeleteResponse - -__all__ = ["OriginCACertificatesResource", "AsyncOriginCACertificatesResource"] - - -class OriginCACertificatesResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> OriginCACertificatesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return OriginCACertificatesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> OriginCACertificatesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return OriginCACertificatesResourceWithStreamingResponse(self) - - def create( - self, - *, - csr: str, - hostnames: SequenceNotStr[str], - request_type: CertificateRequestType, - requested_validity: RequestValidity | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[OriginCACertificate]: - """Create an Origin CA certificate. - - You can use an Origin CA Key as your User - Service Key or an API token when calling this endpoint ([see above](#requests)). - - Args: - csr: The Certificate Signing Request (CSR). Must be newline-encoded. - - hostnames: Array of hostnames or wildcard names bound to the certificate. Hostnames must be - fully qualified domain names (FQDNs) belonging to zones on your account (e.g., - `example.com` or `sub.example.com`). Wildcards are supported only as a `*.` - prefix for a single level (e.g., `*.example.com`). Double wildcards - (`*.*.example.com`) and interior wildcards (`foo.*.example.com`) are not - allowed. The wildcard suffix must be a multi-label domain (`*.example.com` is - valid, but `*.com` is not). Unicode/IDN hostnames are accepted and automatically - converted to punycode. - - request_type: Signature type desired on certificate ("origin-rsa" (rsa), "origin-ecc" (ecdsa), - or "keyless-certificate" (for Keyless SSL servers). - - requested_validity: The number of days for which the certificate should be valid. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._post( - "/certificates", - body=maybe_transform( - { - "csr": csr, - "hostnames": hostnames, - "request_type": request_type, - "requested_validity": requested_validity, - }, - origin_ca_certificate_create_params.OriginCACertificateCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[OriginCACertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[OriginCACertificate]], ResultWrapper[OriginCACertificate]), - ) - - def list( - self, - *, - zone_id: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - page: float | Omit = omit, - per_page: float | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncV4PagePaginationArray[OriginCACertificate]: - """List all existing Origin CA certificates for a given zone. - - You can use an Origin - CA Key as your User Service Key or an API token when calling this endpoint - ([see above](#requests)). - - Args: - zone_id: Identifier. - - limit: Limit to the number of records returned. - - offset: Offset the results - - page: Page number of paginated results. - - per_page: Number of records per page. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._get_api_list( - "/certificates", - page=SyncV4PagePaginationArray[OriginCACertificate], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "zone_id": zone_id, - "limit": limit, - "offset": offset, - "page": page, - "per_page": per_page, - }, - origin_ca_certificate_list_params.OriginCACertificateListParams, - ), - ), - model=OriginCACertificate, - ) - - def delete( - self, - certificate_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[OriginCACertificateDeleteResponse]: - """Revoke an existing Origin CA certificate by its serial number. - - You can use an - Origin CA Key as your User Service Key or an API token when calling this - endpoint ([see above](#requests)). - - Args: - certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not certificate_id: - raise ValueError(f"Expected a non-empty value for `certificate_id` but received {certificate_id!r}") - return self._delete( - f"/certificates/{certificate_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[OriginCACertificateDeleteResponse]]._unwrapper, - ), - cast_to=cast( - Type[Optional[OriginCACertificateDeleteResponse]], ResultWrapper[OriginCACertificateDeleteResponse] - ), - ) - - def get( - self, - certificate_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[OriginCACertificate]: - """Get an existing Origin CA certificate by its serial number. - - You can use an - Origin CA Key as your User Service Key or an API token when calling this - endpoint ([see above](#requests)). - - Args: - certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not certificate_id: - raise ValueError(f"Expected a non-empty value for `certificate_id` but received {certificate_id!r}") - return self._get( - f"/certificates/{certificate_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[OriginCACertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[OriginCACertificate]], ResultWrapper[OriginCACertificate]), - ) - - -class AsyncOriginCACertificatesResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncOriginCACertificatesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncOriginCACertificatesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncOriginCACertificatesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncOriginCACertificatesResourceWithStreamingResponse(self) - - async def create( - self, - *, - csr: str, - hostnames: SequenceNotStr[str], - request_type: CertificateRequestType, - requested_validity: RequestValidity | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[OriginCACertificate]: - """Create an Origin CA certificate. - - You can use an Origin CA Key as your User - Service Key or an API token when calling this endpoint ([see above](#requests)). - - Args: - csr: The Certificate Signing Request (CSR). Must be newline-encoded. - - hostnames: Array of hostnames or wildcard names bound to the certificate. Hostnames must be - fully qualified domain names (FQDNs) belonging to zones on your account (e.g., - `example.com` or `sub.example.com`). Wildcards are supported only as a `*.` - prefix for a single level (e.g., `*.example.com`). Double wildcards - (`*.*.example.com`) and interior wildcards (`foo.*.example.com`) are not - allowed. The wildcard suffix must be a multi-label domain (`*.example.com` is - valid, but `*.com` is not). Unicode/IDN hostnames are accepted and automatically - converted to punycode. - - request_type: Signature type desired on certificate ("origin-rsa" (rsa), "origin-ecc" (ecdsa), - or "keyless-certificate" (for Keyless SSL servers). - - requested_validity: The number of days for which the certificate should be valid. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return await self._post( - "/certificates", - body=await async_maybe_transform( - { - "csr": csr, - "hostnames": hostnames, - "request_type": request_type, - "requested_validity": requested_validity, - }, - origin_ca_certificate_create_params.OriginCACertificateCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[OriginCACertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[OriginCACertificate]], ResultWrapper[OriginCACertificate]), - ) - - def list( - self, - *, - zone_id: str, - limit: int | Omit = omit, - offset: int | Omit = omit, - page: float | Omit = omit, - per_page: float | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[OriginCACertificate, AsyncV4PagePaginationArray[OriginCACertificate]]: - """List all existing Origin CA certificates for a given zone. - - You can use an Origin - CA Key as your User Service Key or an API token when calling this endpoint - ([see above](#requests)). - - Args: - zone_id: Identifier. - - limit: Limit to the number of records returned. - - offset: Offset the results - - page: Page number of paginated results. - - per_page: Number of records per page. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - return self._get_api_list( - "/certificates", - page=AsyncV4PagePaginationArray[OriginCACertificate], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "zone_id": zone_id, - "limit": limit, - "offset": offset, - "page": page, - "per_page": per_page, - }, - origin_ca_certificate_list_params.OriginCACertificateListParams, - ), - ), - model=OriginCACertificate, - ) - - async def delete( - self, - certificate_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[OriginCACertificateDeleteResponse]: - """Revoke an existing Origin CA certificate by its serial number. - - You can use an - Origin CA Key as your User Service Key or an API token when calling this - endpoint ([see above](#requests)). - - Args: - certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not certificate_id: - raise ValueError(f"Expected a non-empty value for `certificate_id` but received {certificate_id!r}") - return await self._delete( - f"/certificates/{certificate_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[OriginCACertificateDeleteResponse]]._unwrapper, - ), - cast_to=cast( - Type[Optional[OriginCACertificateDeleteResponse]], ResultWrapper[OriginCACertificateDeleteResponse] - ), - ) - - async def get( - self, - certificate_id: str, - *, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[OriginCACertificate]: - """Get an existing Origin CA certificate by its serial number. - - You can use an - Origin CA Key as your User Service Key or an API token when calling this - endpoint ([see above](#requests)). - - Args: - certificate_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not certificate_id: - raise ValueError(f"Expected a non-empty value for `certificate_id` but received {certificate_id!r}") - return await self._get( - f"/certificates/{certificate_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[OriginCACertificate]]._unwrapper, - ), - cast_to=cast(Type[Optional[OriginCACertificate]], ResultWrapper[OriginCACertificate]), - ) - - -class OriginCACertificatesResourceWithRawResponse: - def __init__(self, origin_ca_certificates: OriginCACertificatesResource) -> None: - self._origin_ca_certificates = origin_ca_certificates - - self.create = to_raw_response_wrapper( - origin_ca_certificates.create, - ) - self.list = to_raw_response_wrapper( - origin_ca_certificates.list, - ) - self.delete = to_raw_response_wrapper( - origin_ca_certificates.delete, - ) - self.get = to_raw_response_wrapper( - origin_ca_certificates.get, - ) - - -class AsyncOriginCACertificatesResourceWithRawResponse: - def __init__(self, origin_ca_certificates: AsyncOriginCACertificatesResource) -> None: - self._origin_ca_certificates = origin_ca_certificates - - self.create = async_to_raw_response_wrapper( - origin_ca_certificates.create, - ) - self.list = async_to_raw_response_wrapper( - origin_ca_certificates.list, - ) - self.delete = async_to_raw_response_wrapper( - origin_ca_certificates.delete, - ) - self.get = async_to_raw_response_wrapper( - origin_ca_certificates.get, - ) - - -class OriginCACertificatesResourceWithStreamingResponse: - def __init__(self, origin_ca_certificates: OriginCACertificatesResource) -> None: - self._origin_ca_certificates = origin_ca_certificates - - self.create = to_streamed_response_wrapper( - origin_ca_certificates.create, - ) - self.list = to_streamed_response_wrapper( - origin_ca_certificates.list, - ) - self.delete = to_streamed_response_wrapper( - origin_ca_certificates.delete, - ) - self.get = to_streamed_response_wrapper( - origin_ca_certificates.get, - ) - - -class AsyncOriginCACertificatesResourceWithStreamingResponse: - def __init__(self, origin_ca_certificates: AsyncOriginCACertificatesResource) -> None: - self._origin_ca_certificates = origin_ca_certificates - - self.create = async_to_streamed_response_wrapper( - origin_ca_certificates.create, - ) - self.list = async_to_streamed_response_wrapper( - origin_ca_certificates.list, - ) - self.delete = async_to_streamed_response_wrapper( - origin_ca_certificates.delete, - ) - self.get = async_to_streamed_response_wrapper( - origin_ca_certificates.get, - ) From 638e8592227c6280ffeccff33f3f86f8d4586726 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:56:44 -0500 Subject: [PATCH 23/27] chore(origin_post_quantum_encryption): update generated types and methods --- .../origin_post_quantum_encryption.py | 320 ------------------ 1 file changed, 320 deletions(-) delete mode 100644 src/cloudflare/resources/origin_post_quantum_encryption.py diff --git a/src/cloudflare/resources/origin_post_quantum_encryption.py b/src/cloudflare/resources/origin_post_quantum_encryption.py deleted file mode 100644 index d049002bc21..00000000000 --- a/src/cloudflare/resources/origin_post_quantum_encryption.py +++ /dev/null @@ -1,320 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Type, Optional, cast -from typing_extensions import Literal - -import httpx - -from .._types import Body, Query, Headers, NotGiven, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from .._base_client import make_request_options -from ..types.origin_post_quantum_encryption import origin_post_quantum_encryption_update_params -from ..types.origin_post_quantum_encryption.origin_post_quantum_encryption_get_response import ( - OriginPostQuantumEncryptionGetResponse, -) -from ..types.origin_post_quantum_encryption.origin_post_quantum_encryption_update_response import ( - OriginPostQuantumEncryptionUpdateResponse, -) - -__all__ = ["OriginPostQuantumEncryptionResource", "AsyncOriginPostQuantumEncryptionResource"] - - -class OriginPostQuantumEncryptionResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> OriginPostQuantumEncryptionResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return OriginPostQuantumEncryptionResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> OriginPostQuantumEncryptionResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return OriginPostQuantumEncryptionResourceWithStreamingResponse(self) - - def update( - self, - *, - zone_id: str, - value: Literal["preferred", "supported", "off"], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[OriginPostQuantumEncryptionUpdateResponse]: - """ - Instructs Cloudflare to use Post-Quantum (PQ) key agreement algorithms when - connecting to your origin. Preferred instructs Cloudflare to opportunistically - send a Post-Quantum keyshare in the first message to the origin (for fastest - connections when the origin supports and prefers PQ), supported means that PQ - algorithms are advertised but only used when requested by the origin, and off - means that PQ algorithms are not advertised. - - Args: - zone_id: Identifier. - - value: Value of the Origin Post Quantum Encryption Setting. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._put( - f"/zones/{zone_id}/cache/origin_post_quantum_encryption", - body=maybe_transform( - {"value": value}, origin_post_quantum_encryption_update_params.OriginPostQuantumEncryptionUpdateParams - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[OriginPostQuantumEncryptionUpdateResponse]]._unwrapper, - ), - cast_to=cast( - Type[Optional[OriginPostQuantumEncryptionUpdateResponse]], - ResultWrapper[OriginPostQuantumEncryptionUpdateResponse], - ), - ) - - def get( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[OriginPostQuantumEncryptionGetResponse]: - """ - Instructs Cloudflare to use Post-Quantum (PQ) key agreement algorithms when - connecting to your origin. Preferred instructs Cloudflare to opportunistically - send a Post-Quantum keyshare in the first message to the origin (for fastest - connections when the origin supports and prefers PQ), supported means that PQ - algorithms are advertised but only used when requested by the origin, and off - means that PQ algorithms are not advertised. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get( - f"/zones/{zone_id}/cache/origin_post_quantum_encryption", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[OriginPostQuantumEncryptionGetResponse]]._unwrapper, - ), - cast_to=cast( - Type[Optional[OriginPostQuantumEncryptionGetResponse]], - ResultWrapper[OriginPostQuantumEncryptionGetResponse], - ), - ) - - -class AsyncOriginPostQuantumEncryptionResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncOriginPostQuantumEncryptionResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncOriginPostQuantumEncryptionResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncOriginPostQuantumEncryptionResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncOriginPostQuantumEncryptionResourceWithStreamingResponse(self) - - async def update( - self, - *, - zone_id: str, - value: Literal["preferred", "supported", "off"], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[OriginPostQuantumEncryptionUpdateResponse]: - """ - Instructs Cloudflare to use Post-Quantum (PQ) key agreement algorithms when - connecting to your origin. Preferred instructs Cloudflare to opportunistically - send a Post-Quantum keyshare in the first message to the origin (for fastest - connections when the origin supports and prefers PQ), supported means that PQ - algorithms are advertised but only used when requested by the origin, and off - means that PQ algorithms are not advertised. - - Args: - zone_id: Identifier. - - value: Value of the Origin Post Quantum Encryption Setting. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._put( - f"/zones/{zone_id}/cache/origin_post_quantum_encryption", - body=await async_maybe_transform( - {"value": value}, origin_post_quantum_encryption_update_params.OriginPostQuantumEncryptionUpdateParams - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[OriginPostQuantumEncryptionUpdateResponse]]._unwrapper, - ), - cast_to=cast( - Type[Optional[OriginPostQuantumEncryptionUpdateResponse]], - ResultWrapper[OriginPostQuantumEncryptionUpdateResponse], - ), - ) - - async def get( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[OriginPostQuantumEncryptionGetResponse]: - """ - Instructs Cloudflare to use Post-Quantum (PQ) key agreement algorithms when - connecting to your origin. Preferred instructs Cloudflare to opportunistically - send a Post-Quantum keyshare in the first message to the origin (for fastest - connections when the origin supports and prefers PQ), supported means that PQ - algorithms are advertised but only used when requested by the origin, and off - means that PQ algorithms are not advertised. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._get( - f"/zones/{zone_id}/cache/origin_post_quantum_encryption", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[OriginPostQuantumEncryptionGetResponse]]._unwrapper, - ), - cast_to=cast( - Type[Optional[OriginPostQuantumEncryptionGetResponse]], - ResultWrapper[OriginPostQuantumEncryptionGetResponse], - ), - ) - - -class OriginPostQuantumEncryptionResourceWithRawResponse: - def __init__(self, origin_post_quantum_encryption: OriginPostQuantumEncryptionResource) -> None: - self._origin_post_quantum_encryption = origin_post_quantum_encryption - - self.update = to_raw_response_wrapper( - origin_post_quantum_encryption.update, - ) - self.get = to_raw_response_wrapper( - origin_post_quantum_encryption.get, - ) - - -class AsyncOriginPostQuantumEncryptionResourceWithRawResponse: - def __init__(self, origin_post_quantum_encryption: AsyncOriginPostQuantumEncryptionResource) -> None: - self._origin_post_quantum_encryption = origin_post_quantum_encryption - - self.update = async_to_raw_response_wrapper( - origin_post_quantum_encryption.update, - ) - self.get = async_to_raw_response_wrapper( - origin_post_quantum_encryption.get, - ) - - -class OriginPostQuantumEncryptionResourceWithStreamingResponse: - def __init__(self, origin_post_quantum_encryption: OriginPostQuantumEncryptionResource) -> None: - self._origin_post_quantum_encryption = origin_post_quantum_encryption - - self.update = to_streamed_response_wrapper( - origin_post_quantum_encryption.update, - ) - self.get = to_streamed_response_wrapper( - origin_post_quantum_encryption.get, - ) - - -class AsyncOriginPostQuantumEncryptionResourceWithStreamingResponse: - def __init__(self, origin_post_quantum_encryption: AsyncOriginPostQuantumEncryptionResource) -> None: - self._origin_post_quantum_encryption = origin_post_quantum_encryption - - self.update = async_to_streamed_response_wrapper( - origin_post_quantum_encryption.update, - ) - self.get = async_to_streamed_response_wrapper( - origin_post_quantum_encryption.get, - ) From 87fdd6817b6461079177c000adb68860e1d2c0f5 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:57:15 -0500 Subject: [PATCH 24/27] chore(page_rules): update generated types and methods --- src/cloudflare/resources/page_rules.py | 883 ------------------------- 1 file changed, 883 deletions(-) delete mode 100644 src/cloudflare/resources/page_rules.py diff --git a/src/cloudflare/resources/page_rules.py b/src/cloudflare/resources/page_rules.py deleted file mode 100644 index d687a14e8c0..00000000000 --- a/src/cloudflare/resources/page_rules.py +++ /dev/null @@ -1,883 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Type, Iterable, Optional, cast -from typing_extensions import Literal - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from .._base_client import make_request_options -from ..types.page_rules import ( - page_rule_edit_params, - page_rule_list_params, - page_rule_create_params, - page_rule_update_params, -) -from ..types.page_rules.page_rule import PageRule -from ..types.page_rules.target_param import TargetParam -from ..types.page_rules.page_rule_list_response import PageRuleListResponse -from ..types.page_rules.page_rule_delete_response import PageRuleDeleteResponse - -__all__ = ["PageRulesResource", "AsyncPageRulesResource"] - - -class PageRulesResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> PageRulesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return PageRulesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> PageRulesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return PageRulesResourceWithStreamingResponse(self) - - def create( - self, - *, - zone_id: str, - actions: Iterable[page_rule_create_params.Action], - targets: Iterable[TargetParam], - priority: int | Omit = omit, - status: Literal["active", "disabled"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[PageRule]: - """ - Creates a new Page Rule. - - Args: - zone_id: Identifier. - - actions: The set of actions to perform if the targets of this rule match the request. - Actions can redirect to another URL or override settings, but not both. - - targets: The rule targets to evaluate on each request. - - priority: The priority of the rule, used to define which Page Rule is processed over - another. A higher number indicates a higher priority. For example, if you have a - catch-all Page Rule (rule A: `/images/*`) but want a more specific Page Rule to - take precedence (rule B: `/images/special/*`), specify a higher priority for - rule B so it overrides rule A. - - status: The status of the Page Rule. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._post( - f"/zones/{zone_id}/pagerules", - body=maybe_transform( - { - "actions": actions, - "targets": targets, - "priority": priority, - "status": status, - }, - page_rule_create_params.PageRuleCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[PageRule]]._unwrapper, - ), - cast_to=cast(Type[Optional[PageRule]], ResultWrapper[PageRule]), - ) - - def update( - self, - pagerule_id: str, - *, - zone_id: str, - actions: Iterable[page_rule_update_params.Action], - targets: Iterable[TargetParam], - priority: int | Omit = omit, - status: Literal["active", "disabled"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[PageRule]: - """Replaces the configuration of an existing Page Rule. - - The configuration of the - updated Page Rule will exactly match the data passed in the API request. - - Args: - zone_id: Identifier. - - pagerule_id: Identifier. - - actions: The set of actions to perform if the targets of this rule match the request. - Actions can redirect to another URL or override settings, but not both. - - targets: The rule targets to evaluate on each request. - - priority: The priority of the rule, used to define which Page Rule is processed over - another. A higher number indicates a higher priority. For example, if you have a - catch-all Page Rule (rule A: `/images/*`) but want a more specific Page Rule to - take precedence (rule B: `/images/special/*`), specify a higher priority for - rule B so it overrides rule A. - - status: The status of the Page Rule. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not pagerule_id: - raise ValueError(f"Expected a non-empty value for `pagerule_id` but received {pagerule_id!r}") - return self._put( - f"/zones/{zone_id}/pagerules/{pagerule_id}", - body=maybe_transform( - { - "actions": actions, - "targets": targets, - "priority": priority, - "status": status, - }, - page_rule_update_params.PageRuleUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[PageRule]]._unwrapper, - ), - cast_to=cast(Type[Optional[PageRule]], ResultWrapper[PageRule]), - ) - - def list( - self, - *, - zone_id: str, - direction: Literal["asc", "desc"] | Omit = omit, - match: Literal["any", "all"] | Omit = omit, - order: Literal["status", "priority"] | Omit = omit, - status: Literal["active", "disabled"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[PageRuleListResponse]: - """ - Fetches Page Rules in a zone. - - Args: - zone_id: Identifier. - - direction: The direction used to sort returned Page Rules. - - match: When set to `all`, all the search requirements must match. When set to `any`, - only one of the search requirements has to match. - - order: The field used to sort returned Page Rules. - - status: The status of the Page Rule. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get( - f"/zones/{zone_id}/pagerules", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "direction": direction, - "match": match, - "order": order, - "status": status, - }, - page_rule_list_params.PageRuleListParams, - ), - post_parser=ResultWrapper[Optional[PageRuleListResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[PageRuleListResponse]], ResultWrapper[PageRuleListResponse]), - ) - - def delete( - self, - pagerule_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[PageRuleDeleteResponse]: - """ - Deletes an existing Page Rule. - - Args: - zone_id: Identifier. - - pagerule_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not pagerule_id: - raise ValueError(f"Expected a non-empty value for `pagerule_id` but received {pagerule_id!r}") - return self._delete( - f"/zones/{zone_id}/pagerules/{pagerule_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[PageRuleDeleteResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[PageRuleDeleteResponse]], ResultWrapper[PageRuleDeleteResponse]), - ) - - def edit( - self, - pagerule_id: str, - *, - zone_id: str, - actions: Iterable[page_rule_edit_params.Action] | Omit = omit, - priority: int | Omit = omit, - status: Literal["active", "disabled"] | Omit = omit, - targets: Iterable[TargetParam] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[PageRule]: - """ - Updates one or more fields of an existing Page Rule. - - Args: - zone_id: Identifier. - - pagerule_id: Identifier. - - actions: The set of actions to perform if the targets of this rule match the request. - Actions can redirect to another URL or override settings, but not both. - - priority: The priority of the rule, used to define which Page Rule is processed over - another. A higher number indicates a higher priority. For example, if you have a - catch-all Page Rule (rule A: `/images/*`) but want a more specific Page Rule to - take precedence (rule B: `/images/special/*`), specify a higher priority for - rule B so it overrides rule A. - - status: The status of the Page Rule. - - targets: The rule targets to evaluate on each request. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not pagerule_id: - raise ValueError(f"Expected a non-empty value for `pagerule_id` but received {pagerule_id!r}") - return self._patch( - f"/zones/{zone_id}/pagerules/{pagerule_id}", - body=maybe_transform( - { - "actions": actions, - "priority": priority, - "status": status, - "targets": targets, - }, - page_rule_edit_params.PageRuleEditParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[PageRule]]._unwrapper, - ), - cast_to=cast(Type[Optional[PageRule]], ResultWrapper[PageRule]), - ) - - def get( - self, - pagerule_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[PageRule]: - """ - Fetches the details of a Page Rule. - - Args: - zone_id: Identifier. - - pagerule_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not pagerule_id: - raise ValueError(f"Expected a non-empty value for `pagerule_id` but received {pagerule_id!r}") - return self._get( - f"/zones/{zone_id}/pagerules/{pagerule_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[PageRule]]._unwrapper, - ), - cast_to=cast(Type[Optional[PageRule]], ResultWrapper[PageRule]), - ) - - -class AsyncPageRulesResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncPageRulesResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncPageRulesResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncPageRulesResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncPageRulesResourceWithStreamingResponse(self) - - async def create( - self, - *, - zone_id: str, - actions: Iterable[page_rule_create_params.Action], - targets: Iterable[TargetParam], - priority: int | Omit = omit, - status: Literal["active", "disabled"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[PageRule]: - """ - Creates a new Page Rule. - - Args: - zone_id: Identifier. - - actions: The set of actions to perform if the targets of this rule match the request. - Actions can redirect to another URL or override settings, but not both. - - targets: The rule targets to evaluate on each request. - - priority: The priority of the rule, used to define which Page Rule is processed over - another. A higher number indicates a higher priority. For example, if you have a - catch-all Page Rule (rule A: `/images/*`) but want a more specific Page Rule to - take precedence (rule B: `/images/special/*`), specify a higher priority for - rule B so it overrides rule A. - - status: The status of the Page Rule. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._post( - f"/zones/{zone_id}/pagerules", - body=await async_maybe_transform( - { - "actions": actions, - "targets": targets, - "priority": priority, - "status": status, - }, - page_rule_create_params.PageRuleCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[PageRule]]._unwrapper, - ), - cast_to=cast(Type[Optional[PageRule]], ResultWrapper[PageRule]), - ) - - async def update( - self, - pagerule_id: str, - *, - zone_id: str, - actions: Iterable[page_rule_update_params.Action], - targets: Iterable[TargetParam], - priority: int | Omit = omit, - status: Literal["active", "disabled"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[PageRule]: - """Replaces the configuration of an existing Page Rule. - - The configuration of the - updated Page Rule will exactly match the data passed in the API request. - - Args: - zone_id: Identifier. - - pagerule_id: Identifier. - - actions: The set of actions to perform if the targets of this rule match the request. - Actions can redirect to another URL or override settings, but not both. - - targets: The rule targets to evaluate on each request. - - priority: The priority of the rule, used to define which Page Rule is processed over - another. A higher number indicates a higher priority. For example, if you have a - catch-all Page Rule (rule A: `/images/*`) but want a more specific Page Rule to - take precedence (rule B: `/images/special/*`), specify a higher priority for - rule B so it overrides rule A. - - status: The status of the Page Rule. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not pagerule_id: - raise ValueError(f"Expected a non-empty value for `pagerule_id` but received {pagerule_id!r}") - return await self._put( - f"/zones/{zone_id}/pagerules/{pagerule_id}", - body=await async_maybe_transform( - { - "actions": actions, - "targets": targets, - "priority": priority, - "status": status, - }, - page_rule_update_params.PageRuleUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[PageRule]]._unwrapper, - ), - cast_to=cast(Type[Optional[PageRule]], ResultWrapper[PageRule]), - ) - - async def list( - self, - *, - zone_id: str, - direction: Literal["asc", "desc"] | Omit = omit, - match: Literal["any", "all"] | Omit = omit, - order: Literal["status", "priority"] | Omit = omit, - status: Literal["active", "disabled"] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[PageRuleListResponse]: - """ - Fetches Page Rules in a zone. - - Args: - zone_id: Identifier. - - direction: The direction used to sort returned Page Rules. - - match: When set to `all`, all the search requirements must match. When set to `any`, - only one of the search requirements has to match. - - order: The field used to sort returned Page Rules. - - status: The status of the Page Rule. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._get( - f"/zones/{zone_id}/pagerules", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=await async_maybe_transform( - { - "direction": direction, - "match": match, - "order": order, - "status": status, - }, - page_rule_list_params.PageRuleListParams, - ), - post_parser=ResultWrapper[Optional[PageRuleListResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[PageRuleListResponse]], ResultWrapper[PageRuleListResponse]), - ) - - async def delete( - self, - pagerule_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[PageRuleDeleteResponse]: - """ - Deletes an existing Page Rule. - - Args: - zone_id: Identifier. - - pagerule_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not pagerule_id: - raise ValueError(f"Expected a non-empty value for `pagerule_id` but received {pagerule_id!r}") - return await self._delete( - f"/zones/{zone_id}/pagerules/{pagerule_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[PageRuleDeleteResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[PageRuleDeleteResponse]], ResultWrapper[PageRuleDeleteResponse]), - ) - - async def edit( - self, - pagerule_id: str, - *, - zone_id: str, - actions: Iterable[page_rule_edit_params.Action] | Omit = omit, - priority: int | Omit = omit, - status: Literal["active", "disabled"] | Omit = omit, - targets: Iterable[TargetParam] | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[PageRule]: - """ - Updates one or more fields of an existing Page Rule. - - Args: - zone_id: Identifier. - - pagerule_id: Identifier. - - actions: The set of actions to perform if the targets of this rule match the request. - Actions can redirect to another URL or override settings, but not both. - - priority: The priority of the rule, used to define which Page Rule is processed over - another. A higher number indicates a higher priority. For example, if you have a - catch-all Page Rule (rule A: `/images/*`) but want a more specific Page Rule to - take precedence (rule B: `/images/special/*`), specify a higher priority for - rule B so it overrides rule A. - - status: The status of the Page Rule. - - targets: The rule targets to evaluate on each request. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not pagerule_id: - raise ValueError(f"Expected a non-empty value for `pagerule_id` but received {pagerule_id!r}") - return await self._patch( - f"/zones/{zone_id}/pagerules/{pagerule_id}", - body=await async_maybe_transform( - { - "actions": actions, - "priority": priority, - "status": status, - "targets": targets, - }, - page_rule_edit_params.PageRuleEditParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[PageRule]]._unwrapper, - ), - cast_to=cast(Type[Optional[PageRule]], ResultWrapper[PageRule]), - ) - - async def get( - self, - pagerule_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[PageRule]: - """ - Fetches the details of a Page Rule. - - Args: - zone_id: Identifier. - - pagerule_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not pagerule_id: - raise ValueError(f"Expected a non-empty value for `pagerule_id` but received {pagerule_id!r}") - return await self._get( - f"/zones/{zone_id}/pagerules/{pagerule_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[PageRule]]._unwrapper, - ), - cast_to=cast(Type[Optional[PageRule]], ResultWrapper[PageRule]), - ) - - -class PageRulesResourceWithRawResponse: - def __init__(self, page_rules: PageRulesResource) -> None: - self._page_rules = page_rules - - self.create = to_raw_response_wrapper( - page_rules.create, - ) - self.update = to_raw_response_wrapper( - page_rules.update, - ) - self.list = to_raw_response_wrapper( - page_rules.list, - ) - self.delete = to_raw_response_wrapper( - page_rules.delete, - ) - self.edit = to_raw_response_wrapper( - page_rules.edit, - ) - self.get = to_raw_response_wrapper( - page_rules.get, - ) - - -class AsyncPageRulesResourceWithRawResponse: - def __init__(self, page_rules: AsyncPageRulesResource) -> None: - self._page_rules = page_rules - - self.create = async_to_raw_response_wrapper( - page_rules.create, - ) - self.update = async_to_raw_response_wrapper( - page_rules.update, - ) - self.list = async_to_raw_response_wrapper( - page_rules.list, - ) - self.delete = async_to_raw_response_wrapper( - page_rules.delete, - ) - self.edit = async_to_raw_response_wrapper( - page_rules.edit, - ) - self.get = async_to_raw_response_wrapper( - page_rules.get, - ) - - -class PageRulesResourceWithStreamingResponse: - def __init__(self, page_rules: PageRulesResource) -> None: - self._page_rules = page_rules - - self.create = to_streamed_response_wrapper( - page_rules.create, - ) - self.update = to_streamed_response_wrapper( - page_rules.update, - ) - self.list = to_streamed_response_wrapper( - page_rules.list, - ) - self.delete = to_streamed_response_wrapper( - page_rules.delete, - ) - self.edit = to_streamed_response_wrapper( - page_rules.edit, - ) - self.get = to_streamed_response_wrapper( - page_rules.get, - ) - - -class AsyncPageRulesResourceWithStreamingResponse: - def __init__(self, page_rules: AsyncPageRulesResource) -> None: - self._page_rules = page_rules - - self.create = async_to_streamed_response_wrapper( - page_rules.create, - ) - self.update = async_to_streamed_response_wrapper( - page_rules.update, - ) - self.list = async_to_streamed_response_wrapper( - page_rules.list, - ) - self.delete = async_to_streamed_response_wrapper( - page_rules.delete, - ) - self.edit = async_to_streamed_response_wrapper( - page_rules.edit, - ) - self.get = async_to_streamed_response_wrapper( - page_rules.get, - ) From be18cbb3f2b2a9118ae5a46b2f15424ca5b72a54 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:57:44 -0500 Subject: [PATCH 25/27] chore(rate_limits): update generated types and methods --- src/cloudflare/resources/rate_limits.py | 775 ------------------------ 1 file changed, 775 deletions(-) delete mode 100644 src/cloudflare/resources/rate_limits.py diff --git a/src/cloudflare/resources/rate_limits.py b/src/cloudflare/resources/rate_limits.py deleted file mode 100644 index 31110953cfa..00000000000 --- a/src/cloudflare/resources/rate_limits.py +++ /dev/null @@ -1,775 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -import typing_extensions -from typing import Type, cast - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from ..pagination import SyncV4PagePaginationArray, AsyncV4PagePaginationArray -from .._base_client import AsyncPaginator, make_request_options -from ..types.rate_limits import rate_limit_edit_params, rate_limit_list_params, rate_limit_create_params -from ..types.rate_limits.rate_limit import RateLimit -from ..types.rate_limits.rate_limit_delete_response import RateLimitDeleteResponse - -__all__ = ["RateLimitsResource", "AsyncRateLimitsResource"] - - -class RateLimitsResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> RateLimitsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return RateLimitsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> RateLimitsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return RateLimitsResourceWithStreamingResponse(self) - - @typing_extensions.deprecated( - "Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details." - ) - def create( - self, - *, - zone_id: str, - action: rate_limit_create_params.Action, - match: rate_limit_create_params.Match, - period: float, - threshold: float, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> RateLimit: - """Creates a new rate limit for a zone. - - Refer to the object definition for a list - of required attributes. - - Args: - zone_id: Defines an identifier. - - action: The action to perform when the threshold of matched traffic within the - configured period is exceeded. - - match: Determines which traffic the rate limit counts towards the threshold. - - period: The time in seconds (an integer value) to count matching traffic. If the count - exceeds the configured threshold within this period, Cloudflare will perform the - configured action. - - threshold: The threshold that will trigger the configured mitigation action. Configure this - value along with the `period` property to establish a threshold per period. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._post( - f"/zones/{zone_id}/rate_limits", - body=maybe_transform( - { - "action": action, - "match": match, - "period": period, - "threshold": threshold, - }, - rate_limit_create_params.RateLimitCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[RateLimit]._unwrapper, - ), - cast_to=cast(Type[RateLimit], ResultWrapper[RateLimit]), - ) - - @typing_extensions.deprecated( - "Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details." - ) - def list( - self, - *, - zone_id: str, - page: float | Omit = omit, - per_page: float | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SyncV4PagePaginationArray[RateLimit]: - """ - Fetches the rate limits for a zone. - - Args: - zone_id: Defines an identifier. - - page: Defines the page number of paginated results. - - per_page: Defines the maximum number of results per page. You can only set the value to - `1` or to a multiple of 5 such as `5`, `10`, `15`, or `20`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get_api_list( - f"/zones/{zone_id}/rate_limits", - page=SyncV4PagePaginationArray[RateLimit], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "page": page, - "per_page": per_page, - }, - rate_limit_list_params.RateLimitListParams, - ), - ), - model=RateLimit, - ) - - @typing_extensions.deprecated( - "Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details." - ) - def delete( - self, - rate_limit_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> RateLimitDeleteResponse: - """ - Deletes an existing rate limit. - - Args: - zone_id: Defines an identifier. - - rate_limit_id: Defines the unique identifier of the rate limit. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not rate_limit_id: - raise ValueError(f"Expected a non-empty value for `rate_limit_id` but received {rate_limit_id!r}") - return self._delete( - f"/zones/{zone_id}/rate_limits/{rate_limit_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[RateLimitDeleteResponse]._unwrapper, - ), - cast_to=cast(Type[RateLimitDeleteResponse], ResultWrapper[RateLimitDeleteResponse]), - ) - - @typing_extensions.deprecated( - "Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details." - ) - def edit( - self, - rate_limit_id: str, - *, - zone_id: str, - action: rate_limit_edit_params.Action, - match: rate_limit_edit_params.Match, - period: float, - threshold: float, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> RateLimit: - """ - Updates an existing rate limit. - - Args: - zone_id: Defines an identifier. - - rate_limit_id: Defines the unique identifier of the rate limit. - - action: The action to perform when the threshold of matched traffic within the - configured period is exceeded. - - match: Determines which traffic the rate limit counts towards the threshold. - - period: The time in seconds (an integer value) to count matching traffic. If the count - exceeds the configured threshold within this period, Cloudflare will perform the - configured action. - - threshold: The threshold that will trigger the configured mitigation action. Configure this - value along with the `period` property to establish a threshold per period. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not rate_limit_id: - raise ValueError(f"Expected a non-empty value for `rate_limit_id` but received {rate_limit_id!r}") - return self._put( - f"/zones/{zone_id}/rate_limits/{rate_limit_id}", - body=maybe_transform( - { - "action": action, - "match": match, - "period": period, - "threshold": threshold, - }, - rate_limit_edit_params.RateLimitEditParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[RateLimit]._unwrapper, - ), - cast_to=cast(Type[RateLimit], ResultWrapper[RateLimit]), - ) - - @typing_extensions.deprecated( - "Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details." - ) - def get( - self, - rate_limit_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> RateLimit: - """ - Fetches the details of a rate limit. - - Args: - zone_id: Defines an identifier. - - rate_limit_id: Defines the unique identifier of the rate limit. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not rate_limit_id: - raise ValueError(f"Expected a non-empty value for `rate_limit_id` but received {rate_limit_id!r}") - return self._get( - f"/zones/{zone_id}/rate_limits/{rate_limit_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[RateLimit]._unwrapper, - ), - cast_to=cast(Type[RateLimit], ResultWrapper[RateLimit]), - ) - - -class AsyncRateLimitsResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncRateLimitsResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncRateLimitsResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncRateLimitsResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncRateLimitsResourceWithStreamingResponse(self) - - @typing_extensions.deprecated( - "Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details." - ) - async def create( - self, - *, - zone_id: str, - action: rate_limit_create_params.Action, - match: rate_limit_create_params.Match, - period: float, - threshold: float, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> RateLimit: - """Creates a new rate limit for a zone. - - Refer to the object definition for a list - of required attributes. - - Args: - zone_id: Defines an identifier. - - action: The action to perform when the threshold of matched traffic within the - configured period is exceeded. - - match: Determines which traffic the rate limit counts towards the threshold. - - period: The time in seconds (an integer value) to count matching traffic. If the count - exceeds the configured threshold within this period, Cloudflare will perform the - configured action. - - threshold: The threshold that will trigger the configured mitigation action. Configure this - value along with the `period` property to establish a threshold per period. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._post( - f"/zones/{zone_id}/rate_limits", - body=await async_maybe_transform( - { - "action": action, - "match": match, - "period": period, - "threshold": threshold, - }, - rate_limit_create_params.RateLimitCreateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[RateLimit]._unwrapper, - ), - cast_to=cast(Type[RateLimit], ResultWrapper[RateLimit]), - ) - - @typing_extensions.deprecated( - "Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details." - ) - def list( - self, - *, - zone_id: str, - page: float | Omit = omit, - per_page: float | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> AsyncPaginator[RateLimit, AsyncV4PagePaginationArray[RateLimit]]: - """ - Fetches the rate limits for a zone. - - Args: - zone_id: Defines an identifier. - - page: Defines the page number of paginated results. - - per_page: Defines the maximum number of results per page. You can only set the value to - `1` or to a multiple of 5 such as `5`, `10`, `15`, or `20`. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get_api_list( - f"/zones/{zone_id}/rate_limits", - page=AsyncV4PagePaginationArray[RateLimit], - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - query=maybe_transform( - { - "page": page, - "per_page": per_page, - }, - rate_limit_list_params.RateLimitListParams, - ), - ), - model=RateLimit, - ) - - @typing_extensions.deprecated( - "Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details." - ) - async def delete( - self, - rate_limit_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> RateLimitDeleteResponse: - """ - Deletes an existing rate limit. - - Args: - zone_id: Defines an identifier. - - rate_limit_id: Defines the unique identifier of the rate limit. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not rate_limit_id: - raise ValueError(f"Expected a non-empty value for `rate_limit_id` but received {rate_limit_id!r}") - return await self._delete( - f"/zones/{zone_id}/rate_limits/{rate_limit_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[RateLimitDeleteResponse]._unwrapper, - ), - cast_to=cast(Type[RateLimitDeleteResponse], ResultWrapper[RateLimitDeleteResponse]), - ) - - @typing_extensions.deprecated( - "Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details." - ) - async def edit( - self, - rate_limit_id: str, - *, - zone_id: str, - action: rate_limit_edit_params.Action, - match: rate_limit_edit_params.Match, - period: float, - threshold: float, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> RateLimit: - """ - Updates an existing rate limit. - - Args: - zone_id: Defines an identifier. - - rate_limit_id: Defines the unique identifier of the rate limit. - - action: The action to perform when the threshold of matched traffic within the - configured period is exceeded. - - match: Determines which traffic the rate limit counts towards the threshold. - - period: The time in seconds (an integer value) to count matching traffic. If the count - exceeds the configured threshold within this period, Cloudflare will perform the - configured action. - - threshold: The threshold that will trigger the configured mitigation action. Configure this - value along with the `period` property to establish a threshold per period. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not rate_limit_id: - raise ValueError(f"Expected a non-empty value for `rate_limit_id` but received {rate_limit_id!r}") - return await self._put( - f"/zones/{zone_id}/rate_limits/{rate_limit_id}", - body=await async_maybe_transform( - { - "action": action, - "match": match, - "period": period, - "threshold": threshold, - }, - rate_limit_edit_params.RateLimitEditParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[RateLimit]._unwrapper, - ), - cast_to=cast(Type[RateLimit], ResultWrapper[RateLimit]), - ) - - @typing_extensions.deprecated( - "Rate limiting API is deprecated in favour of using the Ruleset Engine. See https://developers.cloudflare.com/fundamentals/api/reference/deprecations/#rate-limiting-api-previous-version for full details." - ) - async def get( - self, - rate_limit_id: str, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> RateLimit: - """ - Fetches the details of a rate limit. - - Args: - zone_id: Defines an identifier. - - rate_limit_id: Defines the unique identifier of the rate limit. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - if not rate_limit_id: - raise ValueError(f"Expected a non-empty value for `rate_limit_id` but received {rate_limit_id!r}") - return await self._get( - f"/zones/{zone_id}/rate_limits/{rate_limit_id}", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[RateLimit]._unwrapper, - ), - cast_to=cast(Type[RateLimit], ResultWrapper[RateLimit]), - ) - - -class RateLimitsResourceWithRawResponse: - def __init__(self, rate_limits: RateLimitsResource) -> None: - self._rate_limits = rate_limits - - self.create = ( # pyright: ignore[reportDeprecated] - to_raw_response_wrapper( - rate_limits.create, # pyright: ignore[reportDeprecated], - ) - ) - self.list = ( # pyright: ignore[reportDeprecated] - to_raw_response_wrapper( - rate_limits.list, # pyright: ignore[reportDeprecated], - ) - ) - self.delete = ( # pyright: ignore[reportDeprecated] - to_raw_response_wrapper( - rate_limits.delete, # pyright: ignore[reportDeprecated], - ) - ) - self.edit = ( # pyright: ignore[reportDeprecated] - to_raw_response_wrapper( - rate_limits.edit, # pyright: ignore[reportDeprecated], - ) - ) - self.get = ( # pyright: ignore[reportDeprecated] - to_raw_response_wrapper( - rate_limits.get, # pyright: ignore[reportDeprecated], - ) - ) - - -class AsyncRateLimitsResourceWithRawResponse: - def __init__(self, rate_limits: AsyncRateLimitsResource) -> None: - self._rate_limits = rate_limits - - self.create = ( # pyright: ignore[reportDeprecated] - async_to_raw_response_wrapper( - rate_limits.create, # pyright: ignore[reportDeprecated], - ) - ) - self.list = ( # pyright: ignore[reportDeprecated] - async_to_raw_response_wrapper( - rate_limits.list, # pyright: ignore[reportDeprecated], - ) - ) - self.delete = ( # pyright: ignore[reportDeprecated] - async_to_raw_response_wrapper( - rate_limits.delete, # pyright: ignore[reportDeprecated], - ) - ) - self.edit = ( # pyright: ignore[reportDeprecated] - async_to_raw_response_wrapper( - rate_limits.edit, # pyright: ignore[reportDeprecated], - ) - ) - self.get = ( # pyright: ignore[reportDeprecated] - async_to_raw_response_wrapper( - rate_limits.get, # pyright: ignore[reportDeprecated], - ) - ) - - -class RateLimitsResourceWithStreamingResponse: - def __init__(self, rate_limits: RateLimitsResource) -> None: - self._rate_limits = rate_limits - - self.create = ( # pyright: ignore[reportDeprecated] - to_streamed_response_wrapper( - rate_limits.create, # pyright: ignore[reportDeprecated], - ) - ) - self.list = ( # pyright: ignore[reportDeprecated] - to_streamed_response_wrapper( - rate_limits.list, # pyright: ignore[reportDeprecated], - ) - ) - self.delete = ( # pyright: ignore[reportDeprecated] - to_streamed_response_wrapper( - rate_limits.delete, # pyright: ignore[reportDeprecated], - ) - ) - self.edit = ( # pyright: ignore[reportDeprecated] - to_streamed_response_wrapper( - rate_limits.edit, # pyright: ignore[reportDeprecated], - ) - ) - self.get = ( # pyright: ignore[reportDeprecated] - to_streamed_response_wrapper( - rate_limits.get, # pyright: ignore[reportDeprecated], - ) - ) - - -class AsyncRateLimitsResourceWithStreamingResponse: - def __init__(self, rate_limits: AsyncRateLimitsResource) -> None: - self._rate_limits = rate_limits - - self.create = ( # pyright: ignore[reportDeprecated] - async_to_streamed_response_wrapper( - rate_limits.create, # pyright: ignore[reportDeprecated], - ) - ) - self.list = ( # pyright: ignore[reportDeprecated] - async_to_streamed_response_wrapper( - rate_limits.list, # pyright: ignore[reportDeprecated], - ) - ) - self.delete = ( # pyright: ignore[reportDeprecated] - async_to_streamed_response_wrapper( - rate_limits.delete, # pyright: ignore[reportDeprecated], - ) - ) - self.edit = ( # pyright: ignore[reportDeprecated] - async_to_streamed_response_wrapper( - rate_limits.edit, # pyright: ignore[reportDeprecated], - ) - ) - self.get = ( # pyright: ignore[reportDeprecated] - async_to_streamed_response_wrapper( - rate_limits.get, # pyright: ignore[reportDeprecated], - ) - ) From 4af98446e3dd27df9d2db2c978502b492660b17b Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:58:15 -0500 Subject: [PATCH 26/27] chore(security_txt): update generated types and methods --- src/cloudflare/resources/security_txt.py | 401 ----------------------- 1 file changed, 401 deletions(-) delete mode 100644 src/cloudflare/resources/security_txt.py diff --git a/src/cloudflare/resources/security_txt.py b/src/cloudflare/resources/security_txt.py deleted file mode 100644 index 21df4368570..00000000000 --- a/src/cloudflare/resources/security_txt.py +++ /dev/null @@ -1,401 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Type, Union, Optional, cast -from datetime import datetime - -import httpx - -from .._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from .._base_client import make_request_options -from ..types.security_txt import security_txt_update_params -from ..types.security_txt.security_txt_get_response import SecurityTXTGetResponse -from ..types.security_txt.security_txt_delete_response import SecurityTXTDeleteResponse -from ..types.security_txt.security_txt_update_response import SecurityTXTUpdateResponse - -__all__ = ["SecurityTXTResource", "AsyncSecurityTXTResource"] - - -class SecurityTXTResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> SecurityTXTResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return SecurityTXTResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> SecurityTXTResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return SecurityTXTResourceWithStreamingResponse(self) - - def update( - self, - *, - zone_id: str, - acknowledgments: SequenceNotStr[str] | Omit = omit, - canonical: SequenceNotStr[str] | Omit = omit, - contact: SequenceNotStr[str] | Omit = omit, - enabled: bool | Omit = omit, - encryption: SequenceNotStr[str] | Omit = omit, - expires: Union[str, datetime] | Omit = omit, - hiring: SequenceNotStr[str] | Omit = omit, - policy: SequenceNotStr[str] | Omit = omit, - preferred_languages: str | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SecurityTXTUpdateResponse: - """ - Updates the security.txt file configuration for a zone, which provides security - researchers with vulnerability reporting information. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._put( - f"/zones/{zone_id}/security-center/securitytxt", - body=maybe_transform( - { - "acknowledgments": acknowledgments, - "canonical": canonical, - "contact": contact, - "enabled": enabled, - "encryption": encryption, - "expires": expires, - "hiring": hiring, - "policy": policy, - "preferred_languages": preferred_languages, - }, - security_txt_update_params.SecurityTXTUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=SecurityTXTUpdateResponse, - ) - - def delete( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SecurityTXTDeleteResponse: - """Removes the security.txt file configuration for a zone. - - The - /.well-known/security.txt endpoint will no longer be served. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._delete( - f"/zones/{zone_id}/security-center/securitytxt", - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=SecurityTXTDeleteResponse, - ) - - def get( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[SecurityTXTGetResponse]: - """ - Retrieves the current security.txt file configuration for a zone, used for - security vulnerability reporting. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get( - f"/zones/{zone_id}/security-center/securitytxt", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[SecurityTXTGetResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[SecurityTXTGetResponse]], ResultWrapper[SecurityTXTGetResponse]), - ) - - -class AsyncSecurityTXTResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncSecurityTXTResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncSecurityTXTResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncSecurityTXTResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncSecurityTXTResourceWithStreamingResponse(self) - - async def update( - self, - *, - zone_id: str, - acknowledgments: SequenceNotStr[str] | Omit = omit, - canonical: SequenceNotStr[str] | Omit = omit, - contact: SequenceNotStr[str] | Omit = omit, - enabled: bool | Omit = omit, - encryption: SequenceNotStr[str] | Omit = omit, - expires: Union[str, datetime] | Omit = omit, - hiring: SequenceNotStr[str] | Omit = omit, - policy: SequenceNotStr[str] | Omit = omit, - preferred_languages: str | Omit = omit, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SecurityTXTUpdateResponse: - """ - Updates the security.txt file configuration for a zone, which provides security - researchers with vulnerability reporting information. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._put( - f"/zones/{zone_id}/security-center/securitytxt", - body=await async_maybe_transform( - { - "acknowledgments": acknowledgments, - "canonical": canonical, - "contact": contact, - "enabled": enabled, - "encryption": encryption, - "expires": expires, - "hiring": hiring, - "policy": policy, - "preferred_languages": preferred_languages, - }, - security_txt_update_params.SecurityTXTUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=SecurityTXTUpdateResponse, - ) - - async def delete( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> SecurityTXTDeleteResponse: - """Removes the security.txt file configuration for a zone. - - The - /.well-known/security.txt endpoint will no longer be served. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._delete( - f"/zones/{zone_id}/security-center/securitytxt", - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=SecurityTXTDeleteResponse, - ) - - async def get( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> Optional[SecurityTXTGetResponse]: - """ - Retrieves the current security.txt file configuration for a zone, used for - security vulnerability reporting. - - Args: - zone_id: Identifier. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._get( - f"/zones/{zone_id}/security-center/securitytxt", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[Optional[SecurityTXTGetResponse]]._unwrapper, - ), - cast_to=cast(Type[Optional[SecurityTXTGetResponse]], ResultWrapper[SecurityTXTGetResponse]), - ) - - -class SecurityTXTResourceWithRawResponse: - def __init__(self, security_txt: SecurityTXTResource) -> None: - self._security_txt = security_txt - - self.update = to_raw_response_wrapper( - security_txt.update, - ) - self.delete = to_raw_response_wrapper( - security_txt.delete, - ) - self.get = to_raw_response_wrapper( - security_txt.get, - ) - - -class AsyncSecurityTXTResourceWithRawResponse: - def __init__(self, security_txt: AsyncSecurityTXTResource) -> None: - self._security_txt = security_txt - - self.update = async_to_raw_response_wrapper( - security_txt.update, - ) - self.delete = async_to_raw_response_wrapper( - security_txt.delete, - ) - self.get = async_to_raw_response_wrapper( - security_txt.get, - ) - - -class SecurityTXTResourceWithStreamingResponse: - def __init__(self, security_txt: SecurityTXTResource) -> None: - self._security_txt = security_txt - - self.update = to_streamed_response_wrapper( - security_txt.update, - ) - self.delete = to_streamed_response_wrapper( - security_txt.delete, - ) - self.get = to_streamed_response_wrapper( - security_txt.get, - ) - - -class AsyncSecurityTXTResourceWithStreamingResponse: - def __init__(self, security_txt: AsyncSecurityTXTResource) -> None: - self._security_txt = security_txt - - self.update = async_to_streamed_response_wrapper( - security_txt.update, - ) - self.delete = async_to_streamed_response_wrapper( - security_txt.delete, - ) - self.get = async_to_streamed_response_wrapper( - security_txt.get, - ) From f5f134910c443231d9714b0d823761f14446af48 Mon Sep 17 00:00:00 2001 From: Musa Jundi Date: Wed, 22 Apr 2026 16:58:48 -0500 Subject: [PATCH 27/27] chore(url_normalization): update generated types and methods --- src/cloudflare/resources/url_normalization.py | 382 ------------------ 1 file changed, 382 deletions(-) delete mode 100644 src/cloudflare/resources/url_normalization.py diff --git a/src/cloudflare/resources/url_normalization.py b/src/cloudflare/resources/url_normalization.py deleted file mode 100644 index 2d69292f055..00000000000 --- a/src/cloudflare/resources/url_normalization.py +++ /dev/null @@ -1,382 +0,0 @@ -# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -from __future__ import annotations - -from typing import Type, cast -from typing_extensions import Literal - -import httpx - -from .._types import Body, Query, Headers, NoneType, NotGiven, not_given -from .._utils import maybe_transform, async_maybe_transform -from .._compat import cached_property -from .._resource import SyncAPIResource, AsyncAPIResource -from .._response import ( - to_raw_response_wrapper, - to_streamed_response_wrapper, - async_to_raw_response_wrapper, - async_to_streamed_response_wrapper, -) -from .._wrappers import ResultWrapper -from .._base_client import make_request_options -from ..types.url_normalization import url_normalization_update_params -from ..types.url_normalization.url_normalization_get_response import URLNormalizationGetResponse -from ..types.url_normalization.url_normalization_update_response import URLNormalizationUpdateResponse - -__all__ = ["URLNormalizationResource", "AsyncURLNormalizationResource"] - - -class URLNormalizationResource(SyncAPIResource): - @cached_property - def with_raw_response(self) -> URLNormalizationResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return URLNormalizationResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> URLNormalizationResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return URLNormalizationResourceWithStreamingResponse(self) - - def update( - self, - *, - zone_id: str, - scope: Literal["incoming", "both", "none"], - type: Literal["cloudflare", "rfc3986"], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> URLNormalizationUpdateResponse: - """ - Updates the URL Normalization settings. - - Args: - zone_id: The unique ID of the zone. - - scope: The scope of the URL normalization. - - type: The type of URL normalization performed by Cloudflare. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._put( - f"/zones/{zone_id}/url_normalization", - body=maybe_transform( - { - "scope": scope, - "type": type, - }, - url_normalization_update_params.URLNormalizationUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[URLNormalizationUpdateResponse]._unwrapper, - ), - cast_to=cast(Type[URLNormalizationUpdateResponse], ResultWrapper[URLNormalizationUpdateResponse]), - ) - - def delete( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> None: - """ - Deletes the URL Normalization settings. - - Args: - zone_id: The unique ID of the zone. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - extra_headers = {"Accept": "*/*", **(extra_headers or {})} - return self._delete( - f"/zones/{zone_id}/url_normalization", - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=NoneType, - ) - - def get( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> URLNormalizationGetResponse: - """ - Fetches the current URL Normalization settings. - - Args: - zone_id: The unique ID of the zone. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return self._get( - f"/zones/{zone_id}/url_normalization", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[URLNormalizationGetResponse]._unwrapper, - ), - cast_to=cast(Type[URLNormalizationGetResponse], ResultWrapper[URLNormalizationGetResponse]), - ) - - -class AsyncURLNormalizationResource(AsyncAPIResource): - @cached_property - def with_raw_response(self) -> AsyncURLNormalizationResourceWithRawResponse: - """ - This property can be used as a prefix for any HTTP method call to return - the raw response object instead of the parsed content. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#accessing-raw-response-data-eg-headers - """ - return AsyncURLNormalizationResourceWithRawResponse(self) - - @cached_property - def with_streaming_response(self) -> AsyncURLNormalizationResourceWithStreamingResponse: - """ - An alternative to `.with_raw_response` that doesn't eagerly read the response body. - - For more information, see https://www.github.com/cloudflare/cloudflare-python#with_streaming_response - """ - return AsyncURLNormalizationResourceWithStreamingResponse(self) - - async def update( - self, - *, - zone_id: str, - scope: Literal["incoming", "both", "none"], - type: Literal["cloudflare", "rfc3986"], - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> URLNormalizationUpdateResponse: - """ - Updates the URL Normalization settings. - - Args: - zone_id: The unique ID of the zone. - - scope: The scope of the URL normalization. - - type: The type of URL normalization performed by Cloudflare. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._put( - f"/zones/{zone_id}/url_normalization", - body=await async_maybe_transform( - { - "scope": scope, - "type": type, - }, - url_normalization_update_params.URLNormalizationUpdateParams, - ), - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[URLNormalizationUpdateResponse]._unwrapper, - ), - cast_to=cast(Type[URLNormalizationUpdateResponse], ResultWrapper[URLNormalizationUpdateResponse]), - ) - - async def delete( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> None: - """ - Deletes the URL Normalization settings. - - Args: - zone_id: The unique ID of the zone. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - extra_headers = {"Accept": "*/*", **(extra_headers or {})} - return await self._delete( - f"/zones/{zone_id}/url_normalization", - options=make_request_options( - extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout - ), - cast_to=NoneType, - ) - - async def get( - self, - *, - zone_id: str, - # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. - # The extra values given here take precedence over values defined on the client or passed to this method. - extra_headers: Headers | None = None, - extra_query: Query | None = None, - extra_body: Body | None = None, - timeout: float | httpx.Timeout | None | NotGiven = not_given, - ) -> URLNormalizationGetResponse: - """ - Fetches the current URL Normalization settings. - - Args: - zone_id: The unique ID of the zone. - - extra_headers: Send extra headers - - extra_query: Add additional query parameters to the request - - extra_body: Add additional JSON properties to the request - - timeout: Override the client-level default timeout for this request, in seconds - """ - if not zone_id: - raise ValueError(f"Expected a non-empty value for `zone_id` but received {zone_id!r}") - return await self._get( - f"/zones/{zone_id}/url_normalization", - options=make_request_options( - extra_headers=extra_headers, - extra_query=extra_query, - extra_body=extra_body, - timeout=timeout, - post_parser=ResultWrapper[URLNormalizationGetResponse]._unwrapper, - ), - cast_to=cast(Type[URLNormalizationGetResponse], ResultWrapper[URLNormalizationGetResponse]), - ) - - -class URLNormalizationResourceWithRawResponse: - def __init__(self, url_normalization: URLNormalizationResource) -> None: - self._url_normalization = url_normalization - - self.update = to_raw_response_wrapper( - url_normalization.update, - ) - self.delete = to_raw_response_wrapper( - url_normalization.delete, - ) - self.get = to_raw_response_wrapper( - url_normalization.get, - ) - - -class AsyncURLNormalizationResourceWithRawResponse: - def __init__(self, url_normalization: AsyncURLNormalizationResource) -> None: - self._url_normalization = url_normalization - - self.update = async_to_raw_response_wrapper( - url_normalization.update, - ) - self.delete = async_to_raw_response_wrapper( - url_normalization.delete, - ) - self.get = async_to_raw_response_wrapper( - url_normalization.get, - ) - - -class URLNormalizationResourceWithStreamingResponse: - def __init__(self, url_normalization: URLNormalizationResource) -> None: - self._url_normalization = url_normalization - - self.update = to_streamed_response_wrapper( - url_normalization.update, - ) - self.delete = to_streamed_response_wrapper( - url_normalization.delete, - ) - self.get = to_streamed_response_wrapper( - url_normalization.get, - ) - - -class AsyncURLNormalizationResourceWithStreamingResponse: - def __init__(self, url_normalization: AsyncURLNormalizationResource) -> None: - self._url_normalization = url_normalization - - self.update = async_to_streamed_response_wrapper( - url_normalization.update, - ) - self.delete = async_to_streamed_response_wrapper( - url_normalization.delete, - ) - self.get = async_to_streamed_response_wrapper( - url_normalization.get, - )