feat: OpenAPI spec update via Stainless API (#103)

This commit is contained in:
stainless-app[bot] 2024-03-09 06:14:47 +00:00
parent b33bb69ebb
commit 85c52261ba
28 changed files with 687 additions and 382 deletions

View file

@ -1 +1 @@
configured_endpoints: 1255
configured_endpoints: 1256

25
api.md
View file

@ -3410,6 +3410,18 @@ Methods:
- <code title="get /accounts/{account_id}/addressing/prefixes/{prefix_id}/delegations">client.addressing.prefixes.delegations.<a href="./src/cloudflare/resources/addressing/prefixes/delegations.py">list</a>(prefix_id, \*, account_id) -> <a href="./src/cloudflare/types/addressing/prefixes/delegation_list_response.py">Optional</a></code>
- <code title="delete /accounts/{account_id}/addressing/prefixes/{prefix_id}/delegations/{delegation_id}">client.addressing.prefixes.delegations.<a href="./src/cloudflare/resources/addressing/prefixes/delegations.py">delete</a>(delegation_id, \*, account_id, prefix_id) -> <a href="./src/cloudflare/types/addressing/prefixes/delegation_delete_response.py">DelegationDeleteResponse</a></code>
# AuditLogs
Types:
```python
from cloudflare.types import AuditLogListResponse
```
Methods:
- <code title="get /accounts/{account_identifier}/audit_logs">client.audit_logs.<a href="./src/cloudflare/resources/audit_logs.py">list</a>(account_identifier, \*\*<a href="src/cloudflare/types/audit_log_list_params.py">params</a>) -> <a href="./src/cloudflare/types/audit_log_list_response.py">SyncV4PagePaginationArray[AuditLogListResponse]</a></code>
# Billing
## Profiles
@ -4358,6 +4370,7 @@ Types:
```python
from cloudflare.types.alerting.v3.destinations import (
AaaPagerduty,
PagerdutyCreateResponse,
PagerdutyDeleteResponse,
PagerdutyGetResponse,
@ -4378,11 +4391,11 @@ Types:
```python
from cloudflare.types.alerting.v3.destinations import (
AaaWebhooks,
WebhookCreateResponse,
WebhookUpdateResponse,
WebhookListResponse,
WebhookDeleteResponse,
WebhookGetResponse,
)
```
@ -4392,19 +4405,19 @@ Methods:
- <code title="put /accounts/{account_id}/alerting/v3/destinations/webhooks/{webhook_id}">client.alerting.v3.destinations.webhooks.<a href="./src/cloudflare/resources/alerting/v3/destinations/webhooks.py">update</a>(webhook_id, \*, account_id, \*\*<a href="src/cloudflare/types/alerting/v3/destinations/webhook_update_params.py">params</a>) -> <a href="./src/cloudflare/types/alerting/v3/destinations/webhook_update_response.py">WebhookUpdateResponse</a></code>
- <code title="get /accounts/{account_id}/alerting/v3/destinations/webhooks">client.alerting.v3.destinations.webhooks.<a href="./src/cloudflare/resources/alerting/v3/destinations/webhooks.py">list</a>(\*, account_id) -> <a href="./src/cloudflare/types/alerting/v3/destinations/webhook_list_response.py">Optional</a></code>
- <code title="delete /accounts/{account_id}/alerting/v3/destinations/webhooks/{webhook_id}">client.alerting.v3.destinations.webhooks.<a href="./src/cloudflare/resources/alerting/v3/destinations/webhooks.py">delete</a>(webhook_id, \*, account_id) -> <a href="./src/cloudflare/types/alerting/v3/destinations/webhook_delete_response.py">Optional</a></code>
- <code title="get /accounts/{account_id}/alerting/v3/destinations/webhooks/{webhook_id}">client.alerting.v3.destinations.webhooks.<a href="./src/cloudflare/resources/alerting/v3/destinations/webhooks.py">get</a>(webhook_id, \*, account_id) -> <a href="./src/cloudflare/types/alerting/v3/destinations/webhook_get_response.py">WebhookGetResponse</a></code>
- <code title="get /accounts/{account_id}/alerting/v3/destinations/webhooks/{webhook_id}">client.alerting.v3.destinations.webhooks.<a href="./src/cloudflare/resources/alerting/v3/destinations/webhooks.py">get</a>(webhook_id, \*, account_id) -> <a href="./src/cloudflare/types/alerting/v3/destinations/aaa_webhooks.py">AaaWebhooks</a></code>
### Histories
Types:
```python
from cloudflare.types.alerting.v3 import HistoryListResponse
from cloudflare.types.alerting.v3 import AaaHistory
```
Methods:
- <code title="get /accounts/{account_id}/alerting/v3/history">client.alerting.v3.histories.<a href="./src/cloudflare/resources/alerting/v3/histories.py">list</a>(\*, account_id, \*\*<a href="src/cloudflare/types/alerting/v3/history_list_params.py">params</a>) -> <a href="./src/cloudflare/types/alerting/v3/history_list_response.py">SyncV4PagePaginationArray[HistoryListResponse]</a></code>
- <code title="get /accounts/{account_id}/alerting/v3/history">client.alerting.v3.histories.<a href="./src/cloudflare/resources/alerting/v3/histories.py">list</a>(\*, account_id, \*\*<a href="src/cloudflare/types/alerting/v3/history_list_params.py">params</a>) -> <a href="./src/cloudflare/types/alerting/v3/aaa_history.py">SyncV4PagePaginationArray[AaaHistory]</a></code>
### Policies
@ -4412,11 +4425,11 @@ Types:
```python
from cloudflare.types.alerting.v3 import (
AaaPolicies,
PolicyCreateResponse,
PolicyUpdateResponse,
PolicyListResponse,
PolicyDeleteResponse,
PolicyGetResponse,
)
```
@ -4426,7 +4439,7 @@ Methods:
- <code title="put /accounts/{account_id}/alerting/v3/policies/{policy_id}">client.alerting.v3.policies.<a href="./src/cloudflare/resources/alerting/v3/policies.py">update</a>(policy_id, \*, account_id, \*\*<a href="src/cloudflare/types/alerting/v3/policy_update_params.py">params</a>) -> <a href="./src/cloudflare/types/alerting/v3/policy_update_response.py">PolicyUpdateResponse</a></code>
- <code title="get /accounts/{account_id}/alerting/v3/policies">client.alerting.v3.policies.<a href="./src/cloudflare/resources/alerting/v3/policies.py">list</a>(\*, account_id) -> <a href="./src/cloudflare/types/alerting/v3/policy_list_response.py">Optional</a></code>
- <code title="delete /accounts/{account_id}/alerting/v3/policies/{policy_id}">client.alerting.v3.policies.<a href="./src/cloudflare/resources/alerting/v3/policies.py">delete</a>(policy_id, \*, account_id) -> <a href="./src/cloudflare/types/alerting/v3/policy_delete_response.py">Optional</a></code>
- <code title="get /accounts/{account_id}/alerting/v3/policies/{policy_id}">client.alerting.v3.policies.<a href="./src/cloudflare/resources/alerting/v3/policies.py">get</a>(policy_id, \*, account_id) -> <a href="./src/cloudflare/types/alerting/v3/policy_get_response.py">PolicyGetResponse</a></code>
- <code title="get /accounts/{account_id}/alerting/v3/policies/{policy_id}">client.alerting.v3.policies.<a href="./src/cloudflare/resources/alerting/v3/policies.py">get</a>(policy_id, \*, account_id) -> <a href="./src/cloudflare/types/alerting/v3/aaa_policies.py">AaaPolicies</a></code>
# D1

View file

@ -91,6 +91,7 @@ class Cloudflare(SyncAPIClient):
url_normalization: resources.URLNormalization
spectrum: resources.Spectrum
addressing: resources.Addressing
audit_logs: resources.AuditLogs
billing: resources.Billing
brand_protection: resources.BrandProtection
diagnostics: resources.Diagnostics
@ -243,6 +244,7 @@ class Cloudflare(SyncAPIClient):
self.url_normalization = resources.URLNormalization(self)
self.spectrum = resources.Spectrum(self)
self.addressing = resources.Addressing(self)
self.audit_logs = resources.AuditLogs(self)
self.billing = resources.Billing(self)
self.brand_protection = resources.BrandProtection(self)
self.diagnostics = resources.Diagnostics(self)
@ -500,6 +502,7 @@ class AsyncCloudflare(AsyncAPIClient):
url_normalization: resources.AsyncURLNormalization
spectrum: resources.AsyncSpectrum
addressing: resources.AsyncAddressing
audit_logs: resources.AsyncAuditLogs
billing: resources.AsyncBilling
brand_protection: resources.AsyncBrandProtection
diagnostics: resources.AsyncDiagnostics
@ -652,6 +655,7 @@ class AsyncCloudflare(AsyncAPIClient):
self.url_normalization = resources.AsyncURLNormalization(self)
self.spectrum = resources.AsyncSpectrum(self)
self.addressing = resources.AsyncAddressing(self)
self.audit_logs = resources.AsyncAuditLogs(self)
self.billing = resources.AsyncBilling(self)
self.brand_protection = resources.AsyncBrandProtection(self)
self.diagnostics = resources.AsyncDiagnostics(self)
@ -910,6 +914,7 @@ class CloudflareWithRawResponse:
self.url_normalization = resources.URLNormalizationWithRawResponse(client.url_normalization)
self.spectrum = resources.SpectrumWithRawResponse(client.spectrum)
self.addressing = resources.AddressingWithRawResponse(client.addressing)
self.audit_logs = resources.AuditLogsWithRawResponse(client.audit_logs)
self.billing = resources.BillingWithRawResponse(client.billing)
self.brand_protection = resources.BrandProtectionWithRawResponse(client.brand_protection)
self.diagnostics = resources.DiagnosticsWithRawResponse(client.diagnostics)
@ -997,6 +1002,7 @@ class AsyncCloudflareWithRawResponse:
self.url_normalization = resources.AsyncURLNormalizationWithRawResponse(client.url_normalization)
self.spectrum = resources.AsyncSpectrumWithRawResponse(client.spectrum)
self.addressing = resources.AsyncAddressingWithRawResponse(client.addressing)
self.audit_logs = resources.AsyncAuditLogsWithRawResponse(client.audit_logs)
self.billing = resources.AsyncBillingWithRawResponse(client.billing)
self.brand_protection = resources.AsyncBrandProtectionWithRawResponse(client.brand_protection)
self.diagnostics = resources.AsyncDiagnosticsWithRawResponse(client.diagnostics)
@ -1086,6 +1092,7 @@ class CloudflareWithStreamedResponse:
self.url_normalization = resources.URLNormalizationWithStreamingResponse(client.url_normalization)
self.spectrum = resources.SpectrumWithStreamingResponse(client.spectrum)
self.addressing = resources.AddressingWithStreamingResponse(client.addressing)
self.audit_logs = resources.AuditLogsWithStreamingResponse(client.audit_logs)
self.billing = resources.BillingWithStreamingResponse(client.billing)
self.brand_protection = resources.BrandProtectionWithStreamingResponse(client.brand_protection)
self.diagnostics = resources.DiagnosticsWithStreamingResponse(client.diagnostics)
@ -1177,6 +1184,7 @@ class AsyncCloudflareWithStreamedResponse:
self.url_normalization = resources.AsyncURLNormalizationWithStreamingResponse(client.url_normalization)
self.spectrum = resources.AsyncSpectrumWithStreamingResponse(client.spectrum)
self.addressing = resources.AsyncAddressingWithStreamingResponse(client.addressing)
self.audit_logs = resources.AsyncAuditLogsWithStreamingResponse(client.audit_logs)
self.billing = resources.AsyncBillingWithStreamingResponse(client.billing)
self.brand_protection = resources.AsyncBrandProtectionWithStreamingResponse(client.brand_protection)
self.diagnostics = resources.AsyncDiagnosticsWithStreamingResponse(client.diagnostics)

View file

@ -328,6 +328,14 @@ from .addressing import (
AddressingWithStreamingResponse,
AsyncAddressingWithStreamingResponse,
)
from .audit_logs import (
AuditLogs,
AsyncAuditLogs,
AuditLogsWithRawResponse,
AsyncAuditLogsWithRawResponse,
AuditLogsWithStreamingResponse,
AsyncAuditLogsWithStreamingResponse,
)
from .challenges import (
Challenges,
AsyncChallenges,
@ -898,6 +906,12 @@ __all__ = [
"AsyncAddressingWithRawResponse",
"AddressingWithStreamingResponse",
"AsyncAddressingWithStreamingResponse",
"AuditLogs",
"AsyncAuditLogs",
"AuditLogsWithRawResponse",
"AsyncAuditLogsWithRawResponse",
"AuditLogsWithStreamingResponse",
"AsyncAuditLogsWithStreamingResponse",
"Billing",
"AsyncBilling",
"BillingWithRawResponse",

View file

@ -178,7 +178,7 @@ class Pagerduty(SyncAPIResource):
Args:
account_id: The account id
token_id: The token integration key
token_id: The token id
extra_headers: Send extra headers
@ -354,7 +354,7 @@ class AsyncPagerduty(AsyncAPIResource):
Args:
account_id: The account id
token_id: The token integration key
token_id: The token id
extra_headers: Send extra headers

View file

@ -24,7 +24,7 @@ from ....._base_client import (
make_request_options,
)
from .....types.alerting.v3.destinations import (
WebhookGetResponse,
AaaWebhooks,
WebhookListResponse,
WebhookCreateResponse,
WebhookDeleteResponse,
@ -267,7 +267,7 @@ class Webhooks(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> WebhookGetResponse:
) -> AaaWebhooks:
"""
Get details for a single webhooks destination.
@ -297,7 +297,7 @@ class Webhooks(SyncAPIResource):
timeout=timeout,
post_parser=ResultWrapper._unwrapper,
),
cast_to=cast(Type[WebhookGetResponse], ResultWrapper[WebhookGetResponse]),
cast_to=cast(Type[AaaWebhooks], ResultWrapper[AaaWebhooks]),
)
@ -532,7 +532,7 @@ class AsyncWebhooks(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> WebhookGetResponse:
) -> AaaWebhooks:
"""
Get details for a single webhooks destination.
@ -562,7 +562,7 @@ class AsyncWebhooks(AsyncAPIResource):
timeout=timeout,
post_parser=ResultWrapper._unwrapper,
),
cast_to=cast(Type[WebhookGetResponse], ResultWrapper[WebhookGetResponse]),
cast_to=cast(Type[AaaWebhooks], ResultWrapper[AaaWebhooks]),
)

View file

@ -22,7 +22,7 @@ from ...._base_client import (
AsyncPaginator,
make_request_options,
)
from ....types.alerting.v3 import HistoryListResponse, history_list_params
from ....types.alerting.v3 import AaaHistory, history_list_params
__all__ = ["Histories", "AsyncHistories"]
@ -50,7 +50,7 @@ class Histories(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> SyncV4PagePaginationArray[HistoryListResponse]:
) -> SyncV4PagePaginationArray[AaaHistory]:
"""Gets a list of history records for notifications sent to an account.
The records
@ -82,7 +82,7 @@ class Histories(SyncAPIResource):
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}/alerting/v3/history",
page=SyncV4PagePaginationArray[HistoryListResponse],
page=SyncV4PagePaginationArray[AaaHistory],
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
@ -98,7 +98,7 @@ class Histories(SyncAPIResource):
history_list_params.HistoryListParams,
),
),
model=HistoryListResponse,
model=AaaHistory,
)
@ -125,7 +125,7 @@ class AsyncHistories(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> AsyncPaginator[HistoryListResponse, AsyncV4PagePaginationArray[HistoryListResponse]]:
) -> AsyncPaginator[AaaHistory, AsyncV4PagePaginationArray[AaaHistory]]:
"""Gets a list of history records for notifications sent to an account.
The records
@ -157,7 +157,7 @@ class AsyncHistories(AsyncAPIResource):
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}/alerting/v3/history",
page=AsyncV4PagePaginationArray[HistoryListResponse],
page=AsyncV4PagePaginationArray[AaaHistory],
options=make_request_options(
extra_headers=extra_headers,
extra_query=extra_query,
@ -173,7 +173,7 @@ class AsyncHistories(AsyncAPIResource):
history_list_params.HistoryListParams,
),
),
model=HistoryListResponse,
model=AaaHistory,
)

View file

@ -25,7 +25,7 @@ from ...._base_client import (
make_request_options,
)
from ....types.alerting.v3 import (
PolicyGetResponse,
AaaPolicies,
PolicyListResponse,
PolicyCreateResponse,
PolicyDeleteResponse,
@ -100,7 +100,6 @@ class Policies(SyncAPIResource):
"secondary_dns_zone_validation_warning",
"sentinel_alert",
"stream_live_notifications",
"traffic_anomalies_alert",
"tunnel_health_event",
"tunnel_update_event",
"universal_ssl_event_type",
@ -230,7 +229,6 @@ class Policies(SyncAPIResource):
"secondary_dns_zone_validation_warning",
"sentinel_alert",
"stream_live_notifications",
"traffic_anomalies_alert",
"tunnel_health_event",
"tunnel_update_event",
"universal_ssl_event_type",
@ -409,7 +407,7 @@ class Policies(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> PolicyGetResponse:
) -> AaaPolicies:
"""
Get details for a single policy.
@ -439,7 +437,7 @@ class Policies(SyncAPIResource):
timeout=timeout,
post_parser=ResultWrapper._unwrapper,
),
cast_to=cast(Type[PolicyGetResponse], ResultWrapper[PolicyGetResponse]),
cast_to=cast(Type[AaaPolicies], ResultWrapper[AaaPolicies]),
)
@ -506,7 +504,6 @@ class AsyncPolicies(AsyncAPIResource):
"secondary_dns_zone_validation_warning",
"sentinel_alert",
"stream_live_notifications",
"traffic_anomalies_alert",
"tunnel_health_event",
"tunnel_update_event",
"universal_ssl_event_type",
@ -636,7 +633,6 @@ class AsyncPolicies(AsyncAPIResource):
"secondary_dns_zone_validation_warning",
"sentinel_alert",
"stream_live_notifications",
"traffic_anomalies_alert",
"tunnel_health_event",
"tunnel_update_event",
"universal_ssl_event_type",
@ -815,7 +811,7 @@ class AsyncPolicies(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> PolicyGetResponse:
) -> AaaPolicies:
"""
Get details for a single policy.
@ -845,7 +841,7 @@ class AsyncPolicies(AsyncAPIResource):
timeout=timeout,
post_parser=ResultWrapper._unwrapper,
),
cast_to=cast(Type[PolicyGetResponse], ResultWrapper[PolicyGetResponse]),
cast_to=cast(Type[AaaPolicies], ResultWrapper[AaaPolicies]),
)

View file

@ -0,0 +1,256 @@
# File generated from our OpenAPI spec by Stainless.
from __future__ import annotations
from typing import Union
from datetime import datetime
from typing_extensions import Literal
import httpx
from ..types import AuditLogListResponse, audit_log_list_params
from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven
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,
)
__all__ = ["AuditLogs", "AsyncAuditLogs"]
class AuditLogs(SyncAPIResource):
@cached_property
def with_raw_response(self) -> AuditLogsWithRawResponse:
return AuditLogsWithRawResponse(self)
@cached_property
def with_streaming_response(self) -> AuditLogsWithStreamingResponse:
return AuditLogsWithStreamingResponse(self)
def list(
self,
account_identifier: str,
*,
id: str | NotGiven = NOT_GIVEN,
action: audit_log_list_params.Action | NotGiven = NOT_GIVEN,
actor: audit_log_list_params.Actor | NotGiven = NOT_GIVEN,
before: Union[str, datetime] | NotGiven = NOT_GIVEN,
direction: Literal["desc", "asc"] | NotGiven = NOT_GIVEN,
export: bool | NotGiven = NOT_GIVEN,
hide_user_logs: bool | NotGiven = NOT_GIVEN,
page: float | NotGiven = NOT_GIVEN,
per_page: float | NotGiven = NOT_GIVEN,
since: Union[str, datetime] | NotGiven = NOT_GIVEN,
zone: audit_log_list_params.Zone | NotGiven = NOT_GIVEN,
# 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[AuditLogListResponse]:
"""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_identifier: Identifier
id: Finds a specific log by its ID.
before: Limits the returned results to logs older than the specified date. This can be a
date string `2019-04-30` or an absolute timestamp 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. This can be a
date string `2019-04-30` or an absolute timestamp 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_identifier:
raise ValueError(f"Expected a non-empty value for `account_identifier` but received {account_identifier!r}")
return self._get_api_list(
f"/accounts/{account_identifier}/audit_logs",
page=SyncV4PagePaginationArray[AuditLogListResponse],
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=AuditLogListResponse,
)
class AsyncAuditLogs(AsyncAPIResource):
@cached_property
def with_raw_response(self) -> AsyncAuditLogsWithRawResponse:
return AsyncAuditLogsWithRawResponse(self)
@cached_property
def with_streaming_response(self) -> AsyncAuditLogsWithStreamingResponse:
return AsyncAuditLogsWithStreamingResponse(self)
def list(
self,
account_identifier: str,
*,
id: str | NotGiven = NOT_GIVEN,
action: audit_log_list_params.Action | NotGiven = NOT_GIVEN,
actor: audit_log_list_params.Actor | NotGiven = NOT_GIVEN,
before: Union[str, datetime] | NotGiven = NOT_GIVEN,
direction: Literal["desc", "asc"] | NotGiven = NOT_GIVEN,
export: bool | NotGiven = NOT_GIVEN,
hide_user_logs: bool | NotGiven = NOT_GIVEN,
page: float | NotGiven = NOT_GIVEN,
per_page: float | NotGiven = NOT_GIVEN,
since: Union[str, datetime] | NotGiven = NOT_GIVEN,
zone: audit_log_list_params.Zone | NotGiven = NOT_GIVEN,
# 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[AuditLogListResponse, AsyncV4PagePaginationArray[AuditLogListResponse]]:
"""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_identifier: Identifier
id: Finds a specific log by its ID.
before: Limits the returned results to logs older than the specified date. This can be a
date string `2019-04-30` or an absolute timestamp 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. This can be a
date string `2019-04-30` or an absolute timestamp 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_identifier:
raise ValueError(f"Expected a non-empty value for `account_identifier` but received {account_identifier!r}")
return self._get_api_list(
f"/accounts/{account_identifier}/audit_logs",
page=AsyncV4PagePaginationArray[AuditLogListResponse],
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=AuditLogListResponse,
)
class AuditLogsWithRawResponse:
def __init__(self, audit_logs: AuditLogs) -> None:
self._audit_logs = audit_logs
self.list = to_raw_response_wrapper(
audit_logs.list,
)
class AsyncAuditLogsWithRawResponse:
def __init__(self, audit_logs: AsyncAuditLogs) -> None:
self._audit_logs = audit_logs
self.list = async_to_raw_response_wrapper(
audit_logs.list,
)
class AuditLogsWithStreamingResponse:
def __init__(self, audit_logs: AuditLogs) -> None:
self._audit_logs = audit_logs
self.list = to_streamed_response_wrapper(
audit_logs.list,
)
class AsyncAuditLogsWithStreamingResponse:
def __init__(self, audit_logs: AsyncAuditLogs) -> None:
self._audit_logs = audit_logs
self.list = async_to_streamed_response_wrapper(
audit_logs.list,
)

View file

@ -53,6 +53,7 @@ from .stream_list_response import StreamListResponse as StreamListResponse
from .zone_create_response import ZoneCreateResponse as ZoneCreateResponse
from .zone_delete_response import ZoneDeleteResponse as ZoneDeleteResponse
from .account_update_params import AccountUpdateParams as AccountUpdateParams
from .audit_log_list_params import AuditLogListParams as AuditLogListParams
from .calls_app_with_secret import CallsAppWithSecret as CallsAppWithSecret
from .origin_ca_certificate import OriginCACertificate as OriginCACertificate
from .pagerule_get_response import PageruleGetResponse as PageruleGetResponse
@ -74,6 +75,7 @@ from .pagerule_update_params import PageruleUpdateParams as PageruleUpdateParams
from .rate_limit_edit_params import RateLimitEditParams as RateLimitEditParams
from .rate_limit_list_params import RateLimitListParams as RateLimitListParams
from .account_update_response import AccountUpdateResponse as AccountUpdateResponse
from .audit_log_list_response import AuditLogListResponse as AuditLogListResponse
from .healthcheck_edit_params import HealthcheckEditParams as HealthcheckEditParams
from .intel_phishing_url_info import IntelPhishingURLInfo as IntelPhishingURLInfo
from .membership_get_response import MembershipGetResponse as MembershipGetResponse

View file

@ -2,12 +2,12 @@
from __future__ import annotations
from .aaa_history import AaaHistory as AaaHistory
from .aaa_policies import AaaPolicies as AaaPolicies
from .history_list_params import HistoryListParams as HistoryListParams
from .policy_get_response import PolicyGetResponse as PolicyGetResponse
from .policy_create_params import PolicyCreateParams as PolicyCreateParams
from .policy_list_response import PolicyListResponse as PolicyListResponse
from .policy_update_params import PolicyUpdateParams as PolicyUpdateParams
from .history_list_response import HistoryListResponse as HistoryListResponse
from .policy_create_response import PolicyCreateResponse as PolicyCreateResponse
from .policy_delete_response import PolicyDeleteResponse as PolicyDeleteResponse
from .policy_update_response import PolicyUpdateResponse as PolicyUpdateResponse

View file

@ -6,10 +6,10 @@ from typing_extensions import Literal
from ...._models import BaseModel
__all__ = ["HistoryListResponse"]
__all__ = ["AaaHistory"]
class HistoryListResponse(BaseModel):
class AaaHistory(BaseModel):
id: Optional[str] = None
"""UUID"""

View file

@ -6,7 +6,7 @@ from typing_extensions import Literal
from ...._models import BaseModel
__all__ = ["PolicyGetResponse", "Filters", "Mechanisms"]
__all__ = ["AaaPolicies", "Filters", "Mechanisms"]
class Filters(BaseModel):
@ -17,10 +17,7 @@ class Filters(BaseModel):
"""Used for configuring radar_notification"""
affected_components: Optional[List[str]] = None
"""Used for configuring incident_alert.
A list of identifiers for each component to monitor.
"""
"""Used for configuring incident_alert"""
affected_locations: Optional[List[str]] = None
"""Used for configuring radar_notification"""
@ -145,7 +142,7 @@ class Mechanisms(BaseModel):
"""UUID"""
class PolicyGetResponse(BaseModel):
class AaaPolicies(BaseModel):
id: Optional[str] = None
"""The unique identifier of a notification policy"""
@ -200,7 +197,6 @@ class PolicyGetResponse(BaseModel):
"secondary_dns_zone_validation_warning",
"sentinel_alert",
"stream_live_notifications",
"traffic_anomalies_alert",
"tunnel_health_event",
"tunnel_update_event",
"universal_ssl_event_type",

View file

@ -2,7 +2,8 @@
from __future__ import annotations
from .webhook_get_response import WebhookGetResponse as WebhookGetResponse
from .aaa_webhooks import AaaWebhooks as AaaWebhooks
from .aaa_pagerduty import AaaPagerduty as AaaPagerduty
from .eligible_get_response import EligibleGetResponse as EligibleGetResponse
from .webhook_create_params import WebhookCreateParams as WebhookCreateParams
from .webhook_list_response import WebhookListResponse as WebhookListResponse

View file

@ -0,0 +1,15 @@
# File generated from our OpenAPI spec by Stainless.
from typing import Optional
from ....._models import BaseModel
__all__ = ["AaaPagerduty"]
class AaaPagerduty(BaseModel):
id: Optional[str] = None
"""UUID"""
name: Optional[str] = None
"""The name of the pagerduty service."""

View file

@ -6,10 +6,10 @@ from typing_extensions import Literal
from ....._models import BaseModel
__all__ = ["WebhookGetResponse"]
__all__ = ["AaaWebhooks"]
class WebhookGetResponse(BaseModel):
class AaaWebhooks(BaseModel):
id: Optional[str] = None
"""The unique identifier of a webhook"""

View file

@ -9,4 +9,4 @@ __all__ = ["PagerdutyCreateResponse"]
class PagerdutyCreateResponse(BaseModel):
id: Optional[str] = None
"""token in form of UUID"""
"""UUID"""

View file

@ -1,18 +1,9 @@
# File generated from our OpenAPI spec by Stainless.
from typing import List, Optional
from typing import List
from ....._models import BaseModel
from .aaa_pagerduty import AaaPagerduty
__all__ = ["PagerdutyGetResponse", "PagerdutyGetResponseItem"]
__all__ = ["PagerdutyGetResponse"]
class PagerdutyGetResponseItem(BaseModel):
id: Optional[str] = None
"""UUID"""
name: Optional[str] = None
"""The name of the pagerduty service."""
PagerdutyGetResponse = List[PagerdutyGetResponseItem]
PagerdutyGetResponse = List[AaaPagerduty]

View file

@ -1,52 +1,9 @@
# File generated from our OpenAPI spec by Stainless.
from typing import List, Optional
from datetime import datetime
from typing_extensions import Literal
from typing import List
from ....._models import BaseModel
from .aaa_webhooks import AaaWebhooks
__all__ = ["WebhookListResponse", "WebhookListResponseItem"]
__all__ = ["WebhookListResponse"]
class WebhookListResponseItem(BaseModel):
id: Optional[str] = None
"""The unique identifier of a webhook"""
created_at: Optional[datetime] = None
"""Timestamp of when the webhook destination was created."""
last_failure: Optional[datetime] = None
"""
Timestamp of the last time an attempt to dispatch a notification to this webhook
failed.
"""
last_success: Optional[datetime] = None
"""
Timestamp of the last time Cloudflare was able to successfully dispatch a
notification using this webhook.
"""
name: Optional[str] = None
"""The name of the webhook destination.
This will be included in the request body when you receive a webhook
notification.
"""
secret: Optional[str] = None
"""
Optional secret that will be passed in the `cf-webhook-auth` header when
dispatching generic webhook notifications or formatted for supported
destinations. Secrets are not returned in any API response body.
"""
type: Optional[Literal["slack", "generic", "gchat"]] = None
"""Type of webhook endpoint."""
url: Optional[str] = None
"""The POST endpoint to call when dispatching a notification."""
WebhookListResponse = List[WebhookListResponseItem]
WebhookListResponse = List[AaaWebhooks]

View file

@ -63,7 +63,6 @@ class PolicyCreateParams(TypedDict, total=False):
"secondary_dns_zone_validation_warning",
"sentinel_alert",
"stream_live_notifications",
"traffic_anomalies_alert",
"tunnel_health_event",
"tunnel_update_event",
"universal_ssl_event_type",
@ -113,10 +112,7 @@ class Filters(TypedDict, total=False):
"""Used for configuring radar_notification"""
affected_components: List[str]
"""Used for configuring incident_alert.
A list of identifiers for each component to monitor.
"""
"""Used for configuring incident_alert"""
affected_locations: List[str]
"""Used for configuring radar_notification"""

View file

@ -1,249 +1,9 @@
# File generated from our OpenAPI spec by Stainless.
from typing import Dict, List, Union, Optional
from datetime import datetime
from typing_extensions import Literal
from typing import List
from ...._models import BaseModel
from .aaa_policies import AaaPolicies
__all__ = [
"PolicyListResponse",
"PolicyListResponseItem",
"PolicyListResponseItemFilters",
"PolicyListResponseItemMechanisms",
]
__all__ = ["PolicyListResponse"]
class PolicyListResponseItemFilters(BaseModel):
actions: Optional[List[str]] = None
"""Usage depends on specific alert type"""
affected_asns: Optional[List[str]] = None
"""Used for configuring radar_notification"""
affected_components: Optional[List[str]] = None
"""Used for configuring incident_alert.
A list of identifiers for each component to monitor.
"""
affected_locations: Optional[List[str]] = None
"""Used for configuring radar_notification"""
airport_code: Optional[List[str]] = None
"""Used for configuring maintenance_event_notification"""
alert_trigger_preferences: Optional[List[str]] = None
"""Usage depends on specific alert type"""
alert_trigger_preferences_value: Optional[List[Literal["99.0", "98.0", "97.0"]]] = None
"""Used for configuring magic_tunnel_health_check_event"""
enabled: Optional[List[str]] = None
"""Used for configuring load_balancing_pool_enablement_alert"""
environment: Optional[List[str]] = None
"""Used for configuring pages_event_alert"""
event: Optional[List[str]] = None
"""Used for configuring pages_event_alert"""
event_source: Optional[List[str]] = None
"""Used for configuring load_balancing_health_alert"""
event_type: Optional[List[str]] = None
"""Usage depends on specific alert type"""
group_by: Optional[List[str]] = None
"""Usage depends on specific alert type"""
health_check_id: Optional[List[str]] = None
"""Used for configuring health_check_status_notification"""
incident_impact: Optional[
List[
Literal[
"INCIDENT_IMPACT_NONE", "INCIDENT_IMPACT_MINOR", "INCIDENT_IMPACT_MAJOR", "INCIDENT_IMPACT_CRITICAL"
]
]
] = None
"""Used for configuring incident_alert"""
input_id: Optional[List[str]] = None
"""Used for configuring stream_live_notifications"""
limit: Optional[List[str]] = None
"""Used for configuring billing_usage_alert"""
logo_tag: Optional[List[str]] = None
"""Used for configuring logo_match_alert"""
megabits_per_second: Optional[List[str]] = None
"""Used for configuring advanced_ddos_attack_l4_alert"""
new_health: Optional[List[str]] = None
"""Used for configuring load_balancing_health_alert"""
new_status: Optional[List[str]] = None
"""Used for configuring tunnel_health_event"""
packets_per_second: Optional[List[str]] = None
"""Used for configuring advanced_ddos_attack_l4_alert"""
pool_id: Optional[List[str]] = None
"""Usage depends on specific alert type"""
product: Optional[List[str]] = None
"""Used for configuring billing_usage_alert"""
project_id: Optional[List[str]] = None
"""Used for configuring pages_event_alert"""
protocol: Optional[List[str]] = None
"""Used for configuring advanced_ddos_attack_l4_alert"""
query_tag: Optional[List[str]] = None
"""Usage depends on specific alert type"""
requests_per_second: Optional[List[str]] = None
"""Used for configuring advanced_ddos_attack_l7_alert"""
selectors: Optional[List[str]] = None
"""Usage depends on specific alert type"""
services: Optional[List[str]] = None
"""Used for configuring clickhouse_alert_fw_ent_anomaly"""
slo: Optional[List[str]] = None
"""Usage depends on specific alert type"""
status: Optional[List[str]] = None
"""Used for configuring health_check_status_notification"""
target_hostname: Optional[List[str]] = None
"""Used for configuring advanced_ddos_attack_l7_alert"""
target_ip: Optional[List[str]] = None
"""Used for configuring advanced_ddos_attack_l4_alert"""
target_zone_name: Optional[List[str]] = None
"""Used for configuring advanced_ddos_attack_l7_alert"""
traffic_exclusions: Optional[List[Literal["security_events"]]] = None
"""Used for configuring traffic_anomalies_alert"""
tunnel_id: Optional[List[str]] = None
"""Used for configuring tunnel_health_event"""
tunnel_name: Optional[List[str]] = None
"""Used for configuring magic_tunnel_health_check_event"""
where: Optional[List[str]] = None
"""Usage depends on specific alert type"""
zones: Optional[List[str]] = None
"""Usage depends on specific alert type"""
class PolicyListResponseItemMechanisms(BaseModel):
id: Union[str, str, None] = None
"""UUID"""
class PolicyListResponseItem(BaseModel):
id: Optional[str] = None
"""The unique identifier of a notification policy"""
alert_type: Optional[
Literal[
"access_custom_certificate_expiration_type",
"advanced_ddos_attack_l4_alert",
"advanced_ddos_attack_l7_alert",
"advanced_http_alert_error",
"bgp_hijack_notification",
"billing_usage_alert",
"block_notification_block_removed",
"block_notification_new_block",
"block_notification_review_rejected",
"brand_protection_alert",
"brand_protection_digest",
"clickhouse_alert_fw_anomaly",
"clickhouse_alert_fw_ent_anomaly",
"custom_ssl_certificate_event_type",
"dedicated_ssl_certificate_event_type",
"dos_attack_l4",
"dos_attack_l7",
"expiring_service_token_alert",
"failing_logpush_job_disabled_alert",
"fbm_auto_advertisement",
"fbm_dosd_attack",
"fbm_volumetric_attack",
"health_check_status_notification",
"hostname_aop_custom_certificate_expiration_type",
"http_alert_edge_error",
"http_alert_origin_error",
"incident_alert",
"load_balancing_health_alert",
"load_balancing_pool_enablement_alert",
"logo_match_alert",
"magic_tunnel_health_check_event",
"maintenance_event_notification",
"mtls_certificate_store_certificate_expiration_type",
"pages_event_alert",
"radar_notification",
"real_origin_monitoring",
"scriptmonitor_alert_new_code_change_detections",
"scriptmonitor_alert_new_hosts",
"scriptmonitor_alert_new_malicious_hosts",
"scriptmonitor_alert_new_malicious_scripts",
"scriptmonitor_alert_new_malicious_url",
"scriptmonitor_alert_new_max_length_resource_url",
"scriptmonitor_alert_new_resources",
"secondary_dns_all_primaries_failing",
"secondary_dns_primaries_failing",
"secondary_dns_zone_successfully_updated",
"secondary_dns_zone_validation_warning",
"sentinel_alert",
"stream_live_notifications",
"traffic_anomalies_alert",
"tunnel_health_event",
"tunnel_update_event",
"universal_ssl_event_type",
"web_analytics_metrics_update",
"zone_aop_custom_certificate_expiration_type",
]
] = None
"""Refers to which event will trigger a Notification dispatch.
You can use the endpoint to get available alert types which then will give you a
list of possible values.
"""
created: Optional[datetime] = None
description: Optional[str] = None
"""Optional description for the Notification policy."""
enabled: Optional[bool] = None
"""Whether or not the Notification policy is enabled."""
filters: Optional[PolicyListResponseItemFilters] = None
"""
Optional filters that allow you to be alerted only on a subset of events for
that alert type based on some criteria. This is only available for select alert
types. See alert type documentation for more details.
"""
mechanisms: Optional[Dict[str, List[PolicyListResponseItemMechanisms]]] = None
"""List of IDs that will be used when dispatching a notification.
IDs for email type will be the email address.
"""
modified: Optional[datetime] = None
name: Optional[str] = None
"""Name of the policy."""
PolicyListResponse = List[PolicyListResponseItem]
PolicyListResponse = List[AaaPolicies]

View file

@ -62,7 +62,6 @@ class PolicyUpdateParams(TypedDict, total=False):
"secondary_dns_zone_validation_warning",
"sentinel_alert",
"stream_live_notifications",
"traffic_anomalies_alert",
"tunnel_health_event",
"tunnel_update_event",
"universal_ssl_event_type",
@ -106,10 +105,7 @@ class Filters(TypedDict, total=False):
"""Used for configuring radar_notification"""
affected_components: List[str]
"""Used for configuring incident_alert.
A list of identifiers for each component to monitor.
"""
"""Used for configuring incident_alert"""
affected_locations: List[str]
"""Used for configuring radar_notification"""

View file

@ -0,0 +1,72 @@
# File generated from our OpenAPI spec by Stainless.
from __future__ import annotations
from typing import Union
from datetime import datetime
from typing_extensions import Literal, Annotated, TypedDict
from .._utils import PropertyInfo
__all__ = ["AuditLogListParams", "Action", "Actor", "Zone"]
class AuditLogListParams(TypedDict, total=False):
id: str
"""Finds a specific log by its ID."""
action: Action
actor: Actor
before: Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]
"""Limits the returned results to logs older than the specified date.
This can be a date string `2019-04-30` or an absolute timestamp that conforms to
RFC3339.
"""
direction: Literal["desc", "asc"]
"""Changes the direction of the chronological sorting."""
export: bool
"""Indicates that this request is an export of logs in CSV format."""
hide_user_logs: bool
"""Indicates whether or not to hide user level audit logs."""
page: float
"""Defines which page of results to return."""
per_page: float
"""Sets the number of results to return per page."""
since: Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]
"""Limits the returned results to logs newer than the specified date.
This can be a date string `2019-04-30` or an absolute timestamp that conforms to
RFC3339.
"""
zone: Zone
class Action(TypedDict, total=False):
type: str
"""Filters by the action type."""
class Actor(TypedDict, total=False):
email: str
"""Filters by the email address of the actor that made the change."""
ip: str
"""
Filters by the IP address of the request that made the change by specific IP
address or valid CIDR Range.
"""
class Zone(TypedDict, total=False):
name: str
"""Filters by the name of the zone associated to the change."""

View file

@ -0,0 +1,80 @@
# File generated from our OpenAPI spec by Stainless.
from typing import Optional
from datetime import datetime
from typing_extensions import Literal
from pydantic import Field as FieldInfo
from .._models import BaseModel
__all__ = ["AuditLogListResponse", "Action", "Actor", "Owner", "Resource"]
class Action(BaseModel):
result: Optional[bool] = None
"""A boolean that indicates if the action attempted was successful."""
type: Optional[str] = None
"""A short string that describes the action that was performed."""
class Actor(BaseModel):
id: Optional[str] = None
"""The ID of the actor that performed the action.
If a user performed the action, this will be their User ID.
"""
email: Optional[str] = None
"""The email of the user that performed the action."""
ip: Optional[str] = None
"""The IP address of the request that performed the action."""
type: Optional[Literal["user", "admin", "Cloudflare"]] = None
"""The type of actor, whether a User, Cloudflare Admin, or an Automated System."""
class Owner(BaseModel):
id: Optional[str] = None
"""Identifier"""
class Resource(BaseModel):
id: Optional[str] = None
"""An identifier for the resource that was affected by the action."""
type: Optional[str] = None
"""A short string that describes the resource that was affected by the action."""
class AuditLogListResponse(BaseModel):
id: Optional[str] = None
"""A string that uniquely identifies the audit log."""
action: Optional[Action] = None
actor: Optional[Actor] = None
interface: Optional[str] = None
"""The source of the event."""
metadata: Optional[object] = None
"""An object which can lend more context to the action being logged.
This is a flexible value and varies between different actions.
"""
new_value: Optional[str] = FieldInfo(alias="newValue", default=None)
"""The new value of the resource that was modified."""
old_value: Optional[str] = FieldInfo(alias="oldValue", default=None)
"""The value of the resource before it was modified."""
owner: Optional[Owner] = None
resource: Optional[Resource] = None
when: Optional[datetime] = None
"""A UTC RFC3339 timestamp that specifies when the action being logged occured."""

View file

@ -10,7 +10,7 @@ import pytest
from cloudflare import Cloudflare, AsyncCloudflare
from tests.utils import assert_matches_type
from cloudflare.types.alerting.v3.destinations import (
WebhookGetResponse,
AaaWebhooks,
WebhookListResponse,
WebhookCreateResponse,
WebhookDeleteResponse,
@ -259,7 +259,7 @@ class TestWebhooks:
"b115d5ec-15c6-41ee-8b76-92c449b5227b",
account_id="023e105f4ecef8ad9ca31a8372d0c353",
)
assert_matches_type(WebhookGetResponse, webhook, path=["response"])
assert_matches_type(AaaWebhooks, webhook, path=["response"])
@pytest.mark.skip()
@parametrize
@ -272,7 +272,7 @@ class TestWebhooks:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
webhook = response.parse()
assert_matches_type(WebhookGetResponse, webhook, path=["response"])
assert_matches_type(AaaWebhooks, webhook, path=["response"])
@pytest.mark.skip()
@parametrize
@ -285,7 +285,7 @@ class TestWebhooks:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
webhook = response.parse()
assert_matches_type(WebhookGetResponse, webhook, path=["response"])
assert_matches_type(AaaWebhooks, webhook, path=["response"])
assert cast(Any, response.is_closed) is True
@ -544,7 +544,7 @@ class TestAsyncWebhooks:
"b115d5ec-15c6-41ee-8b76-92c449b5227b",
account_id="023e105f4ecef8ad9ca31a8372d0c353",
)
assert_matches_type(WebhookGetResponse, webhook, path=["response"])
assert_matches_type(AaaWebhooks, webhook, path=["response"])
@pytest.mark.skip()
@parametrize
@ -557,7 +557,7 @@ class TestAsyncWebhooks:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
webhook = await response.parse()
assert_matches_type(WebhookGetResponse, webhook, path=["response"])
assert_matches_type(AaaWebhooks, webhook, path=["response"])
@pytest.mark.skip()
@parametrize
@ -570,7 +570,7 @@ class TestAsyncWebhooks:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
webhook = await response.parse()
assert_matches_type(WebhookGetResponse, webhook, path=["response"])
assert_matches_type(AaaWebhooks, webhook, path=["response"])
assert cast(Any, response.is_closed) is True

View file

@ -11,7 +11,7 @@ from cloudflare import Cloudflare, AsyncCloudflare
from tests.utils import assert_matches_type
from cloudflare._utils import parse_datetime
from cloudflare.pagination import SyncV4PagePaginationArray, AsyncV4PagePaginationArray
from cloudflare.types.alerting.v3 import HistoryListResponse
from cloudflare.types.alerting.v3 import AaaHistory
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
@ -25,7 +25,7 @@ class TestHistories:
history = client.alerting.v3.histories.list(
account_id="023e105f4ecef8ad9ca31a8372d0c353",
)
assert_matches_type(SyncV4PagePaginationArray[HistoryListResponse], history, path=["response"])
assert_matches_type(SyncV4PagePaginationArray[AaaHistory], history, path=["response"])
@pytest.mark.skip()
@parametrize
@ -37,7 +37,7 @@ class TestHistories:
per_page=5,
since=parse_datetime("2022-05-19T20:29:58.679897Z"),
)
assert_matches_type(SyncV4PagePaginationArray[HistoryListResponse], history, path=["response"])
assert_matches_type(SyncV4PagePaginationArray[AaaHistory], history, path=["response"])
@pytest.mark.skip()
@parametrize
@ -49,7 +49,7 @@ class TestHistories:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
history = response.parse()
assert_matches_type(SyncV4PagePaginationArray[HistoryListResponse], history, path=["response"])
assert_matches_type(SyncV4PagePaginationArray[AaaHistory], history, path=["response"])
@pytest.mark.skip()
@parametrize
@ -61,7 +61,7 @@ class TestHistories:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
history = response.parse()
assert_matches_type(SyncV4PagePaginationArray[HistoryListResponse], history, path=["response"])
assert_matches_type(SyncV4PagePaginationArray[AaaHistory], history, path=["response"])
assert cast(Any, response.is_closed) is True
@ -83,7 +83,7 @@ class TestAsyncHistories:
history = await async_client.alerting.v3.histories.list(
account_id="023e105f4ecef8ad9ca31a8372d0c353",
)
assert_matches_type(AsyncV4PagePaginationArray[HistoryListResponse], history, path=["response"])
assert_matches_type(AsyncV4PagePaginationArray[AaaHistory], history, path=["response"])
@pytest.mark.skip()
@parametrize
@ -95,7 +95,7 @@ class TestAsyncHistories:
per_page=5,
since=parse_datetime("2022-05-19T20:29:58.679897Z"),
)
assert_matches_type(AsyncV4PagePaginationArray[HistoryListResponse], history, path=["response"])
assert_matches_type(AsyncV4PagePaginationArray[AaaHistory], history, path=["response"])
@pytest.mark.skip()
@parametrize
@ -107,7 +107,7 @@ class TestAsyncHistories:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
history = await response.parse()
assert_matches_type(AsyncV4PagePaginationArray[HistoryListResponse], history, path=["response"])
assert_matches_type(AsyncV4PagePaginationArray[AaaHistory], history, path=["response"])
@pytest.mark.skip()
@parametrize
@ -119,7 +119,7 @@ class TestAsyncHistories:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
history = await response.parse()
assert_matches_type(AsyncV4PagePaginationArray[HistoryListResponse], history, path=["response"])
assert_matches_type(AsyncV4PagePaginationArray[AaaHistory], history, path=["response"])
assert cast(Any, response.is_closed) is True

View file

@ -10,7 +10,7 @@ import pytest
from cloudflare import Cloudflare, AsyncCloudflare
from tests.utils import assert_matches_type
from cloudflare.types.alerting.v3 import (
PolicyGetResponse,
AaaPolicies,
PolicyListResponse,
PolicyCreateResponse,
PolicyDeleteResponse,
@ -369,7 +369,7 @@ class TestPolicies:
"0da2b59e-f118-439d-8097-bdfb215203c9",
account_id="023e105f4ecef8ad9ca31a8372d0c353",
)
assert_matches_type(PolicyGetResponse, policy, path=["response"])
assert_matches_type(AaaPolicies, policy, path=["response"])
@pytest.mark.skip()
@parametrize
@ -382,7 +382,7 @@ class TestPolicies:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
policy = response.parse()
assert_matches_type(PolicyGetResponse, policy, path=["response"])
assert_matches_type(AaaPolicies, policy, path=["response"])
@pytest.mark.skip()
@parametrize
@ -395,7 +395,7 @@ class TestPolicies:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
policy = response.parse()
assert_matches_type(PolicyGetResponse, policy, path=["response"])
assert_matches_type(AaaPolicies, policy, path=["response"])
assert cast(Any, response.is_closed) is True
@ -764,7 +764,7 @@ class TestAsyncPolicies:
"0da2b59e-f118-439d-8097-bdfb215203c9",
account_id="023e105f4ecef8ad9ca31a8372d0c353",
)
assert_matches_type(PolicyGetResponse, policy, path=["response"])
assert_matches_type(AaaPolicies, policy, path=["response"])
@pytest.mark.skip()
@parametrize
@ -777,7 +777,7 @@ class TestAsyncPolicies:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
policy = await response.parse()
assert_matches_type(PolicyGetResponse, policy, path=["response"])
assert_matches_type(AaaPolicies, policy, path=["response"])
@pytest.mark.skip()
@parametrize
@ -790,7 +790,7 @@ class TestAsyncPolicies:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
policy = await response.parse()
assert_matches_type(PolicyGetResponse, policy, path=["response"])
assert_matches_type(AaaPolicies, policy, path=["response"])
assert cast(Any, response.is_closed) is True

View file

@ -0,0 +1,152 @@
# File generated from our OpenAPI spec by Stainless.
from __future__ import annotations
import os
from typing import Any, cast
import pytest
from cloudflare import Cloudflare, AsyncCloudflare
from tests.utils import assert_matches_type
from cloudflare.types import AuditLogListResponse
from cloudflare._utils import parse_datetime
from cloudflare.pagination import SyncV4PagePaginationArray, AsyncV4PagePaginationArray
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
class TestAuditLogs:
parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
@pytest.mark.skip()
@parametrize
def test_method_list(self, client: Cloudflare) -> None:
audit_log = client.audit_logs.list(
"023e105f4ecef8ad9ca31a8372d0c353",
)
assert_matches_type(SyncV4PagePaginationArray[AuditLogListResponse], audit_log, path=["response"])
@pytest.mark.skip()
@parametrize
def test_method_list_with_all_params(self, client: Cloudflare) -> None:
audit_log = client.audit_logs.list(
"023e105f4ecef8ad9ca31a8372d0c353",
id="f174be97-19b1-40d6-954d-70cd5fbd52db",
action={"type": "add"},
actor={
"ip": "17.168.228.63",
"email": "alice@example.com",
},
before=parse_datetime("2019-04-30T01:12:20Z"),
direction="desc",
export=True,
hide_user_logs=True,
page=50,
per_page=25,
since=parse_datetime("2019-04-30T01:12:20Z"),
zone={"name": "example.com"},
)
assert_matches_type(SyncV4PagePaginationArray[AuditLogListResponse], audit_log, path=["response"])
@pytest.mark.skip()
@parametrize
def test_raw_response_list(self, client: Cloudflare) -> None:
response = client.audit_logs.with_raw_response.list(
"023e105f4ecef8ad9ca31a8372d0c353",
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
audit_log = response.parse()
assert_matches_type(SyncV4PagePaginationArray[AuditLogListResponse], audit_log, path=["response"])
@pytest.mark.skip()
@parametrize
def test_streaming_response_list(self, client: Cloudflare) -> None:
with client.audit_logs.with_streaming_response.list(
"023e105f4ecef8ad9ca31a8372d0c353",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
audit_log = response.parse()
assert_matches_type(SyncV4PagePaginationArray[AuditLogListResponse], audit_log, path=["response"])
assert cast(Any, response.is_closed) is True
@pytest.mark.skip()
@parametrize
def test_path_params_list(self, client: Cloudflare) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `account_identifier` but received ''"):
client.audit_logs.with_raw_response.list(
"",
)
class TestAsyncAuditLogs:
parametrize = pytest.mark.parametrize("async_client", [False, True], indirect=True, ids=["loose", "strict"])
@pytest.mark.skip()
@parametrize
async def test_method_list(self, async_client: AsyncCloudflare) -> None:
audit_log = await async_client.audit_logs.list(
"023e105f4ecef8ad9ca31a8372d0c353",
)
assert_matches_type(AsyncV4PagePaginationArray[AuditLogListResponse], audit_log, path=["response"])
@pytest.mark.skip()
@parametrize
async def test_method_list_with_all_params(self, async_client: AsyncCloudflare) -> None:
audit_log = await async_client.audit_logs.list(
"023e105f4ecef8ad9ca31a8372d0c353",
id="f174be97-19b1-40d6-954d-70cd5fbd52db",
action={"type": "add"},
actor={
"ip": "17.168.228.63",
"email": "alice@example.com",
},
before=parse_datetime("2019-04-30T01:12:20Z"),
direction="desc",
export=True,
hide_user_logs=True,
page=50,
per_page=25,
since=parse_datetime("2019-04-30T01:12:20Z"),
zone={"name": "example.com"},
)
assert_matches_type(AsyncV4PagePaginationArray[AuditLogListResponse], audit_log, path=["response"])
@pytest.mark.skip()
@parametrize
async def test_raw_response_list(self, async_client: AsyncCloudflare) -> None:
response = await async_client.audit_logs.with_raw_response.list(
"023e105f4ecef8ad9ca31a8372d0c353",
)
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
audit_log = await response.parse()
assert_matches_type(AsyncV4PagePaginationArray[AuditLogListResponse], audit_log, path=["response"])
@pytest.mark.skip()
@parametrize
async def test_streaming_response_list(self, async_client: AsyncCloudflare) -> None:
async with async_client.audit_logs.with_streaming_response.list(
"023e105f4ecef8ad9ca31a8372d0c353",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
audit_log = await response.parse()
assert_matches_type(AsyncV4PagePaginationArray[AuditLogListResponse], audit_log, path=["response"])
assert cast(Any, response.is_closed) is True
@pytest.mark.skip()
@parametrize
async def test_path_params_list(self, async_client: AsyncCloudflare) -> None:
with pytest.raises(ValueError, match=r"Expected a non-empty value for `account_identifier` but received ''"):
await async_client.audit_logs.with_raw_response.list(
"",
)