cloudflare-python/src/cloudflare/resources/page_shield/policies.py

667 lines
24 KiB
Python

# 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, NoneType, 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.page_shield import policy_create_params, policy_update_params
from ...types.page_shield.policy_get_response import PolicyGetResponse
from ...types.page_shield.policy_list_response import PolicyListResponse
from ...types.page_shield.policy_create_response import PolicyCreateResponse
from ...types.page_shield.policy_update_response import PolicyUpdateResponse
__all__ = ["PoliciesResource", "AsyncPoliciesResource"]
class PoliciesResource(SyncAPIResource):
@cached_property
def with_raw_response(self) -> PoliciesResourceWithRawResponse:
"""
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 PoliciesResourceWithRawResponse(self)
@cached_property
def with_streaming_response(self) -> PoliciesResourceWithStreamingResponse:
"""
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 PoliciesResourceWithStreamingResponse(self)
def create(
self,
*,
zone_id: str,
action: Literal["allow", "log"],
description: str,
enabled: bool,
expression: str,
value: 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[PolicyCreateResponse]:
"""
Create a Page Shield policy.
Args:
zone_id: Identifier
action: The action to take if the expression matches
description: A description for the policy
enabled: Whether the policy is enabled
expression: The expression which must match for the policy to be applied, using the
Cloudflare Firewall rule expression syntax
value: The policy which will be applied
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}/page_shield/policies",
body=maybe_transform(
{
"action": action,
"description": description,
"enabled": enabled,
"expression": expression,
"value": value,
},
policy_create_params.PolicyCreateParams,
),
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
post_parser=ResultWrapper[Optional[PolicyCreateResponse]]._unwrapper,
),
cast_to=cast(Type[Optional[PolicyCreateResponse]], ResultWrapper[PolicyCreateResponse]),
)
def update(
self,
policy_id: str,
*,
zone_id: str,
action: Literal["allow", "log"] | Omit = omit,
description: str | Omit = omit,
enabled: bool | Omit = omit,
expression: str | Omit = omit,
value: 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[PolicyUpdateResponse]:
"""
Update a Page Shield policy by ID.
Args:
zone_id: Identifier
policy_id: Identifier
action: The action to take if the expression matches
description: A description for the policy
enabled: Whether the policy is enabled
expression: The expression which must match for the policy to be applied, using the
Cloudflare Firewall rule expression syntax
value: The policy which will be applied
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 policy_id:
raise ValueError(f"Expected a non-empty value for `policy_id` but received {policy_id!r}")
return self._put(
f"/zones/{zone_id}/page_shield/policies/{policy_id}",
body=maybe_transform(
{
"action": action,
"description": description,
"enabled": enabled,
"expression": expression,
"value": value,
},
policy_update_params.PolicyUpdateParams,
),
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
post_parser=ResultWrapper[Optional[PolicyUpdateResponse]]._unwrapper,
),
cast_to=cast(Type[Optional[PolicyUpdateResponse]], ResultWrapper[PolicyUpdateResponse]),
)
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[PolicyListResponse]:
"""
Lists all Page Shield policies.
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}/page_shield/policies",
page=SyncSinglePage[PolicyListResponse],
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
model=PolicyListResponse,
)
def delete(
self,
policy_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,
) -> None:
"""
Delete a Page Shield policy by ID.
Args:
zone_id: Identifier
policy_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 policy_id:
raise ValueError(f"Expected a non-empty value for `policy_id` but received {policy_id!r}")
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
return self._delete(
f"/zones/{zone_id}/page_shield/policies/{policy_id}",
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=NoneType,
)
def get(
self,
policy_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[PolicyGetResponse]:
"""
Fetches a Page Shield policy by ID.
Args:
zone_id: Identifier
policy_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 policy_id:
raise ValueError(f"Expected a non-empty value for `policy_id` but received {policy_id!r}")
return self._get(
f"/zones/{zone_id}/page_shield/policies/{policy_id}",
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
post_parser=ResultWrapper[Optional[PolicyGetResponse]]._unwrapper,
),
cast_to=cast(Type[Optional[PolicyGetResponse]], ResultWrapper[PolicyGetResponse]),
)
class AsyncPoliciesResource(AsyncAPIResource):
@cached_property
def with_raw_response(self) -> AsyncPoliciesResourceWithRawResponse:
"""
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 AsyncPoliciesResourceWithRawResponse(self)
@cached_property
def with_streaming_response(self) -> AsyncPoliciesResourceWithStreamingResponse:
"""
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 AsyncPoliciesResourceWithStreamingResponse(self)
async def create(
self,
*,
zone_id: str,
action: Literal["allow", "log"],
description: str,
enabled: bool,
expression: str,
value: 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[PolicyCreateResponse]:
"""
Create a Page Shield policy.
Args:
zone_id: Identifier
action: The action to take if the expression matches
description: A description for the policy
enabled: Whether the policy is enabled
expression: The expression which must match for the policy to be applied, using the
Cloudflare Firewall rule expression syntax
value: The policy which will be applied
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}/page_shield/policies",
body=await async_maybe_transform(
{
"action": action,
"description": description,
"enabled": enabled,
"expression": expression,
"value": value,
},
policy_create_params.PolicyCreateParams,
),
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
post_parser=ResultWrapper[Optional[PolicyCreateResponse]]._unwrapper,
),
cast_to=cast(Type[Optional[PolicyCreateResponse]], ResultWrapper[PolicyCreateResponse]),
)
async def update(
self,
policy_id: str,
*,
zone_id: str,
action: Literal["allow", "log"] | Omit = omit,
description: str | Omit = omit,
enabled: bool | Omit = omit,
expression: str | Omit = omit,
value: 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[PolicyUpdateResponse]:
"""
Update a Page Shield policy by ID.
Args:
zone_id: Identifier
policy_id: Identifier
action: The action to take if the expression matches
description: A description for the policy
enabled: Whether the policy is enabled
expression: The expression which must match for the policy to be applied, using the
Cloudflare Firewall rule expression syntax
value: The policy which will be applied
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 policy_id:
raise ValueError(f"Expected a non-empty value for `policy_id` but received {policy_id!r}")
return await self._put(
f"/zones/{zone_id}/page_shield/policies/{policy_id}",
body=await async_maybe_transform(
{
"action": action,
"description": description,
"enabled": enabled,
"expression": expression,
"value": value,
},
policy_update_params.PolicyUpdateParams,
),
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
post_parser=ResultWrapper[Optional[PolicyUpdateResponse]]._unwrapper,
),
cast_to=cast(Type[Optional[PolicyUpdateResponse]], ResultWrapper[PolicyUpdateResponse]),
)
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[PolicyListResponse, AsyncSinglePage[PolicyListResponse]]:
"""
Lists all Page Shield policies.
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}/page_shield/policies",
page=AsyncSinglePage[PolicyListResponse],
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
model=PolicyListResponse,
)
async def delete(
self,
policy_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,
) -> None:
"""
Delete a Page Shield policy by ID.
Args:
zone_id: Identifier
policy_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 policy_id:
raise ValueError(f"Expected a non-empty value for `policy_id` but received {policy_id!r}")
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
return await self._delete(
f"/zones/{zone_id}/page_shield/policies/{policy_id}",
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,
policy_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[PolicyGetResponse]:
"""
Fetches a Page Shield policy by ID.
Args:
zone_id: Identifier
policy_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 policy_id:
raise ValueError(f"Expected a non-empty value for `policy_id` but received {policy_id!r}")
return await self._get(
f"/zones/{zone_id}/page_shield/policies/{policy_id}",
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
post_parser=ResultWrapper[Optional[PolicyGetResponse]]._unwrapper,
),
cast_to=cast(Type[Optional[PolicyGetResponse]], ResultWrapper[PolicyGetResponse]),
)
class PoliciesResourceWithRawResponse:
def __init__(self, policies: PoliciesResource) -> None:
self._policies = policies
self.create = to_raw_response_wrapper(
policies.create,
)
self.update = to_raw_response_wrapper(
policies.update,
)
self.list = to_raw_response_wrapper(
policies.list,
)
self.delete = to_raw_response_wrapper(
policies.delete,
)
self.get = to_raw_response_wrapper(
policies.get,
)
class AsyncPoliciesResourceWithRawResponse:
def __init__(self, policies: AsyncPoliciesResource) -> None:
self._policies = policies
self.create = async_to_raw_response_wrapper(
policies.create,
)
self.update = async_to_raw_response_wrapper(
policies.update,
)
self.list = async_to_raw_response_wrapper(
policies.list,
)
self.delete = async_to_raw_response_wrapper(
policies.delete,
)
self.get = async_to_raw_response_wrapper(
policies.get,
)
class PoliciesResourceWithStreamingResponse:
def __init__(self, policies: PoliciesResource) -> None:
self._policies = policies
self.create = to_streamed_response_wrapper(
policies.create,
)
self.update = to_streamed_response_wrapper(
policies.update,
)
self.list = to_streamed_response_wrapper(
policies.list,
)
self.delete = to_streamed_response_wrapper(
policies.delete,
)
self.get = to_streamed_response_wrapper(
policies.get,
)
class AsyncPoliciesResourceWithStreamingResponse:
def __init__(self, policies: AsyncPoliciesResource) -> None:
self._policies = policies
self.create = async_to_streamed_response_wrapper(
policies.create,
)
self.update = async_to_streamed_response_wrapper(
policies.update,
)
self.list = async_to_streamed_response_wrapper(
policies.list,
)
self.delete = async_to_streamed_response_wrapper(
policies.delete,
)
self.get = async_to_streamed_response_wrapper(
policies.get,
)