From 4cf63cd98e74081529126eef88c5aa7af7b49c29 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 29 May 2024 03:02:55 +0000
Subject: [PATCH] feat(api): update via SDK Studio (#667)
---
.stats.yml | 4 +-
api.md | 40 ++-
scripts/bootstrap | 2 +-
.../cloudforce_one/requests/message.py | 76 ++---
.../cloudforce_one/requests/priority.py | 88 +++---
.../cloudforce_one/requests/requests.py | 112 +++-----
src/cloudflare/resources/intel/whois.py | 14 +-
.../resources/radar/bgp/__init__.py | 14 +
src/cloudflare/resources/radar/bgp/bgp.py | 32 +++
src/cloudflare/resources/radar/bgp/ips.py | 267 ++++++++++++++++++
.../cloudforce_one/request_delete_response.py | 15 +-
.../requests/message_delete_response.py | 15 +-
.../requests/priority_delete_response.py | 15 +-
src/cloudflare/types/radar/bgp/__init__.py | 2 +
.../types/radar/bgp/ip_timeseries_params.py | 59 ++++
.../types/radar/bgp/ip_timeseries_response.py | 46 +++
.../cloudforce_one/requests/test_message.py | 50 ++--
.../cloudforce_one/requests/test_priority.py | 50 ++--
.../cloudforce_one/test_requests.py | 82 +++---
tests/api_resources/intel/test_whois.py | 18 +-
tests/api_resources/radar/bgp/test_ips.py | 101 +++++++
21 files changed, 807 insertions(+), 295 deletions(-)
create mode 100644 src/cloudflare/resources/radar/bgp/ips.py
create mode 100644 src/cloudflare/types/radar/bgp/ip_timeseries_params.py
create mode 100644 src/cloudflare/types/radar/bgp/ip_timeseries_response.py
create mode 100644 tests/api_resources/radar/bgp/test_ips.py
diff --git a/.stats.yml b/.stats.yml
index b6fc8e2dd..0efb49b67 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,2 +1,2 @@
-configured_endpoints: 1318
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/cloudflare%2Fcloudflare-ad688c70f1586b01810d8388213f79137ea8d7158d069b883fa4a9fefee01a2a.yml
+configured_endpoints: 1319
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/cloudflare%2Fcloudflare-79996c6f0ba6a97a922883584d2308844300e95b758ed40ac16fb6db09b3c5fa.yml
diff --git a/api.md b/api.md
index 04a95f584..03a403900 100644
--- a/api.md
+++ b/api.md
@@ -3795,7 +3795,7 @@ from cloudflare.types.intel import Whois, WhoisGetResponse
Methods:
-- client.intel.whois.get(\*, account_id, \*\*params) -> WhoisGetResponse
+- client.intel.whois.get(\*, account_id, \*\*params) -> Optional
## IndicatorFeeds
@@ -6425,6 +6425,18 @@ Methods:
- client.radar.bgp.routes.pfx2as(\*\*params) -> RoutePfx2asResponse
- client.radar.bgp.routes.stats(\*\*params) -> RouteStatsResponse
+### IPs
+
+Types:
+
+```python
+from cloudflare.types.radar.bgp import IPTimeseriesResponse
+```
+
+Methods:
+
+- client.radar.bgp.ips.timeseries(\*\*params) -> IPTimeseriesResponse
+
## Datasets
Types:
@@ -7628,14 +7640,14 @@ from cloudflare.types.cloudforce_one import (
Methods:
-- client.cloudforce_one.requests.create(account_identifier, \*\*params) -> Item
-- client.cloudforce_one.requests.update(request_identifier, \*, account_identifier, \*\*params) -> Item
+- client.cloudforce_one.requests.create(account_identifier, \*\*params) -> Optional
+- client.cloudforce_one.requests.update(request_identifier, \*, account_identifier, \*\*params) -> Optional
- client.cloudforce_one.requests.list(account_identifier, \*\*params) -> SyncV4PagePaginationArray[ListItem]
- client.cloudforce_one.requests.delete(request_identifier, \*, account_identifier) -> RequestDeleteResponse
-- client.cloudforce_one.requests.constants(account_identifier) -> RequestConstants
-- client.cloudforce_one.requests.get(request_identifier, \*, account_identifier) -> Item
-- client.cloudforce_one.requests.quota(account_identifier) -> Quota
-- client.cloudforce_one.requests.types(account_identifier) -> RequestTypes
+- client.cloudforce_one.requests.constants(account_identifier) -> Optional
+- client.cloudforce_one.requests.get(request_identifier, \*, account_identifier) -> Optional
+- client.cloudforce_one.requests.quota(account_identifier) -> Optional
+- client.cloudforce_one.requests.types(account_identifier) -> Optional
### Message
@@ -7651,10 +7663,10 @@ from cloudflare.types.cloudforce_one.requests import (
Methods:
-- client.cloudforce_one.requests.message.create(request_identifier, \*, account_identifier, \*\*params) -> Message
-- client.cloudforce_one.requests.message.update(message_identifer, \*, account_identifier, request_identifier, \*\*params) -> Message
+- client.cloudforce_one.requests.message.create(request_identifier, \*, account_identifier, \*\*params) -> Optional
+- client.cloudforce_one.requests.message.update(message_identifer, \*, account_identifier, request_identifier, \*\*params) -> Optional
- client.cloudforce_one.requests.message.delete(message_identifer, \*, account_identifier, request_identifier) -> MessageDeleteResponse
-- client.cloudforce_one.requests.message.get(request_identifier, \*, account_identifier, \*\*params) -> MessageGetResponse
+- client.cloudforce_one.requests.message.get(request_identifier, \*, account_identifier, \*\*params) -> Optional
### Priority
@@ -7671,11 +7683,11 @@ from cloudflare.types.cloudforce_one.requests import (
Methods:
-- client.cloudforce_one.requests.priority.create(account_identifier, \*\*params) -> Priority
-- client.cloudforce_one.requests.priority.update(priority_identifer, \*, account_identifier, \*\*params) -> Item
+- client.cloudforce_one.requests.priority.create(account_identifier, \*\*params) -> Optional
+- client.cloudforce_one.requests.priority.update(priority_identifer, \*, account_identifier, \*\*params) -> Optional
- client.cloudforce_one.requests.priority.delete(priority_identifer, \*, account_identifier) -> PriorityDeleteResponse
-- client.cloudforce_one.requests.priority.get(priority_identifer, \*, account_identifier) -> Item
-- client.cloudforce_one.requests.priority.quota(account_identifier) -> Quota
+- client.cloudforce_one.requests.priority.get(priority_identifer, \*, account_identifier) -> Optional
+- client.cloudforce_one.requests.priority.quota(account_identifier) -> Optional
# EventNotifications
diff --git a/scripts/bootstrap b/scripts/bootstrap
index 29df07e77..8c5c60eba 100755
--- a/scripts/bootstrap
+++ b/scripts/bootstrap
@@ -16,4 +16,4 @@ echo "==> Installing Python dependencies…"
# experimental uv support makes installations significantly faster
rye config --set-bool behavior.use-uv=true
-rye sync
+rye sync --all-features
diff --git a/src/cloudflare/resources/cloudforce_one/requests/message.py b/src/cloudflare/resources/cloudforce_one/requests/message.py
index eaea1a987..177e2c5b0 100644
--- a/src/cloudflare/resources/cloudforce_one/requests/message.py
+++ b/src/cloudflare/resources/cloudforce_one/requests/message.py
@@ -2,7 +2,7 @@
from __future__ import annotations
-from typing import Any, Type, Union, cast
+from typing import Type, Union, Optional, cast
from datetime import datetime
from typing_extensions import Literal
@@ -54,7 +54,7 @@ class MessageResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Message:
+ ) -> Optional[Message]:
"""
Creating a request adds the request into the Cloudforce One queue for analysis.
In addition to the content, a short title, type, priority, and releasability
@@ -87,9 +87,9 @@ class MessageResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Message]._unwrapper,
+ post_parser=ResultWrapper[Optional[Message]]._unwrapper,
),
- cast_to=cast(Type[Message], ResultWrapper[Message]),
+ cast_to=cast(Type[Optional[Message]], ResultWrapper[Message]),
)
def update(
@@ -109,7 +109,7 @@ class MessageResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Message:
+ ) -> Optional[Message]:
"""
Update a Request Message
@@ -157,9 +157,9 @@ class MessageResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Message]._unwrapper,
+ post_parser=ResultWrapper[Optional[Message]]._unwrapper,
),
- cast_to=cast(Type[Message], ResultWrapper[Message]),
+ cast_to=cast(Type[Optional[Message]], ResultWrapper[Message]),
)
def delete(
@@ -195,21 +195,12 @@ class MessageResource(SyncAPIResource):
raise ValueError(f"Expected a non-empty value for `account_identifier` but received {account_identifier!r}")
if not request_identifier:
raise ValueError(f"Expected a non-empty value for `request_identifier` but received {request_identifier!r}")
- return cast(
- MessageDeleteResponse,
- self._delete(
- f"/accounts/{account_identifier}/cloudforce-one/requests/{request_identifier}/message/{message_identifer}",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- post_parser=ResultWrapper[MessageDeleteResponse]._unwrapper,
- ),
- cast_to=cast(
- Any, ResultWrapper[MessageDeleteResponse]
- ), # Union types cannot be passed in as arguments in the type system
+ return self._delete(
+ f"/accounts/{account_identifier}/cloudforce-one/requests/{request_identifier}/message/{message_identifer}",
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
+ cast_to=MessageDeleteResponse,
)
def get(
@@ -229,7 +220,7 @@ class MessageResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> MessageGetResponse:
+ ) -> Optional[MessageGetResponse]:
"""
List Request Messages
@@ -280,9 +271,9 @@ class MessageResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[MessageGetResponse]._unwrapper,
+ post_parser=ResultWrapper[Optional[MessageGetResponse]]._unwrapper,
),
- cast_to=cast(Type[MessageGetResponse], ResultWrapper[MessageGetResponse]),
+ cast_to=cast(Type[Optional[MessageGetResponse]], ResultWrapper[MessageGetResponse]),
)
@@ -307,7 +298,7 @@ class AsyncMessageResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Message:
+ ) -> Optional[Message]:
"""
Creating a request adds the request into the Cloudforce One queue for analysis.
In addition to the content, a short title, type, priority, and releasability
@@ -340,9 +331,9 @@ class AsyncMessageResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Message]._unwrapper,
+ post_parser=ResultWrapper[Optional[Message]]._unwrapper,
),
- cast_to=cast(Type[Message], ResultWrapper[Message]),
+ cast_to=cast(Type[Optional[Message]], ResultWrapper[Message]),
)
async def update(
@@ -362,7 +353,7 @@ class AsyncMessageResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Message:
+ ) -> Optional[Message]:
"""
Update a Request Message
@@ -410,9 +401,9 @@ class AsyncMessageResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Message]._unwrapper,
+ post_parser=ResultWrapper[Optional[Message]]._unwrapper,
),
- cast_to=cast(Type[Message], ResultWrapper[Message]),
+ cast_to=cast(Type[Optional[Message]], ResultWrapper[Message]),
)
async def delete(
@@ -448,21 +439,12 @@ class AsyncMessageResource(AsyncAPIResource):
raise ValueError(f"Expected a non-empty value for `account_identifier` but received {account_identifier!r}")
if not request_identifier:
raise ValueError(f"Expected a non-empty value for `request_identifier` but received {request_identifier!r}")
- return cast(
- MessageDeleteResponse,
- await self._delete(
- f"/accounts/{account_identifier}/cloudforce-one/requests/{request_identifier}/message/{message_identifer}",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- post_parser=ResultWrapper[MessageDeleteResponse]._unwrapper,
- ),
- cast_to=cast(
- Any, ResultWrapper[MessageDeleteResponse]
- ), # Union types cannot be passed in as arguments in the type system
+ return await self._delete(
+ f"/accounts/{account_identifier}/cloudforce-one/requests/{request_identifier}/message/{message_identifer}",
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
+ cast_to=MessageDeleteResponse,
)
async def get(
@@ -482,7 +464,7 @@ class AsyncMessageResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> MessageGetResponse:
+ ) -> Optional[MessageGetResponse]:
"""
List Request Messages
@@ -533,9 +515,9 @@ class AsyncMessageResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[MessageGetResponse]._unwrapper,
+ post_parser=ResultWrapper[Optional[MessageGetResponse]]._unwrapper,
),
- cast_to=cast(Type[MessageGetResponse], ResultWrapper[MessageGetResponse]),
+ cast_to=cast(Type[Optional[MessageGetResponse]], ResultWrapper[MessageGetResponse]),
)
diff --git a/src/cloudflare/resources/cloudforce_one/requests/priority.py b/src/cloudflare/resources/cloudforce_one/requests/priority.py
index 0f1d6795a..243e43f78 100644
--- a/src/cloudflare/resources/cloudforce_one/requests/priority.py
+++ b/src/cloudflare/resources/cloudforce_one/requests/priority.py
@@ -2,7 +2,7 @@
from __future__ import annotations
-from typing import Any, List, Type, cast
+from typing import List, Type, Optional, cast
from typing_extensions import Literal
import httpx
@@ -57,7 +57,7 @@ class PriorityResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Priority:
+ ) -> Optional[Priority]:
"""
Create a New Priority Requirement
@@ -98,9 +98,9 @@ class PriorityResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Priority]._unwrapper,
+ post_parser=ResultWrapper[Optional[Priority]]._unwrapper,
),
- cast_to=cast(Type[Priority], ResultWrapper[Priority]),
+ cast_to=cast(Type[Optional[Priority]], ResultWrapper[Priority]),
)
def update(
@@ -118,7 +118,7 @@ class PriorityResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Item:
+ ) -> Optional[Item]:
"""
Update a Priority Intelligence Requirement
@@ -163,9 +163,9 @@ class PriorityResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Item]._unwrapper,
+ post_parser=ResultWrapper[Optional[Item]]._unwrapper,
),
- cast_to=cast(Type[Item], ResultWrapper[Item]),
+ cast_to=cast(Type[Optional[Item]], ResultWrapper[Item]),
)
def delete(
@@ -200,21 +200,12 @@ class PriorityResource(SyncAPIResource):
raise ValueError(f"Expected a non-empty value for `account_identifier` but received {account_identifier!r}")
if not priority_identifer:
raise ValueError(f"Expected a non-empty value for `priority_identifer` but received {priority_identifer!r}")
- return cast(
- PriorityDeleteResponse,
- self._delete(
- f"/accounts/{account_identifier}/cloudforce-one/requests/priority/{priority_identifer}",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- post_parser=ResultWrapper[PriorityDeleteResponse]._unwrapper,
- ),
- cast_to=cast(
- Any, ResultWrapper[PriorityDeleteResponse]
- ), # Union types cannot be passed in as arguments in the type system
+ return self._delete(
+ f"/accounts/{account_identifier}/cloudforce-one/requests/priority/{priority_identifer}",
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
+ cast_to=PriorityDeleteResponse,
)
def get(
@@ -228,7 +219,7 @@ class PriorityResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Item:
+ ) -> Optional[Item]:
"""
Get a Priority Intelligence Requirement
@@ -256,9 +247,9 @@ class PriorityResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Item]._unwrapper,
+ post_parser=ResultWrapper[Optional[Item]]._unwrapper,
),
- cast_to=cast(Type[Item], ResultWrapper[Item]),
+ cast_to=cast(Type[Optional[Item]], ResultWrapper[Item]),
)
def quota(
@@ -271,7 +262,7 @@ class PriorityResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Quota:
+ ) -> Optional[Quota]:
"""
Get Priority Intelligence Requirement Quota
@@ -295,9 +286,9 @@ class PriorityResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Quota]._unwrapper,
+ post_parser=ResultWrapper[Optional[Quota]]._unwrapper,
),
- cast_to=cast(Type[Quota], ResultWrapper[Quota]),
+ cast_to=cast(Type[Optional[Quota]], ResultWrapper[Quota]),
)
@@ -324,7 +315,7 @@ class AsyncPriorityResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Priority:
+ ) -> Optional[Priority]:
"""
Create a New Priority Requirement
@@ -365,9 +356,9 @@ class AsyncPriorityResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Priority]._unwrapper,
+ post_parser=ResultWrapper[Optional[Priority]]._unwrapper,
),
- cast_to=cast(Type[Priority], ResultWrapper[Priority]),
+ cast_to=cast(Type[Optional[Priority]], ResultWrapper[Priority]),
)
async def update(
@@ -385,7 +376,7 @@ class AsyncPriorityResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Item:
+ ) -> Optional[Item]:
"""
Update a Priority Intelligence Requirement
@@ -430,9 +421,9 @@ class AsyncPriorityResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Item]._unwrapper,
+ post_parser=ResultWrapper[Optional[Item]]._unwrapper,
),
- cast_to=cast(Type[Item], ResultWrapper[Item]),
+ cast_to=cast(Type[Optional[Item]], ResultWrapper[Item]),
)
async def delete(
@@ -467,21 +458,12 @@ class AsyncPriorityResource(AsyncAPIResource):
raise ValueError(f"Expected a non-empty value for `account_identifier` but received {account_identifier!r}")
if not priority_identifer:
raise ValueError(f"Expected a non-empty value for `priority_identifer` but received {priority_identifer!r}")
- return cast(
- PriorityDeleteResponse,
- await self._delete(
- f"/accounts/{account_identifier}/cloudforce-one/requests/priority/{priority_identifer}",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- post_parser=ResultWrapper[PriorityDeleteResponse]._unwrapper,
- ),
- cast_to=cast(
- Any, ResultWrapper[PriorityDeleteResponse]
- ), # Union types cannot be passed in as arguments in the type system
+ return await self._delete(
+ f"/accounts/{account_identifier}/cloudforce-one/requests/priority/{priority_identifer}",
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
+ cast_to=PriorityDeleteResponse,
)
async def get(
@@ -495,7 +477,7 @@ class AsyncPriorityResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Item:
+ ) -> Optional[Item]:
"""
Get a Priority Intelligence Requirement
@@ -523,9 +505,9 @@ class AsyncPriorityResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Item]._unwrapper,
+ post_parser=ResultWrapper[Optional[Item]]._unwrapper,
),
- cast_to=cast(Type[Item], ResultWrapper[Item]),
+ cast_to=cast(Type[Optional[Item]], ResultWrapper[Item]),
)
async def quota(
@@ -538,7 +520,7 @@ class AsyncPriorityResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Quota:
+ ) -> Optional[Quota]:
"""
Get Priority Intelligence Requirement Quota
@@ -562,9 +544,9 @@ class AsyncPriorityResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Quota]._unwrapper,
+ post_parser=ResultWrapper[Optional[Quota]]._unwrapper,
),
- cast_to=cast(Type[Quota], ResultWrapper[Quota]),
+ cast_to=cast(Type[Optional[Quota]], ResultWrapper[Quota]),
)
diff --git a/src/cloudflare/resources/cloudforce_one/requests/requests.py b/src/cloudflare/resources/cloudforce_one/requests/requests.py
index 61a739aaa..267e04595 100644
--- a/src/cloudflare/resources/cloudforce_one/requests/requests.py
+++ b/src/cloudflare/resources/cloudforce_one/requests/requests.py
@@ -2,7 +2,7 @@
from __future__ import annotations
-from typing import Any, Type, Union, cast
+from typing import Type, Union, Optional, cast
from datetime import datetime
from typing_extensions import Literal
@@ -86,7 +86,7 @@ class RequestsResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Item:
+ ) -> Optional[Item]:
"""
Creating a request adds the request into the Cloudforce One queue for analysis.
In addition to the content, a short title, type, priority, and releasability
@@ -132,9 +132,9 @@ class RequestsResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Item]._unwrapper,
+ post_parser=ResultWrapper[Optional[Item]]._unwrapper,
),
- cast_to=cast(Type[Item], ResultWrapper[Item]),
+ cast_to=cast(Type[Optional[Item]], ResultWrapper[Item]),
)
def update(
@@ -153,7 +153,7 @@ class RequestsResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Item:
+ ) -> Optional[Item]:
"""Updating a request alters the request in the Cloudforce One queue.
This API may
@@ -204,9 +204,9 @@ class RequestsResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Item]._unwrapper,
+ post_parser=ResultWrapper[Optional[Item]]._unwrapper,
),
- cast_to=cast(Type[Item], ResultWrapper[Item]),
+ cast_to=cast(Type[Optional[Item]], ResultWrapper[Item]),
)
def list(
@@ -323,21 +323,12 @@ class RequestsResource(SyncAPIResource):
raise ValueError(f"Expected a non-empty value for `account_identifier` but received {account_identifier!r}")
if not request_identifier:
raise ValueError(f"Expected a non-empty value for `request_identifier` but received {request_identifier!r}")
- return cast(
- RequestDeleteResponse,
- self._delete(
- f"/accounts/{account_identifier}/cloudforce-one/requests/{request_identifier}",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- post_parser=ResultWrapper[RequestDeleteResponse]._unwrapper,
- ),
- cast_to=cast(
- Any, ResultWrapper[RequestDeleteResponse]
- ), # Union types cannot be passed in as arguments in the type system
+ return self._delete(
+ f"/accounts/{account_identifier}/cloudforce-one/requests/{request_identifier}",
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
+ cast_to=RequestDeleteResponse,
)
def constants(
@@ -350,7 +341,7 @@ class RequestsResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> RequestConstants:
+ ) -> Optional[RequestConstants]:
"""
Get Request Priority, Status, and TLP constants
@@ -374,9 +365,9 @@ class RequestsResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[RequestConstants]._unwrapper,
+ post_parser=ResultWrapper[Optional[RequestConstants]]._unwrapper,
),
- cast_to=cast(Type[RequestConstants], ResultWrapper[RequestConstants]),
+ cast_to=cast(Type[Optional[RequestConstants]], ResultWrapper[RequestConstants]),
)
def get(
@@ -390,7 +381,7 @@ class RequestsResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Item:
+ ) -> Optional[Item]:
"""
Get a Request
@@ -418,9 +409,9 @@ class RequestsResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Item]._unwrapper,
+ post_parser=ResultWrapper[Optional[Item]]._unwrapper,
),
- cast_to=cast(Type[Item], ResultWrapper[Item]),
+ cast_to=cast(Type[Optional[Item]], ResultWrapper[Item]),
)
def quota(
@@ -433,7 +424,7 @@ class RequestsResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Quota:
+ ) -> Optional[Quota]:
"""
Get Request Quota
@@ -457,9 +448,9 @@ class RequestsResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Quota]._unwrapper,
+ post_parser=ResultWrapper[Optional[Quota]]._unwrapper,
),
- cast_to=cast(Type[Quota], ResultWrapper[Quota]),
+ cast_to=cast(Type[Optional[Quota]], ResultWrapper[Quota]),
)
def types(
@@ -472,7 +463,7 @@ class RequestsResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> RequestTypes:
+ ) -> Optional[RequestTypes]:
"""
Get Request Types
@@ -496,9 +487,9 @@ class RequestsResource(SyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[RequestTypes]._unwrapper,
+ post_parser=ResultWrapper[Optional[RequestTypes]]._unwrapper,
),
- cast_to=cast(Type[RequestTypes], ResultWrapper[RequestTypes]),
+ cast_to=cast(Type[Optional[RequestTypes]], ResultWrapper[RequestTypes]),
)
@@ -534,7 +525,7 @@ class AsyncRequestsResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Item:
+ ) -> Optional[Item]:
"""
Creating a request adds the request into the Cloudforce One queue for analysis.
In addition to the content, a short title, type, priority, and releasability
@@ -580,9 +571,9 @@ class AsyncRequestsResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Item]._unwrapper,
+ post_parser=ResultWrapper[Optional[Item]]._unwrapper,
),
- cast_to=cast(Type[Item], ResultWrapper[Item]),
+ cast_to=cast(Type[Optional[Item]], ResultWrapper[Item]),
)
async def update(
@@ -601,7 +592,7 @@ class AsyncRequestsResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Item:
+ ) -> Optional[Item]:
"""Updating a request alters the request in the Cloudforce One queue.
This API may
@@ -652,9 +643,9 @@ class AsyncRequestsResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Item]._unwrapper,
+ post_parser=ResultWrapper[Optional[Item]]._unwrapper,
),
- cast_to=cast(Type[Item], ResultWrapper[Item]),
+ cast_to=cast(Type[Optional[Item]], ResultWrapper[Item]),
)
def list(
@@ -771,21 +762,12 @@ class AsyncRequestsResource(AsyncAPIResource):
raise ValueError(f"Expected a non-empty value for `account_identifier` but received {account_identifier!r}")
if not request_identifier:
raise ValueError(f"Expected a non-empty value for `request_identifier` but received {request_identifier!r}")
- return cast(
- RequestDeleteResponse,
- await self._delete(
- f"/accounts/{account_identifier}/cloudforce-one/requests/{request_identifier}",
- options=make_request_options(
- extra_headers=extra_headers,
- extra_query=extra_query,
- extra_body=extra_body,
- timeout=timeout,
- post_parser=ResultWrapper[RequestDeleteResponse]._unwrapper,
- ),
- cast_to=cast(
- Any, ResultWrapper[RequestDeleteResponse]
- ), # Union types cannot be passed in as arguments in the type system
+ return await self._delete(
+ f"/accounts/{account_identifier}/cloudforce-one/requests/{request_identifier}",
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
+ cast_to=RequestDeleteResponse,
)
async def constants(
@@ -798,7 +780,7 @@ class AsyncRequestsResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> RequestConstants:
+ ) -> Optional[RequestConstants]:
"""
Get Request Priority, Status, and TLP constants
@@ -822,9 +804,9 @@ class AsyncRequestsResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[RequestConstants]._unwrapper,
+ post_parser=ResultWrapper[Optional[RequestConstants]]._unwrapper,
),
- cast_to=cast(Type[RequestConstants], ResultWrapper[RequestConstants]),
+ cast_to=cast(Type[Optional[RequestConstants]], ResultWrapper[RequestConstants]),
)
async def get(
@@ -838,7 +820,7 @@ class AsyncRequestsResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Item:
+ ) -> Optional[Item]:
"""
Get a Request
@@ -866,9 +848,9 @@ class AsyncRequestsResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Item]._unwrapper,
+ post_parser=ResultWrapper[Optional[Item]]._unwrapper,
),
- cast_to=cast(Type[Item], ResultWrapper[Item]),
+ cast_to=cast(Type[Optional[Item]], ResultWrapper[Item]),
)
async def quota(
@@ -881,7 +863,7 @@ class AsyncRequestsResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> Quota:
+ ) -> Optional[Quota]:
"""
Get Request Quota
@@ -905,9 +887,9 @@ class AsyncRequestsResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[Quota]._unwrapper,
+ post_parser=ResultWrapper[Optional[Quota]]._unwrapper,
),
- cast_to=cast(Type[Quota], ResultWrapper[Quota]),
+ cast_to=cast(Type[Optional[Quota]], ResultWrapper[Quota]),
)
async def types(
@@ -920,7 +902,7 @@ class AsyncRequestsResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> RequestTypes:
+ ) -> Optional[RequestTypes]:
"""
Get Request Types
@@ -944,9 +926,9 @@ class AsyncRequestsResource(AsyncAPIResource):
extra_query=extra_query,
extra_body=extra_body,
timeout=timeout,
- post_parser=ResultWrapper[RequestTypes]._unwrapper,
+ post_parser=ResultWrapper[Optional[RequestTypes]]._unwrapper,
),
- cast_to=cast(Type[RequestTypes], ResultWrapper[RequestTypes]),
+ cast_to=cast(Type[Optional[RequestTypes]], ResultWrapper[RequestTypes]),
)
diff --git a/src/cloudflare/resources/intel/whois.py b/src/cloudflare/resources/intel/whois.py
index 050da13d3..d8f2efe38 100644
--- a/src/cloudflare/resources/intel/whois.py
+++ b/src/cloudflare/resources/intel/whois.py
@@ -2,7 +2,7 @@
from __future__ import annotations
-from typing import Type, cast
+from typing import Type, Optional, cast
import httpx
@@ -49,7 +49,7 @@ class WhoisResource(SyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> WhoisGetResponse:
+ ) -> Optional[WhoisGetResponse]:
"""
Get WHOIS Record
@@ -74,9 +74,9 @@ class WhoisResource(SyncAPIResource):
extra_body=extra_body,
timeout=timeout,
query=maybe_transform({"domain": domain}, whois_get_params.WhoisGetParams),
- post_parser=ResultWrapper[WhoisGetResponse]._unwrapper,
+ post_parser=ResultWrapper[Optional[WhoisGetResponse]]._unwrapper,
),
- cast_to=cast(Type[WhoisGetResponse], ResultWrapper[WhoisGetResponse]),
+ cast_to=cast(Type[Optional[WhoisGetResponse]], ResultWrapper[WhoisGetResponse]),
)
@@ -100,7 +100,7 @@ class AsyncWhoisResource(AsyncAPIResource):
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
- ) -> WhoisGetResponse:
+ ) -> Optional[WhoisGetResponse]:
"""
Get WHOIS Record
@@ -125,9 +125,9 @@ class AsyncWhoisResource(AsyncAPIResource):
extra_body=extra_body,
timeout=timeout,
query=await async_maybe_transform({"domain": domain}, whois_get_params.WhoisGetParams),
- post_parser=ResultWrapper[WhoisGetResponse]._unwrapper,
+ post_parser=ResultWrapper[Optional[WhoisGetResponse]]._unwrapper,
),
- cast_to=cast(Type[WhoisGetResponse], ResultWrapper[WhoisGetResponse]),
+ cast_to=cast(Type[Optional[WhoisGetResponse]], ResultWrapper[WhoisGetResponse]),
)
diff --git a/src/cloudflare/resources/radar/bgp/__init__.py b/src/cloudflare/resources/radar/bgp/__init__.py
index b143abf60..1e54970bf 100644
--- a/src/cloudflare/resources/radar/bgp/__init__.py
+++ b/src/cloudflare/resources/radar/bgp/__init__.py
@@ -8,6 +8,14 @@ from .bgp import (
BGPResourceWithStreamingResponse,
AsyncBGPResourceWithStreamingResponse,
)
+from .ips import (
+ IPsResource,
+ AsyncIPsResource,
+ IPsResourceWithRawResponse,
+ AsyncIPsResourceWithRawResponse,
+ IPsResourceWithStreamingResponse,
+ AsyncIPsResourceWithStreamingResponse,
+)
from .top import (
TopResource,
AsyncTopResource,
@@ -66,6 +74,12 @@ __all__ = [
"AsyncRoutesResourceWithRawResponse",
"RoutesResourceWithStreamingResponse",
"AsyncRoutesResourceWithStreamingResponse",
+ "IPsResource",
+ "AsyncIPsResource",
+ "IPsResourceWithRawResponse",
+ "AsyncIPsResourceWithRawResponse",
+ "IPsResourceWithStreamingResponse",
+ "AsyncIPsResourceWithStreamingResponse",
"BGPResource",
"AsyncBGPResource",
"BGPResourceWithRawResponse",
diff --git a/src/cloudflare/resources/radar/bgp/bgp.py b/src/cloudflare/resources/radar/bgp/bgp.py
index 1db4a996c..0b0c2aa8a 100644
--- a/src/cloudflare/resources/radar/bgp/bgp.py
+++ b/src/cloudflare/resources/radar/bgp/bgp.py
@@ -8,6 +8,14 @@ from typing_extensions import Literal
import httpx
+from .ips import (
+ IPsResource,
+ AsyncIPsResource,
+ IPsResourceWithRawResponse,
+ AsyncIPsResourceWithRawResponse,
+ IPsResourceWithStreamingResponse,
+ AsyncIPsResourceWithStreamingResponse,
+)
from .top import (
TopResource,
AsyncTopResource,
@@ -83,6 +91,10 @@ class BGPResource(SyncAPIResource):
def routes(self) -> RoutesResource:
return RoutesResource(self._client)
+ @cached_property
+ def ips(self) -> IPsResource:
+ return IPsResource(self._client)
+
@cached_property
def with_raw_response(self) -> BGPResourceWithRawResponse:
return BGPResourceWithRawResponse(self)
@@ -212,6 +224,10 @@ class AsyncBGPResource(AsyncAPIResource):
def routes(self) -> AsyncRoutesResource:
return AsyncRoutesResource(self._client)
+ @cached_property
+ def ips(self) -> AsyncIPsResource:
+ return AsyncIPsResource(self._client)
+
@cached_property
def with_raw_response(self) -> AsyncBGPResourceWithRawResponse:
return AsyncBGPResourceWithRawResponse(self)
@@ -348,6 +364,10 @@ class BGPResourceWithRawResponse:
def routes(self) -> RoutesResourceWithRawResponse:
return RoutesResourceWithRawResponse(self._bgp.routes)
+ @cached_property
+ def ips(self) -> IPsResourceWithRawResponse:
+ return IPsResourceWithRawResponse(self._bgp.ips)
+
class AsyncBGPResourceWithRawResponse:
def __init__(self, bgp: AsyncBGPResource) -> None:
@@ -373,6 +393,10 @@ class AsyncBGPResourceWithRawResponse:
def routes(self) -> AsyncRoutesResourceWithRawResponse:
return AsyncRoutesResourceWithRawResponse(self._bgp.routes)
+ @cached_property
+ def ips(self) -> AsyncIPsResourceWithRawResponse:
+ return AsyncIPsResourceWithRawResponse(self._bgp.ips)
+
class BGPResourceWithStreamingResponse:
def __init__(self, bgp: BGPResource) -> None:
@@ -398,6 +422,10 @@ class BGPResourceWithStreamingResponse:
def routes(self) -> RoutesResourceWithStreamingResponse:
return RoutesResourceWithStreamingResponse(self._bgp.routes)
+ @cached_property
+ def ips(self) -> IPsResourceWithStreamingResponse:
+ return IPsResourceWithStreamingResponse(self._bgp.ips)
+
class AsyncBGPResourceWithStreamingResponse:
def __init__(self, bgp: AsyncBGPResource) -> None:
@@ -422,3 +450,7 @@ class AsyncBGPResourceWithStreamingResponse:
@cached_property
def routes(self) -> AsyncRoutesResourceWithStreamingResponse:
return AsyncRoutesResourceWithStreamingResponse(self._bgp.routes)
+
+ @cached_property
+ def ips(self) -> AsyncIPsResourceWithStreamingResponse:
+ return AsyncIPsResourceWithStreamingResponse(self._bgp.ips)
diff --git a/src/cloudflare/resources/radar/bgp/ips.py b/src/cloudflare/resources/radar/bgp/ips.py
new file mode 100644
index 000000000..62cfdacf3
--- /dev/null
+++ b/src/cloudflare/resources/radar/bgp/ips.py
@@ -0,0 +1,267 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import List, Type, Union, cast
+from datetime import datetime
+from typing_extensions import Literal
+
+import httpx
+
+from ...._types import NOT_GIVEN, Body, Query, Headers, NotGiven
+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.radar.bgp import ip_timeseries_params
+from ....types.radar.bgp.ip_timeseries_response import IPTimeseriesResponse
+
+__all__ = ["IPsResource", "AsyncIPsResource"]
+
+
+class IPsResource(SyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> IPsResourceWithRawResponse:
+ return IPsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> IPsResourceWithStreamingResponse:
+ return IPsResourceWithStreamingResponse(self)
+
+ def timeseries(
+ self,
+ *,
+ asn: str | NotGiven = NOT_GIVEN,
+ date_end: Union[str, datetime] | NotGiven = NOT_GIVEN,
+ date_range: Literal[
+ "1d",
+ "2d",
+ "7d",
+ "14d",
+ "28d",
+ "12w",
+ "24w",
+ "52w",
+ "1dControl",
+ "2dControl",
+ "7dControl",
+ "14dControl",
+ "28dControl",
+ "12wControl",
+ "24wControl",
+ ]
+ | NotGiven = NOT_GIVEN,
+ date_start: Union[str, datetime] | NotGiven = NOT_GIVEN,
+ format: Literal["JSON", "CSV"] | NotGiven = NOT_GIVEN,
+ include_delay: bool | NotGiven = NOT_GIVEN,
+ location: str | NotGiven = NOT_GIVEN,
+ name: List[str] | 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,
+ ) -> IPTimeseriesResponse:
+ """
+ Gets time-series data for the announced IP space count, represented as the
+ number of IPv4 /24s and IPv6 /48s, for a given ASN.
+
+ Args:
+ asn: Comma separated list of ASNs.
+
+ date_end: End of the date range (inclusive).
+
+ date_range: Shorthand date ranges for the last X days - use when you don't need specific
+ start and end dates.
+
+ date_start: Start of the date range (inclusive).
+
+ format: Format results are returned in.
+
+ include_delay: Include data delay meta information
+
+ location: Comma separated list of locations.
+
+ name: Array of names that will be used to name the series in responses.
+
+ 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(
+ "/radar/bgp/ips/timeseries",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=maybe_transform(
+ {
+ "asn": asn,
+ "date_end": date_end,
+ "date_range": date_range,
+ "date_start": date_start,
+ "format": format,
+ "include_delay": include_delay,
+ "location": location,
+ "name": name,
+ },
+ ip_timeseries_params.IPTimeseriesParams,
+ ),
+ post_parser=ResultWrapper[IPTimeseriesResponse]._unwrapper,
+ ),
+ cast_to=cast(Type[IPTimeseriesResponse], ResultWrapper[IPTimeseriesResponse]),
+ )
+
+
+class AsyncIPsResource(AsyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> AsyncIPsResourceWithRawResponse:
+ return AsyncIPsResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncIPsResourceWithStreamingResponse:
+ return AsyncIPsResourceWithStreamingResponse(self)
+
+ async def timeseries(
+ self,
+ *,
+ asn: str | NotGiven = NOT_GIVEN,
+ date_end: Union[str, datetime] | NotGiven = NOT_GIVEN,
+ date_range: Literal[
+ "1d",
+ "2d",
+ "7d",
+ "14d",
+ "28d",
+ "12w",
+ "24w",
+ "52w",
+ "1dControl",
+ "2dControl",
+ "7dControl",
+ "14dControl",
+ "28dControl",
+ "12wControl",
+ "24wControl",
+ ]
+ | NotGiven = NOT_GIVEN,
+ date_start: Union[str, datetime] | NotGiven = NOT_GIVEN,
+ format: Literal["JSON", "CSV"] | NotGiven = NOT_GIVEN,
+ include_delay: bool | NotGiven = NOT_GIVEN,
+ location: str | NotGiven = NOT_GIVEN,
+ name: List[str] | 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,
+ ) -> IPTimeseriesResponse:
+ """
+ Gets time-series data for the announced IP space count, represented as the
+ number of IPv4 /24s and IPv6 /48s, for a given ASN.
+
+ Args:
+ asn: Comma separated list of ASNs.
+
+ date_end: End of the date range (inclusive).
+
+ date_range: Shorthand date ranges for the last X days - use when you don't need specific
+ start and end dates.
+
+ date_start: Start of the date range (inclusive).
+
+ format: Format results are returned in.
+
+ include_delay: Include data delay meta information
+
+ location: Comma separated list of locations.
+
+ name: Array of names that will be used to name the series in responses.
+
+ 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._get(
+ "/radar/bgp/ips/timeseries",
+ options=make_request_options(
+ extra_headers=extra_headers,
+ extra_query=extra_query,
+ extra_body=extra_body,
+ timeout=timeout,
+ query=await async_maybe_transform(
+ {
+ "asn": asn,
+ "date_end": date_end,
+ "date_range": date_range,
+ "date_start": date_start,
+ "format": format,
+ "include_delay": include_delay,
+ "location": location,
+ "name": name,
+ },
+ ip_timeseries_params.IPTimeseriesParams,
+ ),
+ post_parser=ResultWrapper[IPTimeseriesResponse]._unwrapper,
+ ),
+ cast_to=cast(Type[IPTimeseriesResponse], ResultWrapper[IPTimeseriesResponse]),
+ )
+
+
+class IPsResourceWithRawResponse:
+ def __init__(self, ips: IPsResource) -> None:
+ self._ips = ips
+
+ self.timeseries = to_raw_response_wrapper(
+ ips.timeseries,
+ )
+
+
+class AsyncIPsResourceWithRawResponse:
+ def __init__(self, ips: AsyncIPsResource) -> None:
+ self._ips = ips
+
+ self.timeseries = async_to_raw_response_wrapper(
+ ips.timeseries,
+ )
+
+
+class IPsResourceWithStreamingResponse:
+ def __init__(self, ips: IPsResource) -> None:
+ self._ips = ips
+
+ self.timeseries = to_streamed_response_wrapper(
+ ips.timeseries,
+ )
+
+
+class AsyncIPsResourceWithStreamingResponse:
+ def __init__(self, ips: AsyncIPsResource) -> None:
+ self._ips = ips
+
+ self.timeseries = async_to_streamed_response_wrapper(
+ ips.timeseries,
+ )
diff --git a/src/cloudflare/types/cloudforce_one/request_delete_response.py b/src/cloudflare/types/cloudforce_one/request_delete_response.py
index f6dca1edb..b7ed5ffbe 100644
--- a/src/cloudflare/types/cloudforce_one/request_delete_response.py
+++ b/src/cloudflare/types/cloudforce_one/request_delete_response.py
@@ -1,7 +1,18 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import List, Union
+from typing import List
+from typing_extensions import Literal
+
+from ..._models import BaseModel
+from ..shared.response_info import ResponseInfo
__all__ = ["RequestDeleteResponse"]
-RequestDeleteResponse = Union[List[object], str, object]
+
+class RequestDeleteResponse(BaseModel):
+ errors: List[ResponseInfo]
+
+ messages: List[ResponseInfo]
+
+ success: Literal[True]
+ """Whether the API call was successful"""
diff --git a/src/cloudflare/types/cloudforce_one/requests/message_delete_response.py b/src/cloudflare/types/cloudforce_one/requests/message_delete_response.py
index eaadbea2a..a0d45a640 100644
--- a/src/cloudflare/types/cloudforce_one/requests/message_delete_response.py
+++ b/src/cloudflare/types/cloudforce_one/requests/message_delete_response.py
@@ -1,7 +1,18 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import List, Union
+from typing import List
+from typing_extensions import Literal
+
+from ...._models import BaseModel
+from ...shared.response_info import ResponseInfo
__all__ = ["MessageDeleteResponse"]
-MessageDeleteResponse = Union[List[object], str, object]
+
+class MessageDeleteResponse(BaseModel):
+ errors: List[ResponseInfo]
+
+ messages: List[ResponseInfo]
+
+ success: Literal[True]
+ """Whether the API call was successful"""
diff --git a/src/cloudflare/types/cloudforce_one/requests/priority_delete_response.py b/src/cloudflare/types/cloudforce_one/requests/priority_delete_response.py
index 60bd9aae8..ee172239b 100644
--- a/src/cloudflare/types/cloudforce_one/requests/priority_delete_response.py
+++ b/src/cloudflare/types/cloudforce_one/requests/priority_delete_response.py
@@ -1,7 +1,18 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-from typing import List, Union
+from typing import List
+from typing_extensions import Literal
+
+from ...._models import BaseModel
+from ...shared.response_info import ResponseInfo
__all__ = ["PriorityDeleteResponse"]
-PriorityDeleteResponse = Union[List[object], str, object]
+
+class PriorityDeleteResponse(BaseModel):
+ errors: List[ResponseInfo]
+
+ messages: List[ResponseInfo]
+
+ success: Literal[True]
+ """Whether the API call was successful"""
diff --git a/src/cloudflare/types/radar/bgp/__init__.py b/src/cloudflare/types/radar/bgp/__init__.py
index bc82551b3..abf4e584e 100644
--- a/src/cloudflare/types/radar/bgp/__init__.py
+++ b/src/cloudflare/types/radar/bgp/__init__.py
@@ -7,6 +7,8 @@ from .route_stats_params import RouteStatsParams as RouteStatsParams
from .route_moas_response import RouteMoasResponse as RouteMoasResponse
from .route_pfx2as_params import RoutePfx2asParams as RoutePfx2asParams
from .top_prefixes_params import TopPrefixesParams as TopPrefixesParams
+from .ip_timeseries_params import IPTimeseriesParams as IPTimeseriesParams
from .route_stats_response import RouteStatsResponse as RouteStatsResponse
from .route_pfx2as_response import RoutePfx2asResponse as RoutePfx2asResponse
from .top_prefixes_response import TopPrefixesResponse as TopPrefixesResponse
+from .ip_timeseries_response import IPTimeseriesResponse as IPTimeseriesResponse
diff --git a/src/cloudflare/types/radar/bgp/ip_timeseries_params.py b/src/cloudflare/types/radar/bgp/ip_timeseries_params.py
new file mode 100644
index 000000000..64d069dcb
--- /dev/null
+++ b/src/cloudflare/types/radar/bgp/ip_timeseries_params.py
@@ -0,0 +1,59 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import List, Union
+from datetime import datetime
+from typing_extensions import Literal, Annotated, TypedDict
+
+from ...._utils import PropertyInfo
+
+__all__ = ["IPTimeseriesParams"]
+
+
+class IPTimeseriesParams(TypedDict, total=False):
+ asn: str
+ """Comma separated list of ASNs."""
+
+ date_end: Annotated[Union[str, datetime], PropertyInfo(alias="dateEnd", format="iso8601")]
+ """End of the date range (inclusive)."""
+
+ date_range: Annotated[
+ Literal[
+ "1d",
+ "2d",
+ "7d",
+ "14d",
+ "28d",
+ "12w",
+ "24w",
+ "52w",
+ "1dControl",
+ "2dControl",
+ "7dControl",
+ "14dControl",
+ "28dControl",
+ "12wControl",
+ "24wControl",
+ ],
+ PropertyInfo(alias="dateRange"),
+ ]
+ """
+ Shorthand date ranges for the last X days - use when you don't need specific
+ start and end dates.
+ """
+
+ date_start: Annotated[Union[str, datetime], PropertyInfo(alias="dateStart", format="iso8601")]
+ """Start of the date range (inclusive)."""
+
+ format: Literal["JSON", "CSV"]
+ """Format results are returned in."""
+
+ include_delay: Annotated[bool, PropertyInfo(alias="includeDelay")]
+ """Include data delay meta information"""
+
+ location: str
+ """Comma separated list of locations."""
+
+ name: List[str]
+ """Array of names that will be used to name the series in responses."""
diff --git a/src/cloudflare/types/radar/bgp/ip_timeseries_response.py b/src/cloudflare/types/radar/bgp/ip_timeseries_response.py
new file mode 100644
index 000000000..aeff238cf
--- /dev/null
+++ b/src/cloudflare/types/radar/bgp/ip_timeseries_response.py
@@ -0,0 +1,46 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from typing import List
+from datetime import datetime
+
+from pydantic import Field as FieldInfo
+
+from ...._models import BaseModel
+
+__all__ = ["IPTimeseriesResponse", "Meta", "MetaDateRange", "Serie174", "SerieCn"]
+
+
+class MetaDateRange(BaseModel):
+ end_time: datetime = FieldInfo(alias="endTime")
+ """Adjusted end of date range."""
+
+ start_time: datetime = FieldInfo(alias="startTime")
+ """Adjusted start of date range."""
+
+
+class Meta(BaseModel):
+ date_range: List[MetaDateRange] = FieldInfo(alias="dateRange")
+
+
+class Serie174(BaseModel):
+ ipv4: List[str]
+
+ ipv6: List[str]
+
+ timestamps: List[datetime]
+
+
+class SerieCn(BaseModel):
+ ipv4: List[str]
+
+ ipv6: List[str]
+
+ timestamps: List[datetime]
+
+
+class IPTimeseriesResponse(BaseModel):
+ meta: Meta
+
+ serie_174: Serie174
+
+ serie_cn: SerieCn
diff --git a/tests/api_resources/cloudforce_one/requests/test_message.py b/tests/api_resources/cloudforce_one/requests/test_message.py
index cae925089..e804d3ab8 100644
--- a/tests/api_resources/cloudforce_one/requests/test_message.py
+++ b/tests/api_resources/cloudforce_one/requests/test_message.py
@@ -3,7 +3,7 @@
from __future__ import annotations
import os
-from typing import Any, cast
+from typing import Any, Optional, cast
import pytest
@@ -28,7 +28,7 @@ class TestMessage:
"f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
account_identifier="023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
@parametrize
def test_method_create_with_all_params(self, client: Cloudflare) -> None:
@@ -37,7 +37,7 @@ class TestMessage:
account_identifier="023e105f4ecef8ad9ca31a8372d0c353",
content="Can you elaborate on the type of DoS that occurred?",
)
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
@parametrize
def test_raw_response_create(self, client: Cloudflare) -> None:
@@ -49,7 +49,7 @@ class TestMessage:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
message = response.parse()
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
@parametrize
def test_streaming_response_create(self, client: Cloudflare) -> None:
@@ -61,7 +61,7 @@ class TestMessage:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
message = response.parse()
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -86,7 +86,7 @@ class TestMessage:
account_identifier="023e105f4ecef8ad9ca31a8372d0c353",
request_identifier="f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
)
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
@parametrize
def test_method_update_with_all_params(self, client: Cloudflare) -> None:
@@ -100,7 +100,7 @@ class TestMessage:
summary="DoS attack",
tlp="clear",
)
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
@parametrize
def test_raw_response_update(self, client: Cloudflare) -> None:
@@ -113,7 +113,7 @@ class TestMessage:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
message = response.parse()
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
@parametrize
def test_streaming_response_update(self, client: Cloudflare) -> None:
@@ -126,7 +126,7 @@ class TestMessage:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
message = response.parse()
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -207,7 +207,7 @@ class TestMessage:
page=0,
per_page=10,
)
- assert_matches_type(MessageGetResponse, message, path=["response"])
+ assert_matches_type(Optional[MessageGetResponse], message, path=["response"])
@parametrize
def test_method_get_with_all_params(self, client: Cloudflare) -> None:
@@ -221,7 +221,7 @@ class TestMessage:
sort_by="created",
sort_order="asc",
)
- assert_matches_type(MessageGetResponse, message, path=["response"])
+ assert_matches_type(Optional[MessageGetResponse], message, path=["response"])
@parametrize
def test_raw_response_get(self, client: Cloudflare) -> None:
@@ -235,7 +235,7 @@ class TestMessage:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
message = response.parse()
- assert_matches_type(MessageGetResponse, message, path=["response"])
+ assert_matches_type(Optional[MessageGetResponse], message, path=["response"])
@parametrize
def test_streaming_response_get(self, client: Cloudflare) -> None:
@@ -249,7 +249,7 @@ class TestMessage:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
message = response.parse()
- assert_matches_type(MessageGetResponse, message, path=["response"])
+ assert_matches_type(Optional[MessageGetResponse], message, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -281,7 +281,7 @@ class TestAsyncMessage:
"f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
account_identifier="023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
@parametrize
async def test_method_create_with_all_params(self, async_client: AsyncCloudflare) -> None:
@@ -290,7 +290,7 @@ class TestAsyncMessage:
account_identifier="023e105f4ecef8ad9ca31a8372d0c353",
content="Can you elaborate on the type of DoS that occurred?",
)
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
@parametrize
async def test_raw_response_create(self, async_client: AsyncCloudflare) -> None:
@@ -302,7 +302,7 @@ class TestAsyncMessage:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
message = await response.parse()
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
@parametrize
async def test_streaming_response_create(self, async_client: AsyncCloudflare) -> None:
@@ -314,7 +314,7 @@ class TestAsyncMessage:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
message = await response.parse()
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -339,7 +339,7 @@ class TestAsyncMessage:
account_identifier="023e105f4ecef8ad9ca31a8372d0c353",
request_identifier="f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
)
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
@parametrize
async def test_method_update_with_all_params(self, async_client: AsyncCloudflare) -> None:
@@ -353,7 +353,7 @@ class TestAsyncMessage:
summary="DoS attack",
tlp="clear",
)
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
@parametrize
async def test_raw_response_update(self, async_client: AsyncCloudflare) -> None:
@@ -366,7 +366,7 @@ class TestAsyncMessage:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
message = await response.parse()
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
@parametrize
async def test_streaming_response_update(self, async_client: AsyncCloudflare) -> None:
@@ -379,7 +379,7 @@ class TestAsyncMessage:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
message = await response.parse()
- assert_matches_type(Message, message, path=["response"])
+ assert_matches_type(Optional[Message], message, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -460,7 +460,7 @@ class TestAsyncMessage:
page=0,
per_page=10,
)
- assert_matches_type(MessageGetResponse, message, path=["response"])
+ assert_matches_type(Optional[MessageGetResponse], message, path=["response"])
@parametrize
async def test_method_get_with_all_params(self, async_client: AsyncCloudflare) -> None:
@@ -474,7 +474,7 @@ class TestAsyncMessage:
sort_by="created",
sort_order="asc",
)
- assert_matches_type(MessageGetResponse, message, path=["response"])
+ assert_matches_type(Optional[MessageGetResponse], message, path=["response"])
@parametrize
async def test_raw_response_get(self, async_client: AsyncCloudflare) -> None:
@@ -488,7 +488,7 @@ class TestAsyncMessage:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
message = await response.parse()
- assert_matches_type(MessageGetResponse, message, path=["response"])
+ assert_matches_type(Optional[MessageGetResponse], message, path=["response"])
@parametrize
async def test_streaming_response_get(self, async_client: AsyncCloudflare) -> None:
@@ -502,7 +502,7 @@ class TestAsyncMessage:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
message = await response.parse()
- assert_matches_type(MessageGetResponse, message, path=["response"])
+ assert_matches_type(Optional[MessageGetResponse], message, path=["response"])
assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/cloudforce_one/requests/test_priority.py b/tests/api_resources/cloudforce_one/requests/test_priority.py
index 46276ab9d..012e01b34 100644
--- a/tests/api_resources/cloudforce_one/requests/test_priority.py
+++ b/tests/api_resources/cloudforce_one/requests/test_priority.py
@@ -3,7 +3,7 @@
from __future__ import annotations
import os
-from typing import Any, cast
+from typing import Any, Optional, cast
import pytest
@@ -30,7 +30,7 @@ class TestPriority:
requirement="DoS attacks carried out by CVEs",
tlp="clear",
)
- assert_matches_type(Priority, priority, path=["response"])
+ assert_matches_type(Optional[Priority], priority, path=["response"])
@parametrize
def test_raw_response_create(self, client: Cloudflare) -> None:
@@ -45,7 +45,7 @@ class TestPriority:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = response.parse()
- assert_matches_type(Priority, priority, path=["response"])
+ assert_matches_type(Optional[Priority], priority, path=["response"])
@parametrize
def test_streaming_response_create(self, client: Cloudflare) -> None:
@@ -60,7 +60,7 @@ class TestPriority:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = response.parse()
- assert_matches_type(Priority, priority, path=["response"])
+ assert_matches_type(Optional[Priority], priority, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -85,7 +85,7 @@ class TestPriority:
requirement="DoS attacks carried out by CVEs",
tlp="clear",
)
- assert_matches_type(Item, priority, path=["response"])
+ assert_matches_type(Optional[Item], priority, path=["response"])
@parametrize
def test_raw_response_update(self, client: Cloudflare) -> None:
@@ -101,7 +101,7 @@ class TestPriority:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = response.parse()
- assert_matches_type(Item, priority, path=["response"])
+ assert_matches_type(Optional[Item], priority, path=["response"])
@parametrize
def test_streaming_response_update(self, client: Cloudflare) -> None:
@@ -117,7 +117,7 @@ class TestPriority:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = response.parse()
- assert_matches_type(Item, priority, path=["response"])
+ assert_matches_type(Optional[Item], priority, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -197,7 +197,7 @@ class TestPriority:
"f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
account_identifier="023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Item, priority, path=["response"])
+ assert_matches_type(Optional[Item], priority, path=["response"])
@parametrize
def test_raw_response_get(self, client: Cloudflare) -> None:
@@ -209,7 +209,7 @@ class TestPriority:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = response.parse()
- assert_matches_type(Item, priority, path=["response"])
+ assert_matches_type(Optional[Item], priority, path=["response"])
@parametrize
def test_streaming_response_get(self, client: Cloudflare) -> None:
@@ -221,7 +221,7 @@ class TestPriority:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = response.parse()
- assert_matches_type(Item, priority, path=["response"])
+ assert_matches_type(Optional[Item], priority, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -244,7 +244,7 @@ class TestPriority:
priority = client.cloudforce_one.requests.priority.quota(
"023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Quota, priority, path=["response"])
+ assert_matches_type(Optional[Quota], priority, path=["response"])
@parametrize
def test_raw_response_quota(self, client: Cloudflare) -> None:
@@ -255,7 +255,7 @@ class TestPriority:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = response.parse()
- assert_matches_type(Quota, priority, path=["response"])
+ assert_matches_type(Optional[Quota], priority, path=["response"])
@parametrize
def test_streaming_response_quota(self, client: Cloudflare) -> None:
@@ -266,7 +266,7 @@ class TestPriority:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = response.parse()
- assert_matches_type(Quota, priority, path=["response"])
+ assert_matches_type(Optional[Quota], priority, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -290,7 +290,7 @@ class TestAsyncPriority:
requirement="DoS attacks carried out by CVEs",
tlp="clear",
)
- assert_matches_type(Priority, priority, path=["response"])
+ assert_matches_type(Optional[Priority], priority, path=["response"])
@parametrize
async def test_raw_response_create(self, async_client: AsyncCloudflare) -> None:
@@ -305,7 +305,7 @@ class TestAsyncPriority:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = await response.parse()
- assert_matches_type(Priority, priority, path=["response"])
+ assert_matches_type(Optional[Priority], priority, path=["response"])
@parametrize
async def test_streaming_response_create(self, async_client: AsyncCloudflare) -> None:
@@ -320,7 +320,7 @@ class TestAsyncPriority:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = await response.parse()
- assert_matches_type(Priority, priority, path=["response"])
+ assert_matches_type(Optional[Priority], priority, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -345,7 +345,7 @@ class TestAsyncPriority:
requirement="DoS attacks carried out by CVEs",
tlp="clear",
)
- assert_matches_type(Item, priority, path=["response"])
+ assert_matches_type(Optional[Item], priority, path=["response"])
@parametrize
async def test_raw_response_update(self, async_client: AsyncCloudflare) -> None:
@@ -361,7 +361,7 @@ class TestAsyncPriority:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = await response.parse()
- assert_matches_type(Item, priority, path=["response"])
+ assert_matches_type(Optional[Item], priority, path=["response"])
@parametrize
async def test_streaming_response_update(self, async_client: AsyncCloudflare) -> None:
@@ -377,7 +377,7 @@ class TestAsyncPriority:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = await response.parse()
- assert_matches_type(Item, priority, path=["response"])
+ assert_matches_type(Optional[Item], priority, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -457,7 +457,7 @@ class TestAsyncPriority:
"f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
account_identifier="023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Item, priority, path=["response"])
+ assert_matches_type(Optional[Item], priority, path=["response"])
@parametrize
async def test_raw_response_get(self, async_client: AsyncCloudflare) -> None:
@@ -469,7 +469,7 @@ class TestAsyncPriority:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = await response.parse()
- assert_matches_type(Item, priority, path=["response"])
+ assert_matches_type(Optional[Item], priority, path=["response"])
@parametrize
async def test_streaming_response_get(self, async_client: AsyncCloudflare) -> None:
@@ -481,7 +481,7 @@ class TestAsyncPriority:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = await response.parse()
- assert_matches_type(Item, priority, path=["response"])
+ assert_matches_type(Optional[Item], priority, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -504,7 +504,7 @@ class TestAsyncPriority:
priority = await async_client.cloudforce_one.requests.priority.quota(
"023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Quota, priority, path=["response"])
+ assert_matches_type(Optional[Quota], priority, path=["response"])
@parametrize
async def test_raw_response_quota(self, async_client: AsyncCloudflare) -> None:
@@ -515,7 +515,7 @@ class TestAsyncPriority:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = await response.parse()
- assert_matches_type(Quota, priority, path=["response"])
+ assert_matches_type(Optional[Quota], priority, path=["response"])
@parametrize
async def test_streaming_response_quota(self, async_client: AsyncCloudflare) -> None:
@@ -526,7 +526,7 @@ class TestAsyncPriority:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
priority = await response.parse()
- assert_matches_type(Quota, priority, path=["response"])
+ assert_matches_type(Optional[Quota], priority, path=["response"])
assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/cloudforce_one/test_requests.py b/tests/api_resources/cloudforce_one/test_requests.py
index 327ae61c1..9e43e1a22 100644
--- a/tests/api_resources/cloudforce_one/test_requests.py
+++ b/tests/api_resources/cloudforce_one/test_requests.py
@@ -3,7 +3,7 @@
from __future__ import annotations
import os
-from typing import Any, cast
+from typing import Any, Optional, cast
import pytest
@@ -31,7 +31,7 @@ class TestRequests:
request = client.cloudforce_one.requests.create(
"023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
def test_method_create_with_all_params(self, client: Cloudflare) -> None:
@@ -43,7 +43,7 @@ class TestRequests:
summary="DoS attack",
tlp="clear",
)
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
def test_raw_response_create(self, client: Cloudflare) -> None:
@@ -54,7 +54,7 @@ class TestRequests:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = response.parse()
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
def test_streaming_response_create(self, client: Cloudflare) -> None:
@@ -65,7 +65,7 @@ class TestRequests:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = response.parse()
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -82,7 +82,7 @@ class TestRequests:
"f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
account_identifier="023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
def test_method_update_with_all_params(self, client: Cloudflare) -> None:
@@ -95,7 +95,7 @@ class TestRequests:
summary="DoS attack",
tlp="clear",
)
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
def test_raw_response_update(self, client: Cloudflare) -> None:
@@ -107,7 +107,7 @@ class TestRequests:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = response.parse()
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
def test_streaming_response_update(self, client: Cloudflare) -> None:
@@ -119,7 +119,7 @@ class TestRequests:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = response.parse()
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -253,7 +253,7 @@ class TestRequests:
request = client.cloudforce_one.requests.constants(
"023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(RequestConstants, request, path=["response"])
+ assert_matches_type(Optional[RequestConstants], request, path=["response"])
@parametrize
def test_raw_response_constants(self, client: Cloudflare) -> None:
@@ -264,7 +264,7 @@ class TestRequests:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = response.parse()
- assert_matches_type(RequestConstants, request, path=["response"])
+ assert_matches_type(Optional[RequestConstants], request, path=["response"])
@parametrize
def test_streaming_response_constants(self, client: Cloudflare) -> None:
@@ -275,7 +275,7 @@ class TestRequests:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = response.parse()
- assert_matches_type(RequestConstants, request, path=["response"])
+ assert_matches_type(Optional[RequestConstants], request, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -292,7 +292,7 @@ class TestRequests:
"f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
account_identifier="023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
def test_raw_response_get(self, client: Cloudflare) -> None:
@@ -304,7 +304,7 @@ class TestRequests:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = response.parse()
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
def test_streaming_response_get(self, client: Cloudflare) -> None:
@@ -316,7 +316,7 @@ class TestRequests:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = response.parse()
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -339,7 +339,7 @@ class TestRequests:
request = client.cloudforce_one.requests.quota(
"023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Quota, request, path=["response"])
+ assert_matches_type(Optional[Quota], request, path=["response"])
@parametrize
def test_raw_response_quota(self, client: Cloudflare) -> None:
@@ -350,7 +350,7 @@ class TestRequests:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = response.parse()
- assert_matches_type(Quota, request, path=["response"])
+ assert_matches_type(Optional[Quota], request, path=["response"])
@parametrize
def test_streaming_response_quota(self, client: Cloudflare) -> None:
@@ -361,7 +361,7 @@ class TestRequests:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = response.parse()
- assert_matches_type(Quota, request, path=["response"])
+ assert_matches_type(Optional[Quota], request, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -377,7 +377,7 @@ class TestRequests:
request = client.cloudforce_one.requests.types(
"023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(RequestTypes, request, path=["response"])
+ assert_matches_type(Optional[RequestTypes], request, path=["response"])
@parametrize
def test_raw_response_types(self, client: Cloudflare) -> None:
@@ -388,7 +388,7 @@ class TestRequests:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = response.parse()
- assert_matches_type(RequestTypes, request, path=["response"])
+ assert_matches_type(Optional[RequestTypes], request, path=["response"])
@parametrize
def test_streaming_response_types(self, client: Cloudflare) -> None:
@@ -399,7 +399,7 @@ class TestRequests:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = response.parse()
- assert_matches_type(RequestTypes, request, path=["response"])
+ assert_matches_type(Optional[RequestTypes], request, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -419,7 +419,7 @@ class TestAsyncRequests:
request = await async_client.cloudforce_one.requests.create(
"023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
async def test_method_create_with_all_params(self, async_client: AsyncCloudflare) -> None:
@@ -431,7 +431,7 @@ class TestAsyncRequests:
summary="DoS attack",
tlp="clear",
)
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
async def test_raw_response_create(self, async_client: AsyncCloudflare) -> None:
@@ -442,7 +442,7 @@ class TestAsyncRequests:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = await response.parse()
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
async def test_streaming_response_create(self, async_client: AsyncCloudflare) -> None:
@@ -453,7 +453,7 @@ class TestAsyncRequests:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = await response.parse()
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -470,7 +470,7 @@ class TestAsyncRequests:
"f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
account_identifier="023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
async def test_method_update_with_all_params(self, async_client: AsyncCloudflare) -> None:
@@ -483,7 +483,7 @@ class TestAsyncRequests:
summary="DoS attack",
tlp="clear",
)
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
async def test_raw_response_update(self, async_client: AsyncCloudflare) -> None:
@@ -495,7 +495,7 @@ class TestAsyncRequests:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = await response.parse()
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
async def test_streaming_response_update(self, async_client: AsyncCloudflare) -> None:
@@ -507,7 +507,7 @@ class TestAsyncRequests:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = await response.parse()
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -641,7 +641,7 @@ class TestAsyncRequests:
request = await async_client.cloudforce_one.requests.constants(
"023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(RequestConstants, request, path=["response"])
+ assert_matches_type(Optional[RequestConstants], request, path=["response"])
@parametrize
async def test_raw_response_constants(self, async_client: AsyncCloudflare) -> None:
@@ -652,7 +652,7 @@ class TestAsyncRequests:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = await response.parse()
- assert_matches_type(RequestConstants, request, path=["response"])
+ assert_matches_type(Optional[RequestConstants], request, path=["response"])
@parametrize
async def test_streaming_response_constants(self, async_client: AsyncCloudflare) -> None:
@@ -663,7 +663,7 @@ class TestAsyncRequests:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = await response.parse()
- assert_matches_type(RequestConstants, request, path=["response"])
+ assert_matches_type(Optional[RequestConstants], request, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -680,7 +680,7 @@ class TestAsyncRequests:
"f174e90a-fafe-4643-bbbc-4a0ed4fc8415",
account_identifier="023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
async def test_raw_response_get(self, async_client: AsyncCloudflare) -> None:
@@ -692,7 +692,7 @@ class TestAsyncRequests:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = await response.parse()
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
@parametrize
async def test_streaming_response_get(self, async_client: AsyncCloudflare) -> None:
@@ -704,7 +704,7 @@ class TestAsyncRequests:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = await response.parse()
- assert_matches_type(Item, request, path=["response"])
+ assert_matches_type(Optional[Item], request, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -727,7 +727,7 @@ class TestAsyncRequests:
request = await async_client.cloudforce_one.requests.quota(
"023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(Quota, request, path=["response"])
+ assert_matches_type(Optional[Quota], request, path=["response"])
@parametrize
async def test_raw_response_quota(self, async_client: AsyncCloudflare) -> None:
@@ -738,7 +738,7 @@ class TestAsyncRequests:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = await response.parse()
- assert_matches_type(Quota, request, path=["response"])
+ assert_matches_type(Optional[Quota], request, path=["response"])
@parametrize
async def test_streaming_response_quota(self, async_client: AsyncCloudflare) -> None:
@@ -749,7 +749,7 @@ class TestAsyncRequests:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = await response.parse()
- assert_matches_type(Quota, request, path=["response"])
+ assert_matches_type(Optional[Quota], request, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -765,7 +765,7 @@ class TestAsyncRequests:
request = await async_client.cloudforce_one.requests.types(
"023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(RequestTypes, request, path=["response"])
+ assert_matches_type(Optional[RequestTypes], request, path=["response"])
@parametrize
async def test_raw_response_types(self, async_client: AsyncCloudflare) -> None:
@@ -776,7 +776,7 @@ class TestAsyncRequests:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = await response.parse()
- assert_matches_type(RequestTypes, request, path=["response"])
+ assert_matches_type(Optional[RequestTypes], request, path=["response"])
@parametrize
async def test_streaming_response_types(self, async_client: AsyncCloudflare) -> None:
@@ -787,7 +787,7 @@ class TestAsyncRequests:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
request = await response.parse()
- assert_matches_type(RequestTypes, request, path=["response"])
+ assert_matches_type(Optional[RequestTypes], request, path=["response"])
assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/intel/test_whois.py b/tests/api_resources/intel/test_whois.py
index 215bb9b2e..c8f0f4035 100644
--- a/tests/api_resources/intel/test_whois.py
+++ b/tests/api_resources/intel/test_whois.py
@@ -3,7 +3,7 @@
from __future__ import annotations
import os
-from typing import Any, cast
+from typing import Any, Optional, cast
import pytest
@@ -22,7 +22,7 @@ class TestWhois:
whois = client.intel.whois.get(
account_id="023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(WhoisGetResponse, whois, path=["response"])
+ assert_matches_type(Optional[WhoisGetResponse], whois, path=["response"])
@parametrize
def test_method_get_with_all_params(self, client: Cloudflare) -> None:
@@ -30,7 +30,7 @@ class TestWhois:
account_id="023e105f4ecef8ad9ca31a8372d0c353",
domain="string",
)
- assert_matches_type(WhoisGetResponse, whois, path=["response"])
+ assert_matches_type(Optional[WhoisGetResponse], whois, path=["response"])
@parametrize
def test_raw_response_get(self, client: Cloudflare) -> None:
@@ -41,7 +41,7 @@ class TestWhois:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
whois = response.parse()
- assert_matches_type(WhoisGetResponse, whois, path=["response"])
+ assert_matches_type(Optional[WhoisGetResponse], whois, path=["response"])
@parametrize
def test_streaming_response_get(self, client: Cloudflare) -> None:
@@ -52,7 +52,7 @@ class TestWhois:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
whois = response.parse()
- assert_matches_type(WhoisGetResponse, whois, path=["response"])
+ assert_matches_type(Optional[WhoisGetResponse], whois, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -72,7 +72,7 @@ class TestAsyncWhois:
whois = await async_client.intel.whois.get(
account_id="023e105f4ecef8ad9ca31a8372d0c353",
)
- assert_matches_type(WhoisGetResponse, whois, path=["response"])
+ assert_matches_type(Optional[WhoisGetResponse], whois, path=["response"])
@parametrize
async def test_method_get_with_all_params(self, async_client: AsyncCloudflare) -> None:
@@ -80,7 +80,7 @@ class TestAsyncWhois:
account_id="023e105f4ecef8ad9ca31a8372d0c353",
domain="string",
)
- assert_matches_type(WhoisGetResponse, whois, path=["response"])
+ assert_matches_type(Optional[WhoisGetResponse], whois, path=["response"])
@parametrize
async def test_raw_response_get(self, async_client: AsyncCloudflare) -> None:
@@ -91,7 +91,7 @@ class TestAsyncWhois:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
whois = await response.parse()
- assert_matches_type(WhoisGetResponse, whois, path=["response"])
+ assert_matches_type(Optional[WhoisGetResponse], whois, path=["response"])
@parametrize
async def test_streaming_response_get(self, async_client: AsyncCloudflare) -> None:
@@ -102,7 +102,7 @@ class TestAsyncWhois:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
whois = await response.parse()
- assert_matches_type(WhoisGetResponse, whois, path=["response"])
+ assert_matches_type(Optional[WhoisGetResponse], whois, path=["response"])
assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/radar/bgp/test_ips.py b/tests/api_resources/radar/bgp/test_ips.py
new file mode 100644
index 000000000..d8438d9d7
--- /dev/null
+++ b/tests/api_resources/radar/bgp/test_ips.py
@@ -0,0 +1,101 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+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._utils import parse_datetime
+from cloudflare.types.radar.bgp import IPTimeseriesResponse
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestIPs:
+ parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
+
+ @parametrize
+ def test_method_timeseries(self, client: Cloudflare) -> None:
+ ip = client.radar.bgp.ips.timeseries()
+ assert_matches_type(IPTimeseriesResponse, ip, path=["response"])
+
+ @parametrize
+ def test_method_timeseries_with_all_params(self, client: Cloudflare) -> None:
+ ip = client.radar.bgp.ips.timeseries(
+ asn="174,7922",
+ date_end=parse_datetime("2023-09-01T11:41:33.782Z"),
+ date_range="7d",
+ date_start=parse_datetime("2023-09-01T11:41:33.782Z"),
+ format="JSON",
+ include_delay=True,
+ location="US,CA",
+ name=["string", "string", "string"],
+ )
+ assert_matches_type(IPTimeseriesResponse, ip, path=["response"])
+
+ @parametrize
+ def test_raw_response_timeseries(self, client: Cloudflare) -> None:
+ response = client.radar.bgp.ips.with_raw_response.timeseries()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ ip = response.parse()
+ assert_matches_type(IPTimeseriesResponse, ip, path=["response"])
+
+ @parametrize
+ def test_streaming_response_timeseries(self, client: Cloudflare) -> None:
+ with client.radar.bgp.ips.with_streaming_response.timeseries() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ ip = response.parse()
+ assert_matches_type(IPTimeseriesResponse, ip, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+
+class TestAsyncIPs:
+ parametrize = pytest.mark.parametrize("async_client", [False, True], indirect=True, ids=["loose", "strict"])
+
+ @parametrize
+ async def test_method_timeseries(self, async_client: AsyncCloudflare) -> None:
+ ip = await async_client.radar.bgp.ips.timeseries()
+ assert_matches_type(IPTimeseriesResponse, ip, path=["response"])
+
+ @parametrize
+ async def test_method_timeseries_with_all_params(self, async_client: AsyncCloudflare) -> None:
+ ip = await async_client.radar.bgp.ips.timeseries(
+ asn="174,7922",
+ date_end=parse_datetime("2023-09-01T11:41:33.782Z"),
+ date_range="7d",
+ date_start=parse_datetime("2023-09-01T11:41:33.782Z"),
+ format="JSON",
+ include_delay=True,
+ location="US,CA",
+ name=["string", "string", "string"],
+ )
+ assert_matches_type(IPTimeseriesResponse, ip, path=["response"])
+
+ @parametrize
+ async def test_raw_response_timeseries(self, async_client: AsyncCloudflare) -> None:
+ response = await async_client.radar.bgp.ips.with_raw_response.timeseries()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ ip = await response.parse()
+ assert_matches_type(IPTimeseriesResponse, ip, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_timeseries(self, async_client: AsyncCloudflare) -> None:
+ async with async_client.radar.bgp.ips.with_streaming_response.timeseries() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ ip = await response.parse()
+ assert_matches_type(IPTimeseriesResponse, ip, path=["response"])
+
+ assert cast(Any, response.is_closed) is True