gcore 0.3.0__py3-none-any.whl → 0.5.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of gcore might be problematic. Click here for more details.
- gcore/__init__.py +2 -1
- gcore/_base_client.py +31 -2
- gcore/_client.py +18 -0
- gcore/_constants.py +2 -2
- gcore/_models.py +8 -5
- gcore/_version.py +1 -1
- gcore/pagination.py +252 -1
- gcore/resources/__init__.py +28 -0
- gcore/resources/cloud/baremetal/flavors.py +11 -137
- gcore/resources/cloud/baremetal/images.py +10 -12
- gcore/resources/cloud/baremetal/servers.py +33 -30
- gcore/resources/cloud/billing_reservations.py +2 -2
- gcore/resources/cloud/file_shares/file_shares.py +7 -8
- gcore/resources/cloud/floating_ips.py +7 -12
- gcore/resources/cloud/gpu_baremetal_clusters/gpu_baremetal_clusters.py +33 -22
- gcore/resources/cloud/gpu_baremetal_clusters/images.py +9 -10
- gcore/resources/cloud/gpu_baremetal_clusters/interfaces.py +2 -2
- gcore/resources/cloud/gpu_baremetal_clusters/servers.py +8 -4
- gcore/resources/cloud/inference/deployments/deployments.py +76 -35
- gcore/resources/cloud/inference/deployments/logs.py +7 -7
- gcore/resources/cloud/inference/inference.py +5 -5
- gcore/resources/cloud/inference/models.py +16 -15
- gcore/resources/cloud/inference/registry_credentials.py +18 -18
- gcore/resources/cloud/inference/secrets.py +12 -13
- gcore/resources/cloud/instances/flavors.py +9 -233
- gcore/resources/cloud/instances/images.py +47 -37
- gcore/resources/cloud/instances/instances.py +49 -34
- gcore/resources/cloud/instances/interfaces.py +2 -2
- gcore/resources/cloud/ip_ranges.py +34 -2
- gcore/resources/cloud/load_balancers/l7_policies/l7_policies.py +10 -2
- gcore/resources/cloud/load_balancers/listeners.py +17 -8
- gcore/resources/cloud/load_balancers/load_balancers.py +73 -21
- gcore/resources/cloud/load_balancers/metrics.py +2 -2
- gcore/resources/cloud/load_balancers/pools/health_monitors.py +2 -2
- gcore/resources/cloud/load_balancers/pools/members.py +6 -2
- gcore/resources/cloud/networks/networks.py +81 -17
- gcore/resources/cloud/networks/routers.py +18 -18
- gcore/resources/cloud/networks/subnets.py +51 -11
- gcore/resources/cloud/projects.py +38 -24
- gcore/resources/cloud/quotas/quotas.py +6 -6
- gcore/resources/cloud/quotas/requests.py +8 -8
- gcore/resources/cloud/registries/artifacts.py +4 -4
- gcore/resources/cloud/registries/registries.py +14 -16
- gcore/resources/cloud/registries/repositories.py +4 -4
- gcore/resources/cloud/registries/tags.py +2 -2
- gcore/resources/cloud/registries/users.py +21 -22
- gcore/resources/cloud/reserved_fixed_ips/reserved_fixed_ips.py +20 -20
- gcore/resources/cloud/reserved_fixed_ips/vip.py +10 -10
- gcore/resources/cloud/secrets.py +14 -224
- gcore/resources/cloud/security_groups/rules.py +6 -6
- gcore/resources/cloud/security_groups/security_groups.py +70 -31
- gcore/resources/cloud/tasks.py +34 -32
- gcore/resources/cloud/users/role_assignments.py +12 -14
- gcore/resources/cloud/volumes.py +139 -49
- gcore/resources/fastedge/__init__.py +103 -0
- gcore/resources/fastedge/apps/__init__.py +33 -0
- gcore/resources/fastedge/apps/apps.py +932 -0
- gcore/resources/fastedge/apps/logs.py +248 -0
- gcore/resources/fastedge/binaries.py +286 -0
- gcore/resources/fastedge/fastedge.py +327 -0
- gcore/resources/fastedge/kv_stores.py +523 -0
- gcore/resources/fastedge/secrets.py +687 -0
- gcore/resources/fastedge/statistics.py +347 -0
- gcore/resources/fastedge/templates.py +652 -0
- gcore/resources/iam/__init__.py +47 -0
- gcore/resources/iam/api_tokens.py +521 -0
- gcore/resources/iam/iam.py +199 -0
- gcore/resources/iam/users.py +642 -0
- gcore/resources/waap/__init__.py +0 -14
- gcore/resources/waap/waap.py +0 -32
- gcore/types/cloud/__init__.py +2 -28
- gcore/types/cloud/baremetal/__init__.py +0 -1
- gcore/types/cloud/baremetal/image_list_params.py +1 -5
- gcore/types/cloud/baremetal/server_create_params.py +5 -9
- gcore/types/cloud/baremetal/server_list_params.py +1 -5
- gcore/types/cloud/ddos_profile.py +9 -3
- gcore/types/cloud/file_share_create_params.py +3 -5
- gcore/types/cloud/floating_ip_create_params.py +2 -4
- gcore/types/cloud/floating_ip_list_params.py +1 -5
- gcore/types/cloud/gpu_baremetal_cluster_create_params.py +3 -4
- gcore/types/cloud/gpu_baremetal_clusters/image_upload_params.py +2 -4
- gcore/types/cloud/health_monitor.py +6 -1
- gcore/types/cloud/inference/__init__.py +12 -8
- gcore/types/cloud/inference/deployment_create_params.py +224 -7
- gcore/types/cloud/inference/deployment_update_params.py +24 -3
- gcore/types/cloud/inference/deployments/__init__.py +1 -0
- gcore/types/cloud/inference/{inference_log.py → deployments/inference_deployment_log.py} +3 -3
- gcore/types/cloud/inference/inference_deployment.py +266 -0
- gcore/types/cloud/inference/{inference_apikey_secret.py → inference_deployment_api_key.py} +2 -2
- gcore/types/cloud/inference/{mlcatalog_model_card.py → inference_model.py} +2 -2
- gcore/types/cloud/inference/{inference_registry_credential.py → inference_registry_credentials.py} +2 -2
- gcore/types/cloud/inference/{inference_registry_credential_full.py → inference_registry_credentials_create.py} +2 -2
- gcore/types/cloud/inference/inference_secret.py +10 -3
- gcore/types/cloud/inference/model_list_params.py +2 -4
- gcore/types/cloud/{container_probe.py → inference/probe.py} +9 -9
- gcore/types/cloud/{container_probe_config.py → inference/probe_config.py} +5 -5
- gcore/types/cloud/{container_probe_exec.py → inference/probe_exec.py} +3 -3
- gcore/types/cloud/{container_probe_http_get.py → inference/probe_http_get.py} +3 -3
- gcore/types/cloud/{container_probe_tcp_socket.py → inference/probe_tcp_socket.py} +3 -3
- gcore/types/cloud/inference/secret_create_params.py +10 -4
- gcore/types/cloud/inference/secret_replace_params.py +10 -4
- gcore/types/cloud/{region_capacity.py → inference_region_capacity.py} +10 -3
- gcore/types/cloud/{region_capacity_list.py → inference_region_capacity_list.py} +4 -4
- gcore/types/cloud/instance_create_params.py +8 -9
- gcore/types/cloud/instance_list_params.py +1 -5
- gcore/types/cloud/instances/__init__.py +0 -2
- gcore/types/cloud/instances/image_create_from_volume_params.py +2 -4
- gcore/types/cloud/instances/image_list_params.py +1 -5
- gcore/types/cloud/instances/image_upload_params.py +2 -4
- gcore/types/cloud/load_balancer_create_params.py +8 -4
- gcore/types/cloud/load_balancer_list_params.py +1 -5
- gcore/types/cloud/load_balancer_update_params.py +24 -0
- gcore/types/cloud/load_balancers/pool_create_params.py +6 -1
- gcore/types/cloud/load_balancers/pool_update_params.py +6 -1
- gcore/types/cloud/load_balancers/pools/member_add_params.py +6 -1
- gcore/types/cloud/member.py +6 -1
- gcore/types/cloud/network_create_params.py +2 -3
- gcore/types/cloud/network_list_params.py +4 -5
- gcore/types/cloud/network_update_params.py +28 -2
- gcore/types/cloud/networks/router_list_params.py +2 -2
- gcore/types/cloud/networks/subnet_create_params.py +2 -3
- gcore/types/cloud/networks/subnet_list_params.py +1 -5
- gcore/types/cloud/networks/subnet_update_params.py +25 -0
- gcore/types/cloud/registries/__init__.py +1 -0
- gcore/types/cloud/registries/user_refresh_secret_response.py +31 -0
- gcore/types/cloud/reserved_fixed_ip_list_params.py +2 -2
- gcore/types/cloud/security_group_list_params.py +3 -7
- gcore/types/cloud/security_group_update_params.py +25 -0
- gcore/types/cloud/tag_update_map_param.py +2 -2
- gcore/types/cloud/task_list_params.py +15 -14
- gcore/types/cloud/volume_list_params.py +1 -5
- gcore/types/cloud/volume_update_params.py +29 -3
- gcore/types/fastedge/__init__.py +48 -0
- gcore/types/fastedge/app.py +81 -0
- gcore/types/fastedge/app_create_params.py +56 -0
- gcore/types/fastedge/app_list_params.py +50 -0
- gcore/types/fastedge/app_param.py +56 -0
- gcore/types/fastedge/app_replace_params.py +17 -0
- gcore/types/fastedge/app_short.py +60 -0
- gcore/types/fastedge/app_update_params.py +56 -0
- gcore/types/fastedge/apps/__init__.py +6 -0
- gcore/types/fastedge/apps/log.py +28 -0
- gcore/types/fastedge/apps/log_list_params.py +37 -0
- gcore/types/fastedge/binary.py +40 -0
- gcore/types/fastedge/binary_list_response.py +12 -0
- gcore/types/fastedge/binary_short.py +32 -0
- gcore/types/fastedge/call_status.py +24 -0
- gcore/types/fastedge/client.py +57 -0
- gcore/types/fastedge/duration_stats.py +30 -0
- gcore/types/fastedge/kv_store.py +33 -0
- gcore/types/fastedge/kv_store_create_params.py +23 -0
- gcore/types/fastedge/kv_store_get_response.py +10 -0
- gcore/types/fastedge/kv_store_list_params.py +12 -0
- gcore/types/fastedge/kv_store_list_response.py +15 -0
- gcore/types/fastedge/kv_store_replace_params.py +23 -0
- gcore/types/fastedge/kv_store_short.py +19 -0
- gcore/types/fastedge/kv_store_stats.py +26 -0
- gcore/types/fastedge/secret.py +29 -0
- gcore/types/fastedge/secret_create_params.py +27 -0
- gcore/types/fastedge/secret_create_response.py +12 -0
- gcore/types/fastedge/secret_delete_params.py +12 -0
- gcore/types/fastedge/secret_list_params.py +15 -0
- gcore/types/{cloud → fastedge}/secret_list_response.py +2 -6
- gcore/types/fastedge/secret_replace_params.py +27 -0
- gcore/types/fastedge/secret_short.py +21 -0
- gcore/types/fastedge/secret_update_params.py +27 -0
- gcore/types/fastedge/statistic_get_call_series_params.py +28 -0
- gcore/types/fastedge/statistic_get_call_series_response.py +12 -0
- gcore/types/fastedge/statistic_get_duration_series_params.py +28 -0
- gcore/types/fastedge/statistic_get_duration_series_response.py +12 -0
- gcore/types/fastedge/template.py +31 -0
- gcore/types/fastedge/template_create_params.py +30 -0
- gcore/types/fastedge/template_delete_params.py +12 -0
- gcore/types/fastedge/template_list_params.py +25 -0
- gcore/types/fastedge/template_parameter.py +22 -0
- gcore/types/fastedge/template_parameter_param.py +21 -0
- gcore/types/fastedge/template_replace_params.py +30 -0
- gcore/types/fastedge/template_short.py +27 -0
- gcore/types/iam/__init__.py +17 -0
- gcore/types/iam/account_overview.py +488 -0
- gcore/types/iam/api_token.py +78 -0
- gcore/types/iam/api_token_create.py +15 -0
- gcore/types/iam/api_token_create_params.py +42 -0
- gcore/types/iam/api_token_list.py +81 -0
- gcore/types/iam/api_token_list_params.py +41 -0
- gcore/types/iam/user.py +86 -0
- gcore/types/iam/user_detailed.py +104 -0
- gcore/types/iam/user_invite.py +15 -0
- gcore/types/iam/user_invite_params.py +37 -0
- gcore/types/iam/user_list_params.py +15 -0
- gcore/types/iam/user_update.py +104 -0
- gcore/types/iam/user_update_params.py +52 -0
- gcore/types/waap/__init__.py +0 -1
- gcore/types/waap/domains/custom_rule_create_params.py +7 -3
- gcore/types/waap/domains/custom_rule_update_params.py +7 -3
- gcore/types/waap/waap_custom_rule.py +7 -3
- {gcore-0.3.0.dist-info → gcore-0.5.0.dist-info}/METADATA +44 -5
- {gcore-0.3.0.dist-info → gcore-0.5.0.dist-info}/RECORD +200 -151
- gcore/resources/waap/clients.py +0 -135
- gcore/types/cloud/aws_iam_data.py +0 -13
- gcore/types/cloud/aws_iam_data_param.py +0 -15
- gcore/types/cloud/baremetal/flavor_list_suitable_params.py +0 -22
- gcore/types/cloud/capacity.py +0 -13
- gcore/types/cloud/container_probe_config_create_param.py +0 -17
- gcore/types/cloud/container_probe_create_param.py +0 -38
- gcore/types/cloud/container_probe_exec_create_param.py +0 -13
- gcore/types/cloud/container_probe_http_get_create_param.py +0 -25
- gcore/types/cloud/container_probe_tcp_socket_create_param.py +0 -12
- gcore/types/cloud/container_scale.py +0 -25
- gcore/types/cloud/container_scale_trigger_rate.py +0 -13
- gcore/types/cloud/container_scale_trigger_sqs.py +0 -33
- gcore/types/cloud/container_scale_trigger_threshold.py +0 -10
- gcore/types/cloud/container_scale_triggers.py +0 -36
- gcore/types/cloud/deploy_status.py +0 -13
- gcore/types/cloud/inference/container.py +0 -26
- gcore/types/cloud/inference/inference.py +0 -95
- gcore/types/cloud/inference/mlcatalog_order_by_choices.py +0 -7
- gcore/types/cloud/inference_probes.py +0 -19
- gcore/types/cloud/ingress_opts_out.py +0 -16
- gcore/types/cloud/ingress_opts_param.py +0 -18
- gcore/types/cloud/instances/flavor_list_for_resize_params.py +0 -16
- gcore/types/cloud/instances/flavor_list_suitable_params.py +0 -59
- gcore/types/cloud/secret_create_params.py +0 -66
- gcore/types/waap/client_me_response.py +0 -34
- {gcore-0.3.0.dist-info → gcore-0.5.0.dist-info}/WHEEL +0 -0
- {gcore-0.3.0.dist-info → gcore-0.5.0.dist-info}/licenses/LICENSE +0 -0
gcore/__init__.py
CHANGED
|
@@ -26,7 +26,7 @@ from ._exceptions import (
|
|
|
26
26
|
UnprocessableEntityError,
|
|
27
27
|
APIResponseValidationError,
|
|
28
28
|
)
|
|
29
|
-
from ._base_client import DefaultHttpxClient, DefaultAsyncHttpxClient
|
|
29
|
+
from ._base_client import DefaultHttpxClient, DefaultAioHttpClient, DefaultAsyncHttpxClient
|
|
30
30
|
from ._utils._logs import setup_logging as _setup_logging
|
|
31
31
|
|
|
32
32
|
__all__ = [
|
|
@@ -68,6 +68,7 @@ __all__ = [
|
|
|
68
68
|
"DEFAULT_CONNECTION_LIMITS",
|
|
69
69
|
"DefaultHttpxClient",
|
|
70
70
|
"DefaultAsyncHttpxClient",
|
|
71
|
+
"DefaultAioHttpClient",
|
|
71
72
|
]
|
|
72
73
|
|
|
73
74
|
if not _t.TYPE_CHECKING:
|
gcore/_base_client.py
CHANGED
|
@@ -529,6 +529,15 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
|
|
529
529
|
# work around https://github.com/encode/httpx/discussions/2880
|
|
530
530
|
kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")}
|
|
531
531
|
|
|
532
|
+
is_body_allowed = options.method.lower() != "get"
|
|
533
|
+
|
|
534
|
+
if is_body_allowed:
|
|
535
|
+
kwargs["json"] = json_data if is_given(json_data) else None
|
|
536
|
+
kwargs["files"] = files
|
|
537
|
+
else:
|
|
538
|
+
headers.pop("Content-Type", None)
|
|
539
|
+
kwargs.pop("data", None)
|
|
540
|
+
|
|
532
541
|
# TODO: report this error to httpx
|
|
533
542
|
return self._client.build_request( # pyright: ignore[reportUnknownMemberType]
|
|
534
543
|
headers=headers,
|
|
@@ -540,8 +549,6 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
|
|
540
549
|
# so that passing a `TypedDict` doesn't cause an error.
|
|
541
550
|
# https://github.com/microsoft/pyright/issues/3526#event-6715453066
|
|
542
551
|
params=self.qs.stringify(cast(Mapping[str, Any], params)) if params else None,
|
|
543
|
-
json=json_data if is_given(json_data) else None,
|
|
544
|
-
files=files,
|
|
545
552
|
**kwargs,
|
|
546
553
|
)
|
|
547
554
|
|
|
@@ -1289,6 +1296,24 @@ class _DefaultAsyncHttpxClient(httpx.AsyncClient):
|
|
|
1289
1296
|
super().__init__(**kwargs)
|
|
1290
1297
|
|
|
1291
1298
|
|
|
1299
|
+
try:
|
|
1300
|
+
import httpx_aiohttp
|
|
1301
|
+
except ImportError:
|
|
1302
|
+
|
|
1303
|
+
class _DefaultAioHttpClient(httpx.AsyncClient):
|
|
1304
|
+
def __init__(self, **_kwargs: Any) -> None:
|
|
1305
|
+
raise RuntimeError("To use the aiohttp client you must have installed the package with the `aiohttp` extra")
|
|
1306
|
+
else:
|
|
1307
|
+
|
|
1308
|
+
class _DefaultAioHttpClient(httpx_aiohttp.HttpxAiohttpClient): # type: ignore
|
|
1309
|
+
def __init__(self, **kwargs: Any) -> None:
|
|
1310
|
+
kwargs.setdefault("timeout", DEFAULT_TIMEOUT)
|
|
1311
|
+
kwargs.setdefault("limits", DEFAULT_CONNECTION_LIMITS)
|
|
1312
|
+
kwargs.setdefault("follow_redirects", True)
|
|
1313
|
+
|
|
1314
|
+
super().__init__(**kwargs)
|
|
1315
|
+
|
|
1316
|
+
|
|
1292
1317
|
if TYPE_CHECKING:
|
|
1293
1318
|
DefaultAsyncHttpxClient = httpx.AsyncClient
|
|
1294
1319
|
"""An alias to `httpx.AsyncClient` that provides the same defaults that this SDK
|
|
@@ -1297,8 +1322,12 @@ if TYPE_CHECKING:
|
|
|
1297
1322
|
This is useful because overriding the `http_client` with your own instance of
|
|
1298
1323
|
`httpx.AsyncClient` will result in httpx's defaults being used, not ours.
|
|
1299
1324
|
"""
|
|
1325
|
+
|
|
1326
|
+
DefaultAioHttpClient = httpx.AsyncClient
|
|
1327
|
+
"""An alias to `httpx.AsyncClient` that changes the default HTTP transport to `aiohttp`."""
|
|
1300
1328
|
else:
|
|
1301
1329
|
DefaultAsyncHttpxClient = _DefaultAsyncHttpxClient
|
|
1330
|
+
DefaultAioHttpClient = _DefaultAioHttpClient
|
|
1302
1331
|
|
|
1303
1332
|
|
|
1304
1333
|
class AsyncHttpxClientWrapper(DefaultAsyncHttpxClient):
|
gcore/_client.py
CHANGED
|
@@ -28,8 +28,10 @@ from ._base_client import (
|
|
|
28
28
|
SyncAPIClient,
|
|
29
29
|
AsyncAPIClient,
|
|
30
30
|
)
|
|
31
|
+
from .resources.iam import iam
|
|
31
32
|
from .resources.waap import waap
|
|
32
33
|
from .resources.cloud import cloud
|
|
34
|
+
from .resources.fastedge import fastedge
|
|
33
35
|
|
|
34
36
|
__all__ = ["Timeout", "Transport", "ProxiesTypes", "RequestOptions", "Gcore", "AsyncGcore", "Client", "AsyncClient"]
|
|
35
37
|
|
|
@@ -37,6 +39,8 @@ __all__ = ["Timeout", "Transport", "ProxiesTypes", "RequestOptions", "Gcore", "A
|
|
|
37
39
|
class Gcore(SyncAPIClient):
|
|
38
40
|
cloud: cloud.CloudResource
|
|
39
41
|
waap: waap.WaapResource
|
|
42
|
+
iam: iam.IamResource
|
|
43
|
+
fastedge: fastedge.FastedgeResource
|
|
40
44
|
with_raw_response: GcoreWithRawResponse
|
|
41
45
|
with_streaming_response: GcoreWithStreamedResponse
|
|
42
46
|
|
|
@@ -117,6 +121,8 @@ class Gcore(SyncAPIClient):
|
|
|
117
121
|
|
|
118
122
|
self.cloud = cloud.CloudResource(self)
|
|
119
123
|
self.waap = waap.WaapResource(self)
|
|
124
|
+
self.iam = iam.IamResource(self)
|
|
125
|
+
self.fastedge = fastedge.FastedgeResource(self)
|
|
120
126
|
self.with_raw_response = GcoreWithRawResponse(self)
|
|
121
127
|
self.with_streaming_response = GcoreWithStreamedResponse(self)
|
|
122
128
|
|
|
@@ -252,6 +258,8 @@ class Gcore(SyncAPIClient):
|
|
|
252
258
|
class AsyncGcore(AsyncAPIClient):
|
|
253
259
|
cloud: cloud.AsyncCloudResource
|
|
254
260
|
waap: waap.AsyncWaapResource
|
|
261
|
+
iam: iam.AsyncIamResource
|
|
262
|
+
fastedge: fastedge.AsyncFastedgeResource
|
|
255
263
|
with_raw_response: AsyncGcoreWithRawResponse
|
|
256
264
|
with_streaming_response: AsyncGcoreWithStreamedResponse
|
|
257
265
|
|
|
@@ -332,6 +340,8 @@ class AsyncGcore(AsyncAPIClient):
|
|
|
332
340
|
|
|
333
341
|
self.cloud = cloud.AsyncCloudResource(self)
|
|
334
342
|
self.waap = waap.AsyncWaapResource(self)
|
|
343
|
+
self.iam = iam.AsyncIamResource(self)
|
|
344
|
+
self.fastedge = fastedge.AsyncFastedgeResource(self)
|
|
335
345
|
self.with_raw_response = AsyncGcoreWithRawResponse(self)
|
|
336
346
|
self.with_streaming_response = AsyncGcoreWithStreamedResponse(self)
|
|
337
347
|
|
|
@@ -468,24 +478,32 @@ class GcoreWithRawResponse:
|
|
|
468
478
|
def __init__(self, client: Gcore) -> None:
|
|
469
479
|
self.cloud = cloud.CloudResourceWithRawResponse(client.cloud)
|
|
470
480
|
self.waap = waap.WaapResourceWithRawResponse(client.waap)
|
|
481
|
+
self.iam = iam.IamResourceWithRawResponse(client.iam)
|
|
482
|
+
self.fastedge = fastedge.FastedgeResourceWithRawResponse(client.fastedge)
|
|
471
483
|
|
|
472
484
|
|
|
473
485
|
class AsyncGcoreWithRawResponse:
|
|
474
486
|
def __init__(self, client: AsyncGcore) -> None:
|
|
475
487
|
self.cloud = cloud.AsyncCloudResourceWithRawResponse(client.cloud)
|
|
476
488
|
self.waap = waap.AsyncWaapResourceWithRawResponse(client.waap)
|
|
489
|
+
self.iam = iam.AsyncIamResourceWithRawResponse(client.iam)
|
|
490
|
+
self.fastedge = fastedge.AsyncFastedgeResourceWithRawResponse(client.fastedge)
|
|
477
491
|
|
|
478
492
|
|
|
479
493
|
class GcoreWithStreamedResponse:
|
|
480
494
|
def __init__(self, client: Gcore) -> None:
|
|
481
495
|
self.cloud = cloud.CloudResourceWithStreamingResponse(client.cloud)
|
|
482
496
|
self.waap = waap.WaapResourceWithStreamingResponse(client.waap)
|
|
497
|
+
self.iam = iam.IamResourceWithStreamingResponse(client.iam)
|
|
498
|
+
self.fastedge = fastedge.FastedgeResourceWithStreamingResponse(client.fastedge)
|
|
483
499
|
|
|
484
500
|
|
|
485
501
|
class AsyncGcoreWithStreamedResponse:
|
|
486
502
|
def __init__(self, client: AsyncGcore) -> None:
|
|
487
503
|
self.cloud = cloud.AsyncCloudResourceWithStreamingResponse(client.cloud)
|
|
488
504
|
self.waap = waap.AsyncWaapResourceWithStreamingResponse(client.waap)
|
|
505
|
+
self.iam = iam.AsyncIamResourceWithStreamingResponse(client.iam)
|
|
506
|
+
self.fastedge = fastedge.AsyncFastedgeResourceWithStreamingResponse(client.fastedge)
|
|
489
507
|
|
|
490
508
|
|
|
491
509
|
Client = Gcore
|
gcore/_constants.py
CHANGED
|
@@ -5,8 +5,8 @@ import httpx
|
|
|
5
5
|
RAW_RESPONSE_HEADER = "X-Stainless-Raw-Response"
|
|
6
6
|
OVERRIDE_CAST_TO_HEADER = "____stainless_override_cast_to"
|
|
7
7
|
|
|
8
|
-
# default timeout is
|
|
9
|
-
DEFAULT_TIMEOUT = httpx.Timeout(timeout=
|
|
8
|
+
# default timeout is 2 minutes
|
|
9
|
+
DEFAULT_TIMEOUT = httpx.Timeout(timeout=120, connect=5.0)
|
|
10
10
|
DEFAULT_MAX_RETRIES = 2
|
|
11
11
|
DEFAULT_CONNECTION_LIMITS = httpx.Limits(max_connections=100, max_keepalive_connections=20)
|
|
12
12
|
|
gcore/_models.py
CHANGED
|
@@ -2,9 +2,10 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import os
|
|
4
4
|
import inspect
|
|
5
|
-
from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, cast
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, Optional, cast
|
|
6
6
|
from datetime import date, datetime
|
|
7
7
|
from typing_extensions import (
|
|
8
|
+
List,
|
|
8
9
|
Unpack,
|
|
9
10
|
Literal,
|
|
10
11
|
ClassVar,
|
|
@@ -366,7 +367,7 @@ def _construct_field(value: object, field: FieldInfo, key: str) -> object:
|
|
|
366
367
|
if type_ is None:
|
|
367
368
|
raise RuntimeError(f"Unexpected field type is None for {key}")
|
|
368
369
|
|
|
369
|
-
return construct_type(value=value, type_=type_)
|
|
370
|
+
return construct_type(value=value, type_=type_, metadata=getattr(field, "metadata", None))
|
|
370
371
|
|
|
371
372
|
|
|
372
373
|
def is_basemodel(type_: type) -> bool:
|
|
@@ -420,7 +421,7 @@ def construct_type_unchecked(*, value: object, type_: type[_T]) -> _T:
|
|
|
420
421
|
return cast(_T, construct_type(value=value, type_=type_))
|
|
421
422
|
|
|
422
423
|
|
|
423
|
-
def construct_type(*, value: object, type_: object) -> object:
|
|
424
|
+
def construct_type(*, value: object, type_: object, metadata: Optional[List[Any]] = None) -> object:
|
|
424
425
|
"""Loose coercion to the expected type with construction of nested values.
|
|
425
426
|
|
|
426
427
|
If the given value does not match the expected type then it is returned as-is.
|
|
@@ -438,8 +439,10 @@ def construct_type(*, value: object, type_: object) -> object:
|
|
|
438
439
|
type_ = type_.__value__ # type: ignore[unreachable]
|
|
439
440
|
|
|
440
441
|
# unwrap `Annotated[T, ...]` -> `T`
|
|
441
|
-
if
|
|
442
|
-
meta: tuple[Any, ...] =
|
|
442
|
+
if metadata is not None:
|
|
443
|
+
meta: tuple[Any, ...] = tuple(metadata)
|
|
444
|
+
elif is_annotated_type(type_):
|
|
445
|
+
meta = get_args(type_)[1:]
|
|
443
446
|
type_ = extract_type_arg(type_, 0)
|
|
444
447
|
else:
|
|
445
448
|
meta = tuple()
|
gcore/_version.py
CHANGED
gcore/pagination.py
CHANGED
|
@@ -5,7 +5,18 @@ from typing_extensions import override
|
|
|
5
5
|
|
|
6
6
|
from ._base_client import BasePage, PageInfo, BaseSyncPage, BaseAsyncPage
|
|
7
7
|
|
|
8
|
-
__all__ = [
|
|
8
|
+
__all__ = [
|
|
9
|
+
"SyncOffsetPage",
|
|
10
|
+
"AsyncOffsetPage",
|
|
11
|
+
"SyncOffsetPageIam",
|
|
12
|
+
"AsyncOffsetPageIam",
|
|
13
|
+
"SyncOffsetPageFastedgeApps",
|
|
14
|
+
"AsyncOffsetPageFastedgeApps",
|
|
15
|
+
"SyncOffsetPageFastedgeTemplates",
|
|
16
|
+
"AsyncOffsetPageFastedgeTemplates",
|
|
17
|
+
"SyncOffsetPageFastedgeAppLogs",
|
|
18
|
+
"AsyncOffsetPageFastedgeAppLogs",
|
|
19
|
+
]
|
|
9
20
|
|
|
10
21
|
_T = TypeVar("_T")
|
|
11
22
|
|
|
@@ -68,3 +79,243 @@ class AsyncOffsetPage(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
|
|
|
68
79
|
return PageInfo(params={"offset": current_count})
|
|
69
80
|
|
|
70
81
|
return None
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
class SyncOffsetPageIam(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
|
|
85
|
+
result: List[_T]
|
|
86
|
+
count: Optional[int] = None
|
|
87
|
+
|
|
88
|
+
@override
|
|
89
|
+
def _get_page_items(self) -> List[_T]:
|
|
90
|
+
result = self.result
|
|
91
|
+
if not result:
|
|
92
|
+
return []
|
|
93
|
+
return result
|
|
94
|
+
|
|
95
|
+
@override
|
|
96
|
+
def next_page_info(self) -> Optional[PageInfo]:
|
|
97
|
+
offset = self._options.params.get("offset") or 0
|
|
98
|
+
if not isinstance(offset, int):
|
|
99
|
+
raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
|
|
100
|
+
|
|
101
|
+
length = len(self._get_page_items())
|
|
102
|
+
current_count = offset + length
|
|
103
|
+
|
|
104
|
+
count = self.count
|
|
105
|
+
if count is None:
|
|
106
|
+
return None
|
|
107
|
+
|
|
108
|
+
if current_count < count:
|
|
109
|
+
return PageInfo(params={"offset": current_count})
|
|
110
|
+
|
|
111
|
+
return None
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
class AsyncOffsetPageIam(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
|
|
115
|
+
result: List[_T]
|
|
116
|
+
count: Optional[int] = None
|
|
117
|
+
|
|
118
|
+
@override
|
|
119
|
+
def _get_page_items(self) -> List[_T]:
|
|
120
|
+
result = self.result
|
|
121
|
+
if not result:
|
|
122
|
+
return []
|
|
123
|
+
return result
|
|
124
|
+
|
|
125
|
+
@override
|
|
126
|
+
def next_page_info(self) -> Optional[PageInfo]:
|
|
127
|
+
offset = self._options.params.get("offset") or 0
|
|
128
|
+
if not isinstance(offset, int):
|
|
129
|
+
raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
|
|
130
|
+
|
|
131
|
+
length = len(self._get_page_items())
|
|
132
|
+
current_count = offset + length
|
|
133
|
+
|
|
134
|
+
count = self.count
|
|
135
|
+
if count is None:
|
|
136
|
+
return None
|
|
137
|
+
|
|
138
|
+
if current_count < count:
|
|
139
|
+
return PageInfo(params={"offset": current_count})
|
|
140
|
+
|
|
141
|
+
return None
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class SyncOffsetPageFastedgeApps(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
|
|
145
|
+
apps: List[_T]
|
|
146
|
+
count: Optional[int] = None
|
|
147
|
+
|
|
148
|
+
@override
|
|
149
|
+
def _get_page_items(self) -> List[_T]:
|
|
150
|
+
apps = self.apps
|
|
151
|
+
if not apps:
|
|
152
|
+
return []
|
|
153
|
+
return apps
|
|
154
|
+
|
|
155
|
+
@override
|
|
156
|
+
def next_page_info(self) -> Optional[PageInfo]:
|
|
157
|
+
offset = self._options.params.get("offset") or 0
|
|
158
|
+
if not isinstance(offset, int):
|
|
159
|
+
raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
|
|
160
|
+
|
|
161
|
+
length = len(self._get_page_items())
|
|
162
|
+
current_count = offset + length
|
|
163
|
+
|
|
164
|
+
count = self.count
|
|
165
|
+
if count is None:
|
|
166
|
+
return None
|
|
167
|
+
|
|
168
|
+
if current_count < count:
|
|
169
|
+
return PageInfo(params={"offset": current_count})
|
|
170
|
+
|
|
171
|
+
return None
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
class AsyncOffsetPageFastedgeApps(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
|
|
175
|
+
apps: List[_T]
|
|
176
|
+
count: Optional[int] = None
|
|
177
|
+
|
|
178
|
+
@override
|
|
179
|
+
def _get_page_items(self) -> List[_T]:
|
|
180
|
+
apps = self.apps
|
|
181
|
+
if not apps:
|
|
182
|
+
return []
|
|
183
|
+
return apps
|
|
184
|
+
|
|
185
|
+
@override
|
|
186
|
+
def next_page_info(self) -> Optional[PageInfo]:
|
|
187
|
+
offset = self._options.params.get("offset") or 0
|
|
188
|
+
if not isinstance(offset, int):
|
|
189
|
+
raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
|
|
190
|
+
|
|
191
|
+
length = len(self._get_page_items())
|
|
192
|
+
current_count = offset + length
|
|
193
|
+
|
|
194
|
+
count = self.count
|
|
195
|
+
if count is None:
|
|
196
|
+
return None
|
|
197
|
+
|
|
198
|
+
if current_count < count:
|
|
199
|
+
return PageInfo(params={"offset": current_count})
|
|
200
|
+
|
|
201
|
+
return None
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
class SyncOffsetPageFastedgeTemplates(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
|
|
205
|
+
templates: List[_T]
|
|
206
|
+
count: Optional[int] = None
|
|
207
|
+
|
|
208
|
+
@override
|
|
209
|
+
def _get_page_items(self) -> List[_T]:
|
|
210
|
+
templates = self.templates
|
|
211
|
+
if not templates:
|
|
212
|
+
return []
|
|
213
|
+
return templates
|
|
214
|
+
|
|
215
|
+
@override
|
|
216
|
+
def next_page_info(self) -> Optional[PageInfo]:
|
|
217
|
+
offset = self._options.params.get("offset") or 0
|
|
218
|
+
if not isinstance(offset, int):
|
|
219
|
+
raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
|
|
220
|
+
|
|
221
|
+
length = len(self._get_page_items())
|
|
222
|
+
current_count = offset + length
|
|
223
|
+
|
|
224
|
+
count = self.count
|
|
225
|
+
if count is None:
|
|
226
|
+
return None
|
|
227
|
+
|
|
228
|
+
if current_count < count:
|
|
229
|
+
return PageInfo(params={"offset": current_count})
|
|
230
|
+
|
|
231
|
+
return None
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
class AsyncOffsetPageFastedgeTemplates(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
|
|
235
|
+
templates: List[_T]
|
|
236
|
+
count: Optional[int] = None
|
|
237
|
+
|
|
238
|
+
@override
|
|
239
|
+
def _get_page_items(self) -> List[_T]:
|
|
240
|
+
templates = self.templates
|
|
241
|
+
if not templates:
|
|
242
|
+
return []
|
|
243
|
+
return templates
|
|
244
|
+
|
|
245
|
+
@override
|
|
246
|
+
def next_page_info(self) -> Optional[PageInfo]:
|
|
247
|
+
offset = self._options.params.get("offset") or 0
|
|
248
|
+
if not isinstance(offset, int):
|
|
249
|
+
raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
|
|
250
|
+
|
|
251
|
+
length = len(self._get_page_items())
|
|
252
|
+
current_count = offset + length
|
|
253
|
+
|
|
254
|
+
count = self.count
|
|
255
|
+
if count is None:
|
|
256
|
+
return None
|
|
257
|
+
|
|
258
|
+
if current_count < count:
|
|
259
|
+
return PageInfo(params={"offset": current_count})
|
|
260
|
+
|
|
261
|
+
return None
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
class SyncOffsetPageFastedgeAppLogs(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
|
|
265
|
+
logs: List[_T]
|
|
266
|
+
total_count: Optional[int] = None
|
|
267
|
+
|
|
268
|
+
@override
|
|
269
|
+
def _get_page_items(self) -> List[_T]:
|
|
270
|
+
logs = self.logs
|
|
271
|
+
if not logs:
|
|
272
|
+
return []
|
|
273
|
+
return logs
|
|
274
|
+
|
|
275
|
+
@override
|
|
276
|
+
def next_page_info(self) -> Optional[PageInfo]:
|
|
277
|
+
offset = self._options.params.get("offset") or 0
|
|
278
|
+
if not isinstance(offset, int):
|
|
279
|
+
raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
|
|
280
|
+
|
|
281
|
+
length = len(self._get_page_items())
|
|
282
|
+
current_count = offset + length
|
|
283
|
+
|
|
284
|
+
total_count = self.total_count
|
|
285
|
+
if total_count is None:
|
|
286
|
+
return None
|
|
287
|
+
|
|
288
|
+
if current_count < total_count:
|
|
289
|
+
return PageInfo(params={"offset": current_count})
|
|
290
|
+
|
|
291
|
+
return None
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
class AsyncOffsetPageFastedgeAppLogs(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
|
|
295
|
+
logs: List[_T]
|
|
296
|
+
total_count: Optional[int] = None
|
|
297
|
+
|
|
298
|
+
@override
|
|
299
|
+
def _get_page_items(self) -> List[_T]:
|
|
300
|
+
logs = self.logs
|
|
301
|
+
if not logs:
|
|
302
|
+
return []
|
|
303
|
+
return logs
|
|
304
|
+
|
|
305
|
+
@override
|
|
306
|
+
def next_page_info(self) -> Optional[PageInfo]:
|
|
307
|
+
offset = self._options.params.get("offset") or 0
|
|
308
|
+
if not isinstance(offset, int):
|
|
309
|
+
raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
|
|
310
|
+
|
|
311
|
+
length = len(self._get_page_items())
|
|
312
|
+
current_count = offset + length
|
|
313
|
+
|
|
314
|
+
total_count = self.total_count
|
|
315
|
+
if total_count is None:
|
|
316
|
+
return None
|
|
317
|
+
|
|
318
|
+
if current_count < total_count:
|
|
319
|
+
return PageInfo(params={"offset": current_count})
|
|
320
|
+
|
|
321
|
+
return None
|
gcore/resources/__init__.py
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
2
|
|
|
3
|
+
from .iam import (
|
|
4
|
+
IamResource,
|
|
5
|
+
AsyncIamResource,
|
|
6
|
+
IamResourceWithRawResponse,
|
|
7
|
+
AsyncIamResourceWithRawResponse,
|
|
8
|
+
IamResourceWithStreamingResponse,
|
|
9
|
+
AsyncIamResourceWithStreamingResponse,
|
|
10
|
+
)
|
|
3
11
|
from .waap import (
|
|
4
12
|
WaapResource,
|
|
5
13
|
AsyncWaapResource,
|
|
@@ -16,6 +24,14 @@ from .cloud import (
|
|
|
16
24
|
CloudResourceWithStreamingResponse,
|
|
17
25
|
AsyncCloudResourceWithStreamingResponse,
|
|
18
26
|
)
|
|
27
|
+
from .fastedge import (
|
|
28
|
+
FastedgeResource,
|
|
29
|
+
AsyncFastedgeResource,
|
|
30
|
+
FastedgeResourceWithRawResponse,
|
|
31
|
+
AsyncFastedgeResourceWithRawResponse,
|
|
32
|
+
FastedgeResourceWithStreamingResponse,
|
|
33
|
+
AsyncFastedgeResourceWithStreamingResponse,
|
|
34
|
+
)
|
|
19
35
|
|
|
20
36
|
__all__ = [
|
|
21
37
|
"CloudResource",
|
|
@@ -30,4 +46,16 @@ __all__ = [
|
|
|
30
46
|
"AsyncWaapResourceWithRawResponse",
|
|
31
47
|
"WaapResourceWithStreamingResponse",
|
|
32
48
|
"AsyncWaapResourceWithStreamingResponse",
|
|
49
|
+
"IamResource",
|
|
50
|
+
"AsyncIamResource",
|
|
51
|
+
"IamResourceWithRawResponse",
|
|
52
|
+
"AsyncIamResourceWithRawResponse",
|
|
53
|
+
"IamResourceWithStreamingResponse",
|
|
54
|
+
"AsyncIamResourceWithStreamingResponse",
|
|
55
|
+
"FastedgeResource",
|
|
56
|
+
"AsyncFastedgeResource",
|
|
57
|
+
"FastedgeResourceWithRawResponse",
|
|
58
|
+
"AsyncFastedgeResourceWithRawResponse",
|
|
59
|
+
"FastedgeResourceWithStreamingResponse",
|
|
60
|
+
"AsyncFastedgeResourceWithStreamingResponse",
|
|
33
61
|
]
|