From 8915d9b82e1f7f529f8aa930b047ce1bb3b32e08 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Wed, 22 Apr 2026 13:55:20 +0000
Subject: [PATCH 1/7] chore(internal): more robust bootstrap script
---
scripts/bootstrap | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/bootstrap b/scripts/bootstrap
index b430fee36..fe8451e4f 100755
--- a/scripts/bootstrap
+++ b/scripts/bootstrap
@@ -4,7 +4,7 @@ set -e
cd "$(dirname "$0")/.."
-if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ] && [ -t 0 ]; then
+if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "${SKIP_BREW:-}" != "1" ] && [ -t 0 ]; then
brew bundle check >/dev/null 2>&1 || {
echo -n "==> Install Homebrew dependencies? (y/N): "
read -r response
From 9900f97b05e97b4f42c7d3a041f32e5a628f0614 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 23 Apr 2026 08:47:44 +0000
Subject: [PATCH 2/7] feat(api): aggregated API specs update
---
.stats.yml | 4 +-
src/gcore/resources/cloud/api.md | 5 +-
.../databases/postgres/clusters/clusters.py | 60 +++++++++++++++++++
.../postgres/clusters/user_credentials.py | 32 ++++++++++
.../databases/postgres/configurations.py | 8 +++
.../postgres/custom_configurations.py | 20 +++++--
.../cloud/load_balancers/pools/pools.py | 8 +++
src/gcore/resources/storage/api.md | 4 +-
.../storage/object_storages/buckets.py | 9 ++-
.../cloud/databases/postgres/__init__.py | 4 +-
.../postgres/cluster_create_params.py | 2 +
.../databases/postgres/cluster_list_params.py | 5 ++
.../postgres/cluster_update_params.py | 2 +
.../custom_configuration_validate_params.py | 2 +
...custom_configuration_validate_response.py} | 4 +-
.../cloud/load_balancers/pool_list_params.py | 3 +
.../types/storage/object_storages/__init__.py | 1 -
.../storage/object_storages/bucket_created.py | 51 ----------------
src/gcore/types/storage/s3_storage.py | 9 ++-
src/gcore/types/storage/s3_storage_created.py | 9 ++-
src/gcore/types/storage/sftp_storage.py | 10 +++-
.../cloud/databases/postgres/test_clusters.py | 2 +
.../postgres/test_custom_configurations.py | 16 ++---
.../cloud/load_balancers/test_pools.py | 2 +
.../storage/object_storages/test_buckets.py | 17 +++---
25 files changed, 197 insertions(+), 92 deletions(-)
rename src/gcore/types/cloud/databases/postgres/{pg_conf_validation.py => custom_configuration_validate_response.py} (70%)
delete mode 100644 src/gcore/types/storage/object_storages/bucket_created.py
diff --git a/.stats.yml b/.stats.yml
index 157020e88..1cdf983f3 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 657
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-ba1eb162beed31f03386720005830bdaad3be08b9e08a07b2f10a2dd124648b8.yml
-openapi_spec_hash: 416a4779f456d266b805fef5a54cfbc7
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-4ee8152b36b93280da61c72110967bf24fedecc8d6df738d5f06a1a741a1e483.yml
+openapi_spec_hash: 95ad145b1c39dee152a45d7cdfd3fc65
config_hash: d2defa3f4caff86ec6f4b8890f74b295
diff --git a/src/gcore/resources/cloud/api.md b/src/gcore/resources/cloud/api.md
index bfdb6c927..2f1e734b0 100644
--- a/src/gcore/resources/cloud/api.md
+++ b/src/gcore/resources/cloud/api.md
@@ -508,7 +508,6 @@ Types:
```python
from gcore.types.cloud.inference import (
InferenceDeployment,
- InferenceDeploymentAPIKey,
Probe,
ProbeConfig,
ProbeExec,
@@ -1191,12 +1190,12 @@ Methods:
Types:
```python
-from gcore.types.cloud.databases.postgres import PgConfValidation
+from gcore.types.cloud.databases.postgres import CustomConfigurationValidateResponse
```
Methods:
-- client.cloud.databases.postgres.custom_configurations.validate(\*, project_id, region_id, \*\*params) -> PgConfValidation
+- client.cloud.databases.postgres.custom_configurations.validate(\*, project_id, region_id, \*\*params) -> CustomConfigurationValidateResponse
## VolumeSnapshots
diff --git a/src/gcore/resources/cloud/databases/postgres/clusters/clusters.py b/src/gcore/resources/cloud/databases/postgres/clusters/clusters.py
index d4a91cca7..fc39f3035 100644
--- a/src/gcore/resources/cloud/databases/postgres/clusters/clusters.py
+++ b/src/gcore/resources/cloud/databases/postgres/clusters/clusters.py
@@ -82,6 +82,10 @@ def create(
Create a new PostgreSQL cluster with the specified configuration.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
cluster_name: PostgreSQL cluster name
flavor: Instance RAM and CPU
@@ -151,6 +155,12 @@ def update(
Update the configuration of an existing PostgreSQL cluster.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
+ cluster_name: Cluster name
+
flavor: New instance RAM and CPU
high_availability: New High Availability settings
@@ -204,6 +214,7 @@ def list(
project_id: int | None = None,
region_id: int | None = None,
limit: int | Omit = omit,
+ name: str | Omit = omit,
offset: int | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -218,8 +229,14 @@ def list(
filtered by search query and paginated.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
limit: Maximum number of clusters to return
+ name: Filter clusters by name
+
offset: Number of clusters to skip
extra_headers: Send extra headers
@@ -247,6 +264,7 @@ def list(
query=maybe_transform(
{
"limit": limit,
+ "name": name,
"offset": offset,
},
cluster_list_params.ClusterListParams,
@@ -272,6 +290,12 @@ def delete(
Delete a PostgreSQL cluster and all its associated resources.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
+ cluster_name: Cluster name
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -316,6 +340,12 @@ def get(
Get detailed information about a specific PostgreSQL cluster.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
+ cluster_name: Cluster name
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -392,6 +422,10 @@ async def create(
Create a new PostgreSQL cluster with the specified configuration.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
cluster_name: PostgreSQL cluster name
flavor: Instance RAM and CPU
@@ -461,6 +495,12 @@ async def update(
Update the configuration of an existing PostgreSQL cluster.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
+ cluster_name: Cluster name
+
flavor: New instance RAM and CPU
high_availability: New High Availability settings
@@ -514,6 +554,7 @@ def list(
project_id: int | None = None,
region_id: int | None = None,
limit: int | Omit = omit,
+ name: str | Omit = omit,
offset: int | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -528,8 +569,14 @@ def list(
filtered by search query and paginated.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
limit: Maximum number of clusters to return
+ name: Filter clusters by name
+
offset: Number of clusters to skip
extra_headers: Send extra headers
@@ -557,6 +604,7 @@ def list(
query=maybe_transform(
{
"limit": limit,
+ "name": name,
"offset": offset,
},
cluster_list_params.ClusterListParams,
@@ -582,6 +630,12 @@ async def delete(
Delete a PostgreSQL cluster and all its associated resources.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
+ cluster_name: Cluster name
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -626,6 +680,12 @@ async def get(
Get detailed information about a specific PostgreSQL cluster.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
+ cluster_name: Cluster name
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
diff --git a/src/gcore/resources/cloud/databases/postgres/clusters/user_credentials.py b/src/gcore/resources/cloud/databases/postgres/clusters/user_credentials.py
index b9792dc80..3f5620b5d 100644
--- a/src/gcore/resources/cloud/databases/postgres/clusters/user_credentials.py
+++ b/src/gcore/resources/cloud/databases/postgres/clusters/user_credentials.py
@@ -60,6 +60,14 @@ def get(
can only be used once per user.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
+ cluster_name: Cluster name
+
+ username: Username
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -108,6 +116,14 @@ def regenerate(
Generate new credentials for a specific user in a PostgreSQL cluster.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
+ cluster_name: Cluster name
+
+ username: Username
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -179,6 +195,14 @@ async def get(
can only be used once per user.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
+ cluster_name: Cluster name
+
+ username: Username
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -227,6 +251,14 @@ async def regenerate(
Generate new credentials for a specific user in a PostgreSQL cluster.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
+ cluster_name: Cluster name
+
+ username: Username
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
diff --git a/src/gcore/resources/cloud/databases/postgres/configurations.py b/src/gcore/resources/cloud/databases/postgres/configurations.py
index 6905b471c..3aca941ce 100644
--- a/src/gcore/resources/cloud/databases/postgres/configurations.py
+++ b/src/gcore/resources/cloud/databases/postgres/configurations.py
@@ -56,6 +56,10 @@ def get(
Get all available PostgreSQL configurations for the specified region.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -117,6 +121,10 @@ async def get(
Get all available PostgreSQL configurations for the specified region.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
diff --git a/src/gcore/resources/cloud/databases/postgres/custom_configurations.py b/src/gcore/resources/cloud/databases/postgres/custom_configurations.py
index d55243cbb..c4701fe80 100644
--- a/src/gcore/resources/cloud/databases/postgres/custom_configurations.py
+++ b/src/gcore/resources/cloud/databases/postgres/custom_configurations.py
@@ -16,7 +16,9 @@
)
from ....._base_client import make_request_options
from .....types.cloud.databases.postgres import custom_configuration_validate_params
-from .....types.cloud.databases.postgres.pg_conf_validation import PgConfValidation
+from .....types.cloud.databases.postgres.custom_configuration_validate_response import (
+ CustomConfigurationValidateResponse,
+)
__all__ = ["CustomConfigurationsResource", "AsyncCustomConfigurationsResource"]
@@ -54,11 +56,15 @@ def validate(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> PgConfValidation:
+ ) -> CustomConfigurationValidateResponse:
"""
Validate a custom PostgreSQL configuration file.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
pg_conf: PostgreSQL configuration
version: PostgreSQL version
@@ -91,7 +97,7 @@ def validate(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=PgConfValidation,
+ cast_to=CustomConfigurationValidateResponse,
)
@@ -128,11 +134,15 @@ async def validate(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> PgConfValidation:
+ ) -> CustomConfigurationValidateResponse:
"""
Validate a custom PostgreSQL configuration file.
Args:
+ project_id: Project ID
+
+ region_id: Region ID
+
pg_conf: PostgreSQL configuration
version: PostgreSQL version
@@ -165,7 +175,7 @@ async def validate(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=PgConfValidation,
+ cast_to=CustomConfigurationValidateResponse,
)
diff --git a/src/gcore/resources/cloud/load_balancers/pools/pools.py b/src/gcore/resources/cloud/load_balancers/pools/pools.py
index 330079daf..b9b7c824d 100644
--- a/src/gcore/resources/cloud/load_balancers/pools/pools.py
+++ b/src/gcore/resources/cloud/load_balancers/pools/pools.py
@@ -318,6 +318,7 @@ def list(
limit: int | Omit = omit,
listener_id: str | Omit = omit,
load_balancer_id: str | Omit = omit,
+ name: str | Omit = omit,
offset: int | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -342,6 +343,8 @@ def list(
load_balancer_id: Load Balancer ID
+ name: Filter by name
+
offset: Optional. Offset value is used to exclude the first set of records from the
result
@@ -370,6 +373,7 @@ def list(
"limit": limit,
"listener_id": listener_id,
"load_balancer_id": load_balancer_id,
+ "name": name,
"offset": offset,
},
pool_list_params.PoolListParams,
@@ -924,6 +928,7 @@ async def list(
limit: int | Omit = omit,
listener_id: str | Omit = omit,
load_balancer_id: str | Omit = omit,
+ name: str | Omit = omit,
offset: int | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
@@ -948,6 +953,8 @@ async def list(
load_balancer_id: Load Balancer ID
+ name: Filter by name
+
offset: Optional. Offset value is used to exclude the first set of records from the
result
@@ -976,6 +983,7 @@ async def list(
"limit": limit,
"listener_id": listener_id,
"load_balancer_id": load_balancer_id,
+ "name": name,
"offset": offset,
},
pool_list_params.PoolListParams,
diff --git a/src/gcore/resources/storage/api.md b/src/gcore/resources/storage/api.md
index 29087ffb4..7d0df0d85 100644
--- a/src/gcore/resources/storage/api.md
+++ b/src/gcore/resources/storage/api.md
@@ -47,12 +47,12 @@ Methods:
Types:
```python
-from gcore.types.storage.object_storages import Bucket, BucketCreated
+from gcore.types.storage.object_storages import Bucket
```
Methods:
-- client.storage.object_storages.buckets.create(storage_id, \*\*params) -> BucketCreated
+- client.storage.object_storages.buckets.create(storage_id, \*\*params) -> Bucket
- client.storage.object_storages.buckets.update(bucket_name, \*, storage_id, \*\*params) -> Bucket
- client.storage.object_storages.buckets.list(storage_id, \*\*params) -> SyncOffsetPage[Bucket]
- client.storage.object_storages.buckets.delete(bucket_name, \*, storage_id) -> None
diff --git a/src/gcore/resources/storage/object_storages/buckets.py b/src/gcore/resources/storage/object_storages/buckets.py
index c647cbc9c..f29a71c35 100644
--- a/src/gcore/resources/storage/object_storages/buckets.py
+++ b/src/gcore/resources/storage/object_storages/buckets.py
@@ -18,7 +18,6 @@
from ...._base_client import AsyncPaginator, make_request_options
from ....types.storage.object_storages import bucket_list_params, bucket_create_params, bucket_update_params
from ....types.storage.object_storages.bucket import Bucket
-from ....types.storage.object_storages.bucket_created import BucketCreated
__all__ = ["BucketsResource", "AsyncBucketsResource"]
@@ -54,7 +53,7 @@ def create(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> BucketCreated:
+ ) -> Bucket:
"""
Creates a new bucket within an S3-compatible storage.
@@ -75,7 +74,7 @@ def create(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=BucketCreated,
+ cast_to=Bucket,
)
def update(
@@ -296,7 +295,7 @@ async def create(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> BucketCreated:
+ ) -> Bucket:
"""
Creates a new bucket within an S3-compatible storage.
@@ -317,7 +316,7 @@ async def create(
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=BucketCreated,
+ cast_to=Bucket,
)
async def update(
diff --git a/src/gcore/types/cloud/databases/postgres/__init__.py b/src/gcore/types/cloud/databases/postgres/__init__.py
index e4449e2be..d33446a05 100644
--- a/src/gcore/types/cloud/databases/postgres/__init__.py
+++ b/src/gcore/types/cloud/databases/postgres/__init__.py
@@ -3,10 +3,12 @@
from __future__ import annotations
from .postgres_cluster import PostgresCluster as PostgresCluster
-from .pg_conf_validation import PgConfValidation as PgConfValidation
from .cluster_list_params import ClusterListParams as ClusterListParams
from .cluster_create_params import ClusterCreateParams as ClusterCreateParams
from .cluster_update_params import ClusterUpdateParams as ClusterUpdateParams
from .postgres_cluster_short import PostgresClusterShort as PostgresClusterShort
from .postgres_configuration import PostgresConfiguration as PostgresConfiguration
from .custom_configuration_validate_params import CustomConfigurationValidateParams as CustomConfigurationValidateParams
+from .custom_configuration_validate_response import (
+ CustomConfigurationValidateResponse as CustomConfigurationValidateResponse,
+)
diff --git a/src/gcore/types/cloud/databases/postgres/cluster_create_params.py b/src/gcore/types/cloud/databases/postgres/cluster_create_params.py
index f5a9e1050..acc7dd9ab 100644
--- a/src/gcore/types/cloud/databases/postgres/cluster_create_params.py
+++ b/src/gcore/types/cloud/databases/postgres/cluster_create_params.py
@@ -22,8 +22,10 @@
class ClusterCreateParams(TypedDict, total=False):
project_id: int
+ """Project ID"""
region_id: int
+ """Region ID"""
cluster_name: Required[str]
"""PostgreSQL cluster name"""
diff --git a/src/gcore/types/cloud/databases/postgres/cluster_list_params.py b/src/gcore/types/cloud/databases/postgres/cluster_list_params.py
index 301f22e49..55b3dc985 100644
--- a/src/gcore/types/cloud/databases/postgres/cluster_list_params.py
+++ b/src/gcore/types/cloud/databases/postgres/cluster_list_params.py
@@ -9,11 +9,16 @@
class ClusterListParams(TypedDict, total=False):
project_id: int
+ """Project ID"""
region_id: int
+ """Region ID"""
limit: int
"""Maximum number of clusters to return"""
+ name: str
+ """Filter clusters by name"""
+
offset: int
"""Number of clusters to skip"""
diff --git a/src/gcore/types/cloud/databases/postgres/cluster_update_params.py b/src/gcore/types/cloud/databases/postgres/cluster_update_params.py
index 9ae130ff9..521cca57d 100644
--- a/src/gcore/types/cloud/databases/postgres/cluster_update_params.py
+++ b/src/gcore/types/cloud/databases/postgres/cluster_update_params.py
@@ -22,8 +22,10 @@
class ClusterUpdateParams(TypedDict, total=False):
project_id: int
+ """Project ID"""
region_id: int
+ """Region ID"""
databases: Iterable[Database]
diff --git a/src/gcore/types/cloud/databases/postgres/custom_configuration_validate_params.py b/src/gcore/types/cloud/databases/postgres/custom_configuration_validate_params.py
index 2cd791ae1..a90c0dbda 100644
--- a/src/gcore/types/cloud/databases/postgres/custom_configuration_validate_params.py
+++ b/src/gcore/types/cloud/databases/postgres/custom_configuration_validate_params.py
@@ -9,8 +9,10 @@
class CustomConfigurationValidateParams(TypedDict, total=False):
project_id: int
+ """Project ID"""
region_id: int
+ """Region ID"""
pg_conf: Required[str]
"""PostgreSQL configuration"""
diff --git a/src/gcore/types/cloud/databases/postgres/pg_conf_validation.py b/src/gcore/types/cloud/databases/postgres/custom_configuration_validate_response.py
similarity index 70%
rename from src/gcore/types/cloud/databases/postgres/pg_conf_validation.py
rename to src/gcore/types/cloud/databases/postgres/custom_configuration_validate_response.py
index 8e4ae2322..995a4a141 100644
--- a/src/gcore/types/cloud/databases/postgres/pg_conf_validation.py
+++ b/src/gcore/types/cloud/databases/postgres/custom_configuration_validate_response.py
@@ -4,10 +4,10 @@
from ....._models import BaseModel
-__all__ = ["PgConfValidation"]
+__all__ = ["CustomConfigurationValidateResponse"]
-class PgConfValidation(BaseModel):
+class CustomConfigurationValidateResponse(BaseModel):
errors: List[str]
"""Errors list"""
diff --git a/src/gcore/types/cloud/load_balancers/pool_list_params.py b/src/gcore/types/cloud/load_balancers/pool_list_params.py
index fe83828f1..b8750a56a 100644
--- a/src/gcore/types/cloud/load_balancers/pool_list_params.py
+++ b/src/gcore/types/cloud/load_balancers/pool_list_params.py
@@ -26,6 +26,9 @@ class PoolListParams(TypedDict, total=False):
load_balancer_id: str
"""Load Balancer ID"""
+ name: str
+ """Filter by name"""
+
offset: int
"""Optional.
diff --git a/src/gcore/types/storage/object_storages/__init__.py b/src/gcore/types/storage/object_storages/__init__.py
index 5ea385edf..5bce0f48d 100644
--- a/src/gcore/types/storage/object_storages/__init__.py
+++ b/src/gcore/types/storage/object_storages/__init__.py
@@ -4,7 +4,6 @@
from .bucket import Bucket as Bucket
from .access_key import AccessKey as AccessKey
-from .bucket_created import BucketCreated as BucketCreated
from .access_key_created import AccessKeyCreated as AccessKeyCreated
from .bucket_list_params import BucketListParams as BucketListParams
from .bucket_create_params import BucketCreateParams as BucketCreateParams
diff --git a/src/gcore/types/storage/object_storages/bucket_created.py b/src/gcore/types/storage/object_storages/bucket_created.py
deleted file mode 100644
index f5d7fb064..000000000
--- a/src/gcore/types/storage/object_storages/bucket_created.py
+++ /dev/null
@@ -1,51 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from typing import List
-
-from ...._models import BaseModel
-
-__all__ = ["BucketCreated", "Cors", "Lifecycle", "Policy"]
-
-
-class Cors(BaseModel):
- allowed_origins: List[str]
- """
- Web domains allowed to make direct browser requests to this bucket (e.g.,
- "https://myapp.com"). Use "\\**" to allow any origin.
- """
-
-
-class Lifecycle(BaseModel):
- expiration_days: int
- """Days after upload before objects are automatically deleted.
-
- For example, 30 means files are removed 30 days after creation.
- """
-
-
-class Policy(BaseModel):
- is_public: bool
- """When true, anyone can download objects without credentials.
-
- When false, all requests require valid S3 authentication.
- """
-
-
-class BucketCreated(BaseModel):
- cors: Cors
-
- lifecycle: Lifecycle
-
- name: str
- """Globally unique bucket name within the storage.
-
- Used as the path prefix when accessing objects via S3 API.
- """
-
- policy: Policy
-
- storage_id: int
- """Parent storage this bucket belongs to.
-
- Use this ID in the URL path for bucket operations.
- """
diff --git a/src/gcore/types/storage/s3_storage.py b/src/gcore/types/storage/s3_storage.py
index b0b3e0b7a..cba2d7b1c 100644
--- a/src/gcore/types/storage/s3_storage.py
+++ b/src/gcore/types/storage/s3_storage.py
@@ -18,11 +18,18 @@ class S3Storage(BaseModel):
created_at: datetime
"""ISO 8601 timestamp when the storage was created"""
+ full_name: str
+ """
+ Read-only internal full name of the storage, composed as "{`client_id`}-{name}".
+ Used internally by the backend. Clients should continue to identify the storage
+ by `name`.
+ """
+
location_name: str
"""Geographic location code where the storage is provisioned"""
name: str
- """User-defined name for the storage instance"""
+ """User-defined name for the storage instance, as supplied at creation time."""
provisioning_status: Literal["creating", "active", "updating", "deleting", "deleted"]
"""Lifecycle status of the storage. Use this to check readiness before operations."""
diff --git a/src/gcore/types/storage/s3_storage_created.py b/src/gcore/types/storage/s3_storage_created.py
index fab9e2ce9..a9b13739f 100644
--- a/src/gcore/types/storage/s3_storage_created.py
+++ b/src/gcore/types/storage/s3_storage_created.py
@@ -36,11 +36,18 @@ class S3StorageCreated(BaseModel):
created_at: datetime
"""ISO 8601 timestamp when the storage was created"""
+ full_name: str
+ """
+ Read-only internal full name of the storage, composed as "{`client_id`}-{name}".
+ Used internally by the backend. Clients should continue to identify the storage
+ by `name`.
+ """
+
location_name: str
"""Geographic location code where the storage is provisioned"""
name: str
- """User-defined name for the storage instance"""
+ """User-defined name for the storage instance, as supplied at creation time."""
provisioning_status: Literal["creating", "active", "updating", "deleting", "deleted"]
"""Lifecycle status of the storage. Use this to check readiness before operations."""
diff --git a/src/gcore/types/storage/sftp_storage.py b/src/gcore/types/storage/sftp_storage.py
index 3e37778c4..69c2f6a50 100644
--- a/src/gcore/types/storage/sftp_storage.py
+++ b/src/gcore/types/storage/sftp_storage.py
@@ -22,6 +22,14 @@ class SftpStorage(BaseModel):
expires: str
"""Duration when the storage will expire. Null if no expiration is set."""
+ full_name: str
+ """
+ Read-only internal full name of the storage, composed as "{`client_id`}-{name}".
+ Used by the SFTP backend as the login username. Clients should use this value
+ when connecting but should continue to identify the storage by `name` in their
+ own configuration.
+ """
+
has_custom_config_file: bool
"""Whether this storage uses a custom configuration file"""
@@ -35,7 +43,7 @@ class SftpStorage(BaseModel):
"""Geographic location code where the storage is provisioned"""
name: str
- """User-defined name for the storage instance"""
+ """User-defined name for the storage instance, as supplied at creation time."""
provisioning_status: Literal["creating", "active", "updating", "deleting", "deleted"]
"""Lifecycle status of the storage. Use this to check readiness before operations."""
diff --git a/tests/api_resources/cloud/databases/postgres/test_clusters.py b/tests/api_resources/cloud/databases/postgres/test_clusters.py
index 224aa6139..5dec55d32 100644
--- a/tests/api_resources/cloud/databases/postgres/test_clusters.py
+++ b/tests/api_resources/cloud/databases/postgres/test_clusters.py
@@ -251,6 +251,7 @@ def test_method_list_with_all_params(self, client: Gcore) -> None:
project_id=0,
region_id=0,
limit=0,
+ name="name",
offset=0,
)
assert_matches_type(SyncOffsetPage[PostgresClusterShort], cluster, path=["response"])
@@ -608,6 +609,7 @@ async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> No
project_id=0,
region_id=0,
limit=0,
+ name="name",
offset=0,
)
assert_matches_type(AsyncOffsetPage[PostgresClusterShort], cluster, path=["response"])
diff --git a/tests/api_resources/cloud/databases/postgres/test_custom_configurations.py b/tests/api_resources/cloud/databases/postgres/test_custom_configurations.py
index 1f6935d3b..129a97816 100644
--- a/tests/api_resources/cloud/databases/postgres/test_custom_configurations.py
+++ b/tests/api_resources/cloud/databases/postgres/test_custom_configurations.py
@@ -9,7 +9,9 @@
from gcore import Gcore, AsyncGcore
from tests.utils import assert_matches_type
-from gcore.types.cloud.databases.postgres import PgConfValidation
+from gcore.types.cloud.databases.postgres import (
+ CustomConfigurationValidateResponse,
+)
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
@@ -25,7 +27,7 @@ def test_method_validate(self, client: Gcore) -> None:
pg_conf="\nlisten_addresses = 'localhost'\nport = 5432\nmax_connections = 100\nshared_buffers = 128MB\nlogging_collector = on",
version="15",
)
- assert_matches_type(PgConfValidation, custom_configuration, path=["response"])
+ assert_matches_type(CustomConfigurationValidateResponse, custom_configuration, path=["response"])
@parametrize
def test_raw_response_validate(self, client: Gcore) -> None:
@@ -39,7 +41,7 @@ def test_raw_response_validate(self, client: Gcore) -> None:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
custom_configuration = response.parse()
- assert_matches_type(PgConfValidation, custom_configuration, path=["response"])
+ assert_matches_type(CustomConfigurationValidateResponse, custom_configuration, path=["response"])
@parametrize
def test_streaming_response_validate(self, client: Gcore) -> None:
@@ -53,7 +55,7 @@ def test_streaming_response_validate(self, client: Gcore) -> None:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
custom_configuration = response.parse()
- assert_matches_type(PgConfValidation, custom_configuration, path=["response"])
+ assert_matches_type(CustomConfigurationValidateResponse, custom_configuration, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -71,7 +73,7 @@ async def test_method_validate(self, async_client: AsyncGcore) -> None:
pg_conf="\nlisten_addresses = 'localhost'\nport = 5432\nmax_connections = 100\nshared_buffers = 128MB\nlogging_collector = on",
version="15",
)
- assert_matches_type(PgConfValidation, custom_configuration, path=["response"])
+ assert_matches_type(CustomConfigurationValidateResponse, custom_configuration, path=["response"])
@parametrize
async def test_raw_response_validate(self, async_client: AsyncGcore) -> None:
@@ -85,7 +87,7 @@ async def test_raw_response_validate(self, async_client: AsyncGcore) -> None:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
custom_configuration = await response.parse()
- assert_matches_type(PgConfValidation, custom_configuration, path=["response"])
+ assert_matches_type(CustomConfigurationValidateResponse, custom_configuration, path=["response"])
@parametrize
async def test_streaming_response_validate(self, async_client: AsyncGcore) -> None:
@@ -99,6 +101,6 @@ async def test_streaming_response_validate(self, async_client: AsyncGcore) -> No
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
custom_configuration = await response.parse()
- assert_matches_type(PgConfValidation, custom_configuration, path=["response"])
+ assert_matches_type(CustomConfigurationValidateResponse, custom_configuration, path=["response"])
assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/cloud/load_balancers/test_pools.py b/tests/api_resources/cloud/load_balancers/test_pools.py
index 6a1819999..98272d03d 100644
--- a/tests/api_resources/cloud/load_balancers/test_pools.py
+++ b/tests/api_resources/cloud/load_balancers/test_pools.py
@@ -236,6 +236,7 @@ def test_method_list_with_all_params(self, client: Gcore) -> None:
limit=1000,
listener_id="00000000-0000-4000-8000-000000000000",
load_balancer_id="00000000-0000-4000-8000-000000000000",
+ name="lb-pool-name",
offset=0,
)
assert_matches_type(LoadBalancerPoolList, pool, path=["response"])
@@ -583,6 +584,7 @@ async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> No
limit=1000,
listener_id="00000000-0000-4000-8000-000000000000",
load_balancer_id="00000000-0000-4000-8000-000000000000",
+ name="lb-pool-name",
offset=0,
)
assert_matches_type(LoadBalancerPoolList, pool, path=["response"])
diff --git a/tests/api_resources/storage/object_storages/test_buckets.py b/tests/api_resources/storage/object_storages/test_buckets.py
index ce667ec48..5bae6c0e5 100644
--- a/tests/api_resources/storage/object_storages/test_buckets.py
+++ b/tests/api_resources/storage/object_storages/test_buckets.py
@@ -10,10 +10,7 @@
from gcore import Gcore, AsyncGcore
from tests.utils import assert_matches_type
from gcore.pagination import SyncOffsetPage, AsyncOffsetPage
-from gcore.types.storage.object_storages import (
- Bucket,
- BucketCreated,
-)
+from gcore.types.storage.object_storages import Bucket
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
@@ -27,7 +24,7 @@ def test_method_create(self, client: Gcore) -> None:
storage_id=0,
name="my-new-bucket",
)
- assert_matches_type(BucketCreated, bucket, path=["response"])
+ assert_matches_type(Bucket, bucket, path=["response"])
@parametrize
def test_raw_response_create(self, client: Gcore) -> None:
@@ -39,7 +36,7 @@ def test_raw_response_create(self, client: Gcore) -> None:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
bucket = response.parse()
- assert_matches_type(BucketCreated, bucket, path=["response"])
+ assert_matches_type(Bucket, bucket, path=["response"])
@parametrize
def test_streaming_response_create(self, client: Gcore) -> None:
@@ -51,7 +48,7 @@ def test_streaming_response_create(self, client: Gcore) -> None:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
bucket = response.parse()
- assert_matches_type(BucketCreated, bucket, path=["response"])
+ assert_matches_type(Bucket, bucket, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -244,7 +241,7 @@ async def test_method_create(self, async_client: AsyncGcore) -> None:
storage_id=0,
name="my-new-bucket",
)
- assert_matches_type(BucketCreated, bucket, path=["response"])
+ assert_matches_type(Bucket, bucket, path=["response"])
@parametrize
async def test_raw_response_create(self, async_client: AsyncGcore) -> None:
@@ -256,7 +253,7 @@ async def test_raw_response_create(self, async_client: AsyncGcore) -> None:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
bucket = await response.parse()
- assert_matches_type(BucketCreated, bucket, path=["response"])
+ assert_matches_type(Bucket, bucket, path=["response"])
@parametrize
async def test_streaming_response_create(self, async_client: AsyncGcore) -> None:
@@ -268,7 +265,7 @@ async def test_streaming_response_create(self, async_client: AsyncGcore) -> None
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
bucket = await response.parse()
- assert_matches_type(BucketCreated, bucket, path=["response"])
+ assert_matches_type(Bucket, bucket, path=["response"])
assert cast(Any, response.is_closed) is True
From b4a70d5fb797121f21daaa7da9026daae9173360 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 23 Apr 2026 13:34:31 +0000
Subject: [PATCH 3/7] feat(storage): support TF for ssh keys
---
.stats.yml | 2 +-
src/gcore/resources/storage/ssh_keys.py | 8 ++++++++
src/gcore/resources/storage/storage.py | 18 ++++++++++++++++++
3 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/.stats.yml b/.stats.yml
index 1cdf983f3..e639653da 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 657
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-4ee8152b36b93280da61c72110967bf24fedecc8d6df738d5f06a1a741a1e483.yml
openapi_spec_hash: 95ad145b1c39dee152a45d7cdfd3fc65
-config_hash: d2defa3f4caff86ec6f4b8890f74b295
+config_hash: aa5a9dd05b6324fcb454d0694e5901a3
diff --git a/src/gcore/resources/storage/ssh_keys.py b/src/gcore/resources/storage/ssh_keys.py
index 63d01cf72..7564eb1ff 100644
--- a/src/gcore/resources/storage/ssh_keys.py
+++ b/src/gcore/resources/storage/ssh_keys.py
@@ -23,6 +23,10 @@
class SSHKeysResource(SyncAPIResource):
+ """
+ SSH keys enable secure access to SFTP storage by associating public keys with user accounts for authentication.
+ """
+
@cached_property
def with_raw_response(self) -> SSHKeysResourceWithRawResponse:
"""
@@ -207,6 +211,10 @@ def get(
class AsyncSSHKeysResource(AsyncAPIResource):
+ """
+ SSH keys enable secure access to SFTP storage by associating public keys with user accounts for authentication.
+ """
+
@cached_property
def with_raw_response(self) -> AsyncSSHKeysResourceWithRawResponse:
"""
diff --git a/src/gcore/resources/storage/storage.py b/src/gcore/resources/storage/storage.py
index b81116c08..dd2c6cf29 100644
--- a/src/gcore/resources/storage/storage.py
+++ b/src/gcore/resources/storage/storage.py
@@ -64,6 +64,9 @@ def sftp_storages(self) -> SftpStoragesResource:
@cached_property
def ssh_keys(self) -> SSHKeysResource:
+ """
+ SSH keys enable secure access to SFTP storage by associating public keys with user accounts for authentication.
+ """
return SSHKeysResource(self._client)
@cached_property
@@ -106,6 +109,9 @@ def sftp_storages(self) -> AsyncSftpStoragesResource:
@cached_property
def ssh_keys(self) -> AsyncSSHKeysResource:
+ """
+ SSH keys enable secure access to SFTP storage by associating public keys with user accounts for authentication.
+ """
return AsyncSSHKeysResource(self._client)
@cached_property
@@ -151,6 +157,9 @@ def sftp_storages(self) -> SftpStoragesResourceWithRawResponse:
@cached_property
def ssh_keys(self) -> SSHKeysResourceWithRawResponse:
+ """
+ SSH keys enable secure access to SFTP storage by associating public keys with user accounts for authentication.
+ """
return SSHKeysResourceWithRawResponse(self._storage.ssh_keys)
@cached_property
@@ -177,6 +186,9 @@ def sftp_storages(self) -> AsyncSftpStoragesResourceWithRawResponse:
@cached_property
def ssh_keys(self) -> AsyncSSHKeysResourceWithRawResponse:
+ """
+ SSH keys enable secure access to SFTP storage by associating public keys with user accounts for authentication.
+ """
return AsyncSSHKeysResourceWithRawResponse(self._storage.ssh_keys)
@cached_property
@@ -203,6 +215,9 @@ def sftp_storages(self) -> SftpStoragesResourceWithStreamingResponse:
@cached_property
def ssh_keys(self) -> SSHKeysResourceWithStreamingResponse:
+ """
+ SSH keys enable secure access to SFTP storage by associating public keys with user accounts for authentication.
+ """
return SSHKeysResourceWithStreamingResponse(self._storage.ssh_keys)
@cached_property
@@ -229,6 +244,9 @@ def sftp_storages(self) -> AsyncSftpStoragesResourceWithStreamingResponse:
@cached_property
def ssh_keys(self) -> AsyncSSHKeysResourceWithStreamingResponse:
+ """
+ SSH keys enable secure access to SFTP storage by associating public keys with user accounts for authentication.
+ """
return AsyncSSHKeysResourceWithStreamingResponse(self._storage.ssh_keys)
@cached_property
From 66aedc4255462951637dd61b8c27fc758c0eeabf Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 23 Apr 2026 14:55:40 +0000
Subject: [PATCH 4/7] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index e639653da..eb881ba34 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 657
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-4ee8152b36b93280da61c72110967bf24fedecc8d6df738d5f06a1a741a1e483.yml
-openapi_spec_hash: 95ad145b1c39dee152a45d7cdfd3fc65
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d7bc6f6b1d020fb7c24b6f53d9437256eee2203d0aa46c7337f620c9630285f8.yml
+openapi_spec_hash: 7922ec4e12c6c73c57cb98dbfee69234
config_hash: aa5a9dd05b6324fcb454d0694e5901a3
From 5b07224ecfcad18c39a2ae1c45fddb2b4ea811f6 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 27 Apr 2026 05:15:01 +0000
Subject: [PATCH 5/7] feat(api): aggregated API specs update
---
.stats.yml | 4 +--
src/gcore/resources/iam/users.py | 20 ++++++-------
src/gcore/types/iam/user_update_params.py | 12 ++++----
tests/api_resources/iam/test_users.py | 34 ++++++++++-------------
4 files changed, 32 insertions(+), 38 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index eb881ba34..533a18c3d 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 657
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-d7bc6f6b1d020fb7c24b6f53d9437256eee2203d0aa46c7337f620c9630285f8.yml
-openapi_spec_hash: 7922ec4e12c6c73c57cb98dbfee69234
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-236958943262c124215347d9b33e2de06e1e38e4b89797eddb0a73fb29ff6d62.yml
+openapi_spec_hash: fbe0b6ef8b425ff72e84ef8f3514771d
config_hash: aa5a9dd05b6324fcb454d0694e5901a3
diff --git a/src/gcore/resources/iam/users.py b/src/gcore/resources/iam/users.py
index 91d1fb682..66f064687 100644
--- a/src/gcore/resources/iam/users.py
+++ b/src/gcore/resources/iam/users.py
@@ -53,11 +53,11 @@ def update(
self,
user_id: int,
*,
- auth_types: List[AuthType],
- email: str,
- lang: UserLanguage,
- name: Optional[str],
- phone: Optional[str],
+ auth_types: List[AuthType] | Omit = omit,
+ email: str | Omit = omit,
+ lang: UserLanguage | Omit = omit,
+ name: Optional[str] | Omit = omit,
+ phone: Optional[str] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
@@ -310,11 +310,11 @@ async def update(
self,
user_id: int,
*,
- auth_types: List[AuthType],
- email: str,
- lang: UserLanguage,
- name: Optional[str],
- phone: Optional[str],
+ auth_types: List[AuthType] | Omit = omit,
+ email: str | Omit = omit,
+ lang: UserLanguage | Omit = omit,
+ name: Optional[str] | Omit = omit,
+ phone: Optional[str] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
diff --git a/src/gcore/types/iam/user_update_params.py b/src/gcore/types/iam/user_update_params.py
index 751444f57..24103a5a7 100644
--- a/src/gcore/types/iam/user_update_params.py
+++ b/src/gcore/types/iam/user_update_params.py
@@ -3,7 +3,7 @@
from __future__ import annotations
from typing import List, Optional
-from typing_extensions import Required, TypedDict
+from typing_extensions import TypedDict
from .auth_type import AuthType
from .user_language import UserLanguage
@@ -12,20 +12,20 @@
class UserUpdateParams(TypedDict, total=False):
- auth_types: Required[List[AuthType]]
+ auth_types: List[AuthType]
"""System field. List of auth types available for the account."""
- email: Required[str]
+ email: str
"""User's email address."""
- lang: Required[UserLanguage]
+ lang: UserLanguage
"""User's language.
Defines language of the control panel and email messages.
"""
- name: Required[Optional[str]]
+ name: Optional[str]
"""User's name."""
- phone: Required[Optional[str]]
+ phone: Optional[str]
"""User's phone."""
diff --git a/tests/api_resources/iam/test_users.py b/tests/api_resources/iam/test_users.py
index 092329009..64dd08a5c 100644
--- a/tests/api_resources/iam/test_users.py
+++ b/tests/api_resources/iam/test_users.py
@@ -25,6 +25,13 @@ class TestUsers:
@pytest.mark.skip(reason="IMP-1903: OpenAPI spec PATCH requires PUT-only fields")
@parametrize
def test_method_update(self, client: Gcore) -> None:
+ user = client.iam.users.update(
+ user_id=0,
+ )
+ assert_matches_type(User, user, path=["response"])
+
+ @parametrize
+ def test_method_update_with_all_params(self, client: Gcore) -> None:
user = client.iam.users.update(
user_id=0,
auth_types=["password"],
@@ -40,11 +47,6 @@ def test_method_update(self, client: Gcore) -> None:
def test_raw_response_update(self, client: Gcore) -> None:
response = client.iam.users.with_raw_response.update(
user_id=0,
- auth_types=["password"],
- email="dev@stainless.com",
- lang="de",
- name="name",
- phone="phone",
)
assert response.is_closed is True
@@ -57,11 +59,6 @@ def test_raw_response_update(self, client: Gcore) -> None:
def test_streaming_response_update(self, client: Gcore) -> None:
with client.iam.users.with_streaming_response.update(
user_id=0,
- auth_types=["password"],
- email="dev@stainless.com",
- lang="de",
- name="name",
- phone="phone",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -233,6 +230,13 @@ class TestAsyncUsers:
@pytest.mark.skip(reason="IMP-1903: OpenAPI spec PATCH requires PUT-only fields")
@parametrize
async def test_method_update(self, async_client: AsyncGcore) -> None:
+ user = await async_client.iam.users.update(
+ user_id=0,
+ )
+ assert_matches_type(User, user, path=["response"])
+
+ @parametrize
+ async def test_method_update_with_all_params(self, async_client: AsyncGcore) -> None:
user = await async_client.iam.users.update(
user_id=0,
auth_types=["password"],
@@ -248,11 +252,6 @@ async def test_method_update(self, async_client: AsyncGcore) -> None:
async def test_raw_response_update(self, async_client: AsyncGcore) -> None:
response = await async_client.iam.users.with_raw_response.update(
user_id=0,
- auth_types=["password"],
- email="dev@stainless.com",
- lang="de",
- name="name",
- phone="phone",
)
assert response.is_closed is True
@@ -265,11 +264,6 @@ async def test_raw_response_update(self, async_client: AsyncGcore) -> None:
async def test_streaming_response_update(self, async_client: AsyncGcore) -> None:
async with async_client.iam.users.with_streaming_response.update(
user_id=0,
- auth_types=["password"],
- email="dev@stainless.com",
- lang="de",
- name="name",
- phone="phone",
) as response:
assert not response.is_closed
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
From c95b82fd774e2dd557e3610c20faa688addfc31c Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 27 Apr 2026 12:45:56 +0000
Subject: [PATCH 6/7] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 533a18c3d..a8ec4169e 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 657
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-236958943262c124215347d9b33e2de06e1e38e4b89797eddb0a73fb29ff6d62.yml
-openapi_spec_hash: fbe0b6ef8b425ff72e84ef8f3514771d
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-8c3bd3792724737d30da0f0200f0c589f9942ea3a028fcc9bcd56f3490ffc29a.yml
+openapi_spec_hash: 7b184f4e52554b89cadf11b43f395583
config_hash: aa5a9dd05b6324fcb454d0694e5901a3
From 8b9d7007ed6d35e898bb8d66e1dacd28215538c2 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 27 Apr 2026 12:46:36 +0000
Subject: [PATCH 7/7] release: 0.44.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 15 +++++++++++++++
pyproject.toml | 2 +-
src/gcore/_version.py | 2 +-
4 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index fe87cd917..cc51f6f8e 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.43.0"
+ ".": "0.44.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 26bac9aeb..6c917e1bf 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,20 @@
# Changelog
+## 0.44.0 (2026-04-27)
+
+Full Changelog: [v0.43.0...v0.44.0](https://github.com/G-Core/gcore-python/compare/v0.43.0...v0.44.0)
+
+### Features
+
+* **api:** aggregated API specs update ([5b07224](https://github.com/G-Core/gcore-python/commit/5b07224ecfcad18c39a2ae1c45fddb2b4ea811f6))
+* **api:** aggregated API specs update ([9900f97](https://github.com/G-Core/gcore-python/commit/9900f97b05e97b4f42c7d3a041f32e5a628f0614))
+* **storage:** support TF for ssh keys ([b4a70d5](https://github.com/G-Core/gcore-python/commit/b4a70d5fb797121f21daaa7da9026daae9173360))
+
+
+### Chores
+
+* **internal:** more robust bootstrap script ([8915d9b](https://github.com/G-Core/gcore-python/commit/8915d9b82e1f7f529f8aa930b047ce1bb3b32e08))
+
## 0.43.0 (2026-04-22)
Full Changelog: [v0.42.0...v0.43.0](https://github.com/G-Core/gcore-python/compare/v0.42.0...v0.43.0)
diff --git a/pyproject.toml b/pyproject.toml
index 3118811dd..92c24b561 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "gcore"
-version = "0.43.0"
+version = "0.44.0"
description = "The official Python library for the gcore API"
dynamic = ["readme"]
license = "Apache-2.0"
diff --git a/src/gcore/_version.py b/src/gcore/_version.py
index 8f9eb5688..43e6ba1de 100644
--- a/src/gcore/_version.py
+++ b/src/gcore/_version.py
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
__title__ = "gcore"
-__version__ = "0.43.0" # x-release-please-version
+__version__ = "0.44.0" # x-release-please-version