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.

Files changed (226) hide show
  1. gcore/__init__.py +2 -1
  2. gcore/_base_client.py +31 -2
  3. gcore/_client.py +18 -0
  4. gcore/_constants.py +2 -2
  5. gcore/_models.py +8 -5
  6. gcore/_version.py +1 -1
  7. gcore/pagination.py +252 -1
  8. gcore/resources/__init__.py +28 -0
  9. gcore/resources/cloud/baremetal/flavors.py +11 -137
  10. gcore/resources/cloud/baremetal/images.py +10 -12
  11. gcore/resources/cloud/baremetal/servers.py +33 -30
  12. gcore/resources/cloud/billing_reservations.py +2 -2
  13. gcore/resources/cloud/file_shares/file_shares.py +7 -8
  14. gcore/resources/cloud/floating_ips.py +7 -12
  15. gcore/resources/cloud/gpu_baremetal_clusters/gpu_baremetal_clusters.py +33 -22
  16. gcore/resources/cloud/gpu_baremetal_clusters/images.py +9 -10
  17. gcore/resources/cloud/gpu_baremetal_clusters/interfaces.py +2 -2
  18. gcore/resources/cloud/gpu_baremetal_clusters/servers.py +8 -4
  19. gcore/resources/cloud/inference/deployments/deployments.py +76 -35
  20. gcore/resources/cloud/inference/deployments/logs.py +7 -7
  21. gcore/resources/cloud/inference/inference.py +5 -5
  22. gcore/resources/cloud/inference/models.py +16 -15
  23. gcore/resources/cloud/inference/registry_credentials.py +18 -18
  24. gcore/resources/cloud/inference/secrets.py +12 -13
  25. gcore/resources/cloud/instances/flavors.py +9 -233
  26. gcore/resources/cloud/instances/images.py +47 -37
  27. gcore/resources/cloud/instances/instances.py +49 -34
  28. gcore/resources/cloud/instances/interfaces.py +2 -2
  29. gcore/resources/cloud/ip_ranges.py +34 -2
  30. gcore/resources/cloud/load_balancers/l7_policies/l7_policies.py +10 -2
  31. gcore/resources/cloud/load_balancers/listeners.py +17 -8
  32. gcore/resources/cloud/load_balancers/load_balancers.py +73 -21
  33. gcore/resources/cloud/load_balancers/metrics.py +2 -2
  34. gcore/resources/cloud/load_balancers/pools/health_monitors.py +2 -2
  35. gcore/resources/cloud/load_balancers/pools/members.py +6 -2
  36. gcore/resources/cloud/networks/networks.py +81 -17
  37. gcore/resources/cloud/networks/routers.py +18 -18
  38. gcore/resources/cloud/networks/subnets.py +51 -11
  39. gcore/resources/cloud/projects.py +38 -24
  40. gcore/resources/cloud/quotas/quotas.py +6 -6
  41. gcore/resources/cloud/quotas/requests.py +8 -8
  42. gcore/resources/cloud/registries/artifacts.py +4 -4
  43. gcore/resources/cloud/registries/registries.py +14 -16
  44. gcore/resources/cloud/registries/repositories.py +4 -4
  45. gcore/resources/cloud/registries/tags.py +2 -2
  46. gcore/resources/cloud/registries/users.py +21 -22
  47. gcore/resources/cloud/reserved_fixed_ips/reserved_fixed_ips.py +20 -20
  48. gcore/resources/cloud/reserved_fixed_ips/vip.py +10 -10
  49. gcore/resources/cloud/secrets.py +14 -224
  50. gcore/resources/cloud/security_groups/rules.py +6 -6
  51. gcore/resources/cloud/security_groups/security_groups.py +70 -31
  52. gcore/resources/cloud/tasks.py +34 -32
  53. gcore/resources/cloud/users/role_assignments.py +12 -14
  54. gcore/resources/cloud/volumes.py +139 -49
  55. gcore/resources/fastedge/__init__.py +103 -0
  56. gcore/resources/fastedge/apps/__init__.py +33 -0
  57. gcore/resources/fastedge/apps/apps.py +932 -0
  58. gcore/resources/fastedge/apps/logs.py +248 -0
  59. gcore/resources/fastedge/binaries.py +286 -0
  60. gcore/resources/fastedge/fastedge.py +327 -0
  61. gcore/resources/fastedge/kv_stores.py +523 -0
  62. gcore/resources/fastedge/secrets.py +687 -0
  63. gcore/resources/fastedge/statistics.py +347 -0
  64. gcore/resources/fastedge/templates.py +652 -0
  65. gcore/resources/iam/__init__.py +47 -0
  66. gcore/resources/iam/api_tokens.py +521 -0
  67. gcore/resources/iam/iam.py +199 -0
  68. gcore/resources/iam/users.py +642 -0
  69. gcore/resources/waap/__init__.py +0 -14
  70. gcore/resources/waap/waap.py +0 -32
  71. gcore/types/cloud/__init__.py +2 -28
  72. gcore/types/cloud/baremetal/__init__.py +0 -1
  73. gcore/types/cloud/baremetal/image_list_params.py +1 -5
  74. gcore/types/cloud/baremetal/server_create_params.py +5 -9
  75. gcore/types/cloud/baremetal/server_list_params.py +1 -5
  76. gcore/types/cloud/ddos_profile.py +9 -3
  77. gcore/types/cloud/file_share_create_params.py +3 -5
  78. gcore/types/cloud/floating_ip_create_params.py +2 -4
  79. gcore/types/cloud/floating_ip_list_params.py +1 -5
  80. gcore/types/cloud/gpu_baremetal_cluster_create_params.py +3 -4
  81. gcore/types/cloud/gpu_baremetal_clusters/image_upload_params.py +2 -4
  82. gcore/types/cloud/health_monitor.py +6 -1
  83. gcore/types/cloud/inference/__init__.py +12 -8
  84. gcore/types/cloud/inference/deployment_create_params.py +224 -7
  85. gcore/types/cloud/inference/deployment_update_params.py +24 -3
  86. gcore/types/cloud/inference/deployments/__init__.py +1 -0
  87. gcore/types/cloud/inference/{inference_log.py → deployments/inference_deployment_log.py} +3 -3
  88. gcore/types/cloud/inference/inference_deployment.py +266 -0
  89. gcore/types/cloud/inference/{inference_apikey_secret.py → inference_deployment_api_key.py} +2 -2
  90. gcore/types/cloud/inference/{mlcatalog_model_card.py → inference_model.py} +2 -2
  91. gcore/types/cloud/inference/{inference_registry_credential.py → inference_registry_credentials.py} +2 -2
  92. gcore/types/cloud/inference/{inference_registry_credential_full.py → inference_registry_credentials_create.py} +2 -2
  93. gcore/types/cloud/inference/inference_secret.py +10 -3
  94. gcore/types/cloud/inference/model_list_params.py +2 -4
  95. gcore/types/cloud/{container_probe.py → inference/probe.py} +9 -9
  96. gcore/types/cloud/{container_probe_config.py → inference/probe_config.py} +5 -5
  97. gcore/types/cloud/{container_probe_exec.py → inference/probe_exec.py} +3 -3
  98. gcore/types/cloud/{container_probe_http_get.py → inference/probe_http_get.py} +3 -3
  99. gcore/types/cloud/{container_probe_tcp_socket.py → inference/probe_tcp_socket.py} +3 -3
  100. gcore/types/cloud/inference/secret_create_params.py +10 -4
  101. gcore/types/cloud/inference/secret_replace_params.py +10 -4
  102. gcore/types/cloud/{region_capacity.py → inference_region_capacity.py} +10 -3
  103. gcore/types/cloud/{region_capacity_list.py → inference_region_capacity_list.py} +4 -4
  104. gcore/types/cloud/instance_create_params.py +8 -9
  105. gcore/types/cloud/instance_list_params.py +1 -5
  106. gcore/types/cloud/instances/__init__.py +0 -2
  107. gcore/types/cloud/instances/image_create_from_volume_params.py +2 -4
  108. gcore/types/cloud/instances/image_list_params.py +1 -5
  109. gcore/types/cloud/instances/image_upload_params.py +2 -4
  110. gcore/types/cloud/load_balancer_create_params.py +8 -4
  111. gcore/types/cloud/load_balancer_list_params.py +1 -5
  112. gcore/types/cloud/load_balancer_update_params.py +24 -0
  113. gcore/types/cloud/load_balancers/pool_create_params.py +6 -1
  114. gcore/types/cloud/load_balancers/pool_update_params.py +6 -1
  115. gcore/types/cloud/load_balancers/pools/member_add_params.py +6 -1
  116. gcore/types/cloud/member.py +6 -1
  117. gcore/types/cloud/network_create_params.py +2 -3
  118. gcore/types/cloud/network_list_params.py +4 -5
  119. gcore/types/cloud/network_update_params.py +28 -2
  120. gcore/types/cloud/networks/router_list_params.py +2 -2
  121. gcore/types/cloud/networks/subnet_create_params.py +2 -3
  122. gcore/types/cloud/networks/subnet_list_params.py +1 -5
  123. gcore/types/cloud/networks/subnet_update_params.py +25 -0
  124. gcore/types/cloud/registries/__init__.py +1 -0
  125. gcore/types/cloud/registries/user_refresh_secret_response.py +31 -0
  126. gcore/types/cloud/reserved_fixed_ip_list_params.py +2 -2
  127. gcore/types/cloud/security_group_list_params.py +3 -7
  128. gcore/types/cloud/security_group_update_params.py +25 -0
  129. gcore/types/cloud/tag_update_map_param.py +2 -2
  130. gcore/types/cloud/task_list_params.py +15 -14
  131. gcore/types/cloud/volume_list_params.py +1 -5
  132. gcore/types/cloud/volume_update_params.py +29 -3
  133. gcore/types/fastedge/__init__.py +48 -0
  134. gcore/types/fastedge/app.py +81 -0
  135. gcore/types/fastedge/app_create_params.py +56 -0
  136. gcore/types/fastedge/app_list_params.py +50 -0
  137. gcore/types/fastedge/app_param.py +56 -0
  138. gcore/types/fastedge/app_replace_params.py +17 -0
  139. gcore/types/fastedge/app_short.py +60 -0
  140. gcore/types/fastedge/app_update_params.py +56 -0
  141. gcore/types/fastedge/apps/__init__.py +6 -0
  142. gcore/types/fastedge/apps/log.py +28 -0
  143. gcore/types/fastedge/apps/log_list_params.py +37 -0
  144. gcore/types/fastedge/binary.py +40 -0
  145. gcore/types/fastedge/binary_list_response.py +12 -0
  146. gcore/types/fastedge/binary_short.py +32 -0
  147. gcore/types/fastedge/call_status.py +24 -0
  148. gcore/types/fastedge/client.py +57 -0
  149. gcore/types/fastedge/duration_stats.py +30 -0
  150. gcore/types/fastedge/kv_store.py +33 -0
  151. gcore/types/fastedge/kv_store_create_params.py +23 -0
  152. gcore/types/fastedge/kv_store_get_response.py +10 -0
  153. gcore/types/fastedge/kv_store_list_params.py +12 -0
  154. gcore/types/fastedge/kv_store_list_response.py +15 -0
  155. gcore/types/fastedge/kv_store_replace_params.py +23 -0
  156. gcore/types/fastedge/kv_store_short.py +19 -0
  157. gcore/types/fastedge/kv_store_stats.py +26 -0
  158. gcore/types/fastedge/secret.py +29 -0
  159. gcore/types/fastedge/secret_create_params.py +27 -0
  160. gcore/types/fastedge/secret_create_response.py +12 -0
  161. gcore/types/fastedge/secret_delete_params.py +12 -0
  162. gcore/types/fastedge/secret_list_params.py +15 -0
  163. gcore/types/{cloud → fastedge}/secret_list_response.py +2 -6
  164. gcore/types/fastedge/secret_replace_params.py +27 -0
  165. gcore/types/fastedge/secret_short.py +21 -0
  166. gcore/types/fastedge/secret_update_params.py +27 -0
  167. gcore/types/fastedge/statistic_get_call_series_params.py +28 -0
  168. gcore/types/fastedge/statistic_get_call_series_response.py +12 -0
  169. gcore/types/fastedge/statistic_get_duration_series_params.py +28 -0
  170. gcore/types/fastedge/statistic_get_duration_series_response.py +12 -0
  171. gcore/types/fastedge/template.py +31 -0
  172. gcore/types/fastedge/template_create_params.py +30 -0
  173. gcore/types/fastedge/template_delete_params.py +12 -0
  174. gcore/types/fastedge/template_list_params.py +25 -0
  175. gcore/types/fastedge/template_parameter.py +22 -0
  176. gcore/types/fastedge/template_parameter_param.py +21 -0
  177. gcore/types/fastedge/template_replace_params.py +30 -0
  178. gcore/types/fastedge/template_short.py +27 -0
  179. gcore/types/iam/__init__.py +17 -0
  180. gcore/types/iam/account_overview.py +488 -0
  181. gcore/types/iam/api_token.py +78 -0
  182. gcore/types/iam/api_token_create.py +15 -0
  183. gcore/types/iam/api_token_create_params.py +42 -0
  184. gcore/types/iam/api_token_list.py +81 -0
  185. gcore/types/iam/api_token_list_params.py +41 -0
  186. gcore/types/iam/user.py +86 -0
  187. gcore/types/iam/user_detailed.py +104 -0
  188. gcore/types/iam/user_invite.py +15 -0
  189. gcore/types/iam/user_invite_params.py +37 -0
  190. gcore/types/iam/user_list_params.py +15 -0
  191. gcore/types/iam/user_update.py +104 -0
  192. gcore/types/iam/user_update_params.py +52 -0
  193. gcore/types/waap/__init__.py +0 -1
  194. gcore/types/waap/domains/custom_rule_create_params.py +7 -3
  195. gcore/types/waap/domains/custom_rule_update_params.py +7 -3
  196. gcore/types/waap/waap_custom_rule.py +7 -3
  197. {gcore-0.3.0.dist-info → gcore-0.5.0.dist-info}/METADATA +44 -5
  198. {gcore-0.3.0.dist-info → gcore-0.5.0.dist-info}/RECORD +200 -151
  199. gcore/resources/waap/clients.py +0 -135
  200. gcore/types/cloud/aws_iam_data.py +0 -13
  201. gcore/types/cloud/aws_iam_data_param.py +0 -15
  202. gcore/types/cloud/baremetal/flavor_list_suitable_params.py +0 -22
  203. gcore/types/cloud/capacity.py +0 -13
  204. gcore/types/cloud/container_probe_config_create_param.py +0 -17
  205. gcore/types/cloud/container_probe_create_param.py +0 -38
  206. gcore/types/cloud/container_probe_exec_create_param.py +0 -13
  207. gcore/types/cloud/container_probe_http_get_create_param.py +0 -25
  208. gcore/types/cloud/container_probe_tcp_socket_create_param.py +0 -12
  209. gcore/types/cloud/container_scale.py +0 -25
  210. gcore/types/cloud/container_scale_trigger_rate.py +0 -13
  211. gcore/types/cloud/container_scale_trigger_sqs.py +0 -33
  212. gcore/types/cloud/container_scale_trigger_threshold.py +0 -10
  213. gcore/types/cloud/container_scale_triggers.py +0 -36
  214. gcore/types/cloud/deploy_status.py +0 -13
  215. gcore/types/cloud/inference/container.py +0 -26
  216. gcore/types/cloud/inference/inference.py +0 -95
  217. gcore/types/cloud/inference/mlcatalog_order_by_choices.py +0 -7
  218. gcore/types/cloud/inference_probes.py +0 -19
  219. gcore/types/cloud/ingress_opts_out.py +0 -16
  220. gcore/types/cloud/ingress_opts_param.py +0 -18
  221. gcore/types/cloud/instances/flavor_list_for_resize_params.py +0 -16
  222. gcore/types/cloud/instances/flavor_list_suitable_params.py +0 -59
  223. gcore/types/cloud/secret_create_params.py +0 -66
  224. gcore/types/waap/client_me_response.py +0 -34
  225. {gcore-0.3.0.dist-info → gcore-0.5.0.dist-info}/WHEEL +0 -0
  226. {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 1 minute
9
- DEFAULT_TIMEOUT = httpx.Timeout(timeout=60, connect=5.0)
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 is_annotated_type(type_):
442
- meta: tuple[Any, ...] = get_args(type_)[1:]
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
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "gcore"
4
- __version__ = "0.3.0" # x-release-please-version
4
+ __version__ = "0.5.0" # x-release-please-version
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__ = ["SyncOffsetPage", "AsyncOffsetPage"]
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
@@ -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
  ]