Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
ac8dcb3
codegen metadata
stainless-app[bot] Feb 17, 2026
9255354
feat(api): aggregated API specs update
stainless-app[bot] Feb 17, 2026
079e24c
feat(api): aggregated API specs update
stainless-app[bot] Feb 18, 2026
34d65c1
feat(api): aggregated API specs update
stainless-app[bot] Feb 18, 2026
df7fbed
fix(storage): update storage type and ignore deprecation in examples
pedrodeoliveira Feb 18, 2026
d86c213
refactor(cdn)!: move ip_ranges.list_ips to ips.list
stainless-app[bot] Feb 18, 2026
c156758
refactor(streaming)!: move playlists.list_videos to playlists.videos.…
stainless-app[bot] Feb 18, 2026
3618fc7
refactor(streaming)!: move streams clip methods to streams.clips
stainless-app[bot] Feb 18, 2026
b1c884f
fix(waap)!: split api_discovery methods into scan_results, openapi, a…
stainless-app[bot] Feb 18, 2026
e17429a
refactor(waap)!: move domains.toggle_policy to domains.policies.toggle
stainless-app[bot] Feb 18, 2026
dc25cc7
feat(api): aggregated API specs update
stainless-app[bot] Feb 18, 2026
6e74c9a
codegen metadata
stainless-app[bot] Feb 19, 2026
fb4b173
codegen metadata
stainless-app[bot] Feb 19, 2026
9dce180
refactor(iam)!: rename models and update examples
stainless-app[bot] Feb 19, 2026
2da7f85
refactor(iam)!: rename models and update examples
stainless-app[bot] Feb 19, 2026
507f04d
feat(api): aggregated API specs update
stainless-app[bot] Feb 19, 2026
99a8e53
codegen metadata
stainless-app[bot] Feb 19, 2026
4e4a1f8
chore: update mock server docs
stainless-app[bot] Feb 19, 2026
0deadd1
feat(api): aggregated API specs update
stainless-app[bot] Feb 20, 2026
a859b82
codegen metadata
stainless-app[bot] Feb 20, 2026
4724ee3
feat(cdn): enable terraform generation for cdn rules
stainless-app[bot] Feb 20, 2026
e87d27b
codegen metadata
stainless-app[bot] Feb 20, 2026
edc5ac9
release: 0.34.0
stainless-app[bot] Feb 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.33.0"
".": "0.34.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 645
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-06555b1b7559c234823e37c3970ba3ea9f11ed14270b872b22761f6be8692e74.yml
openapi_spec_hash: 619bca59fafad89221a4b35f797f14f1
config_hash: bc578a7de14c42e33b7d4bd4502218f2
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-c6e3c7a600a192a6d3f2b2804582e9321e673855eddbd74675373c9d1fd8665d.yml
openapi_spec_hash: 65d718620a141485756483d86c20f6aa
config_hash: 27acde7e1034d3ea26b99d1128bb9dde
45 changes: 45 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,50 @@
# Changelog

## 0.34.0 (2026-02-20)

Full Changelog: [v0.33.0...v0.34.0](https://github.com/G-Core/gcore-python/compare/v0.33.0...v0.34.0)

### ⚠ BREAKING CHANGES

* **iam:** rename models and update examples
* **iam:** rename models and update examples
* **waap:** move domains.toggle_policy to domains.policies.toggle
* **waap:** split api_discovery methods into scan_results, openapi, and settings subresources
* **streaming:** move streams clip methods to streams.clips
* **streaming:** move playlists.list_videos to playlists.videos.list
* **cdn:** move ip_ranges.list_ips to ips.list

### Features

* **api:** aggregated API specs update ([0deadd1](https://github.com/G-Core/gcore-python/commit/0deadd1591cdf99fa6c8dc62d3c239b5d7aa7587))
* **api:** aggregated API specs update ([507f04d](https://github.com/G-Core/gcore-python/commit/507f04d10f8307628092b91d0333fb1682d829eb))
* **api:** aggregated API specs update ([dc25cc7](https://github.com/G-Core/gcore-python/commit/dc25cc76e4dd199daa6ff8128d1e03ee8f42ffbf))
* **api:** aggregated API specs update ([34d65c1](https://github.com/G-Core/gcore-python/commit/34d65c17e2438ba6ab5d60907936eb5d12181a31))
* **api:** aggregated API specs update ([079e24c](https://github.com/G-Core/gcore-python/commit/079e24cd6522792e9d841a2e0f408e21e617e05e))
* **api:** aggregated API specs update ([9255354](https://github.com/G-Core/gcore-python/commit/925535479aea739b6abbd1fa76ea892d342fc355))
* **cdn:** enable terraform generation for cdn rules ([4724ee3](https://github.com/G-Core/gcore-python/commit/4724ee3468cadb989bdc0b99e79de4b243e870f8))


### Bug Fixes

* **storage:** update storage type and ignore deprecation in examples ([df7fbed](https://github.com/G-Core/gcore-python/commit/df7fbed9dca33894eaf3111bf7d87b0a1aa16977))
* **waap:** split api_discovery methods into scan_results, openapi, and settings subresources ([b1c884f](https://github.com/G-Core/gcore-python/commit/b1c884f463f33289b820eb5565ac9d7d74afbb2f))


### Chores

* update mock server docs ([4e4a1f8](https://github.com/G-Core/gcore-python/commit/4e4a1f8ea185a3f84be9c68839569002b8c08e2f))


### Refactors

* **cdn:** move ip_ranges.list_ips to ips.list ([d86c213](https://github.com/G-Core/gcore-python/commit/d86c21322c7ea98ba5ada8ddb6e93843ac2c7719))
* **iam:** rename models and update examples ([2da7f85](https://github.com/G-Core/gcore-python/commit/2da7f85bd5944349aec34c473638a3c30f3a9f23))
* **iam:** rename models and update examples ([9dce180](https://github.com/G-Core/gcore-python/commit/9dce180a6be142c2a75e12ce2978565d438694f9))
* **streaming:** move playlists.list_videos to playlists.videos.list ([c156758](https://github.com/G-Core/gcore-python/commit/c156758df6af4bc9516794adf1ab984d7f17d29e))
* **streaming:** move streams clip methods to streams.clips ([3618fc7](https://github.com/G-Core/gcore-python/commit/3618fc747692a6b6921ec82cba39180b6d99021a))
* **waap:** move domains.toggle_policy to domains.policies.toggle ([e17429a](https://github.com/G-Core/gcore-python/commit/e17429ad3e37a2eef866b61833b1176cfac5b6d1))

## 0.33.0 (2026-02-16)

Full Changelog: [v0.32.0...v0.33.0](https://github.com/G-Core/gcore-python/compare/v0.32.0...v0.33.0)
Expand Down
3 changes: 1 addition & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,7 @@ $ pip install ./path-to-wheel-file.whl
Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.

```sh
# you will need npm installed
$ npx prism mock path/to/your/openapi.yml
$ ./scripts/mock
```

```sh
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from datetime import datetime, timezone, timedelta

from gcore import Gcore
from gcore.types.iam.user_invite_params import UserRole
from gcore.types.iam.user_invite_params import UserGroupParam
from gcore.types.iam.api_token_create_params import ClientUser


Expand All @@ -21,7 +21,7 @@ def main() -> None:

user_email = "john.doe@example.com"
user_name = "John Doe"
user_role = UserRole(id=5, name="Engineers")
user_role = UserGroupParam(id=5, name="Engineers")

# Step 1: Invite user via IAM
invited_user = gcore.iam.users.invite(
Expand Down
8 changes: 4 additions & 4 deletions examples/storage/basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ def main() -> None:
def create_storage(*, client: Gcore) -> int:
print("\n=== CREATE STORAGE ===")
name = f"example-s3-storage-{int(time.time())}"
storage = client.storage.create(
storage = client.storage.create( # pyright: ignore[reportDeprecated]
name=name,
type="s3",
type="s3_compatible",
location="s-ed1",
)
print(f"Created Storage: ID={storage.id}, Name={storage.name}, Type={storage.type}, Location={storage.location}")
Expand Down Expand Up @@ -57,7 +57,7 @@ def get_storage(*, client: Gcore, storage_id: int) -> None:

def update_storage(*, client: Gcore, storage_id: int) -> None:
print("\n=== UPDATE STORAGE ===")
storage = client.storage.update(
storage = client.storage.update( # pyright: ignore[reportDeprecated]
storage_id=storage_id,
expires="30 days",
)
Expand All @@ -67,7 +67,7 @@ def update_storage(*, client: Gcore, storage_id: int) -> None:

def delete_storage(*, client: Gcore, storage_id: int) -> None:
print("\n=== DELETE STORAGE ===")
client.storage.delete(storage_id=storage_id)
client.storage.delete(storage_id=storage_id) # pyright: ignore[reportDeprecated]
print(f"Storage {storage_id} deleted successfully")
print("======================")

Expand Down
8 changes: 4 additions & 4 deletions examples/storage/basic_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ async def main() -> None:
async def create_storage(*, client: AsyncGcore) -> int:
print("\n=== CREATE STORAGE ===")
name = f"example-s3-storage-{int(time.time())}"
storage = await client.storage.create(
storage = await client.storage.create( # pyright: ignore[reportDeprecated]
name=name,
type="s3",
type="s3_compatible",
location="s-ed1",
)
print(f"Created Storage: ID={storage.id}, Name={storage.name}, Type={storage.type}, Location={storage.location}")
Expand Down Expand Up @@ -60,7 +60,7 @@ async def get_storage(*, client: AsyncGcore, storage_id: int) -> None:

async def update_storage(*, client: AsyncGcore, storage_id: int) -> None:
print("\n=== UPDATE STORAGE ===")
storage = await client.storage.update(
storage = await client.storage.update( # pyright: ignore[reportDeprecated]
storage_id=storage_id,
expires="30 days",
)
Expand All @@ -70,7 +70,7 @@ async def update_storage(*, client: AsyncGcore, storage_id: int) -> None:

async def delete_storage(*, client: AsyncGcore, storage_id: int) -> None:
print("\n=== DELETE STORAGE ===")
await client.storage.delete(storage_id=storage_id)
await client.storage.delete(storage_id=storage_id) # pyright: ignore[reportDeprecated]
print(f"Storage {storage_id} deleted successfully")
print("======================")

Expand Down
16 changes: 8 additions & 8 deletions examples/storage/credentials.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ def main() -> None:
def create_s3_storage(*, client: Gcore) -> int:
print("\n=== CREATE S3 STORAGE ===")
s3_name = f"s3-creds-example-{int(time.time())}"
storage = client.storage.create(
storage = client.storage.create( # pyright: ignore[reportDeprecated]
name=s3_name,
type="s3",
type="s3_compatible",
location="s-ed1",
)
print(f"Created Storage: ID={storage.id}, Name={storage.name}, Type={storage.type}, Location={storage.location}")
Expand All @@ -47,7 +47,7 @@ def create_s3_storage(*, client: Gcore) -> int:
def create_sftp_storage(*, client: Gcore) -> int:
print("\n=== CREATE SFTP STORAGE ===")
sftp_name = f"sftp-ex-{int(time.time()) % 1000000}"
storage = client.storage.create(
storage = client.storage.create( # pyright: ignore[reportDeprecated]
name=sftp_name,
type="sftp",
location="ams",
Expand Down Expand Up @@ -90,7 +90,7 @@ def get_storage(*, client: Gcore, storage_id: int) -> None:

def generate_s3_keys(*, client: Gcore, s3_storage_id: int) -> None:
print("\n=== GENERATE S3 KEYS ===")
storage = client.storage.credentials.recreate(
storage = client.storage.credentials.recreate( # pyright: ignore[reportDeprecated]
storage_id=s3_storage_id,
generate_s3_keys=True,
)
Expand All @@ -103,7 +103,7 @@ def generate_s3_keys(*, client: Gcore, s3_storage_id: int) -> None:

def generate_sftp_password(*, client: Gcore, sftp_storage_id: int) -> None:
print("\n=== GENERATE SFTP PASSWORD ===")
storage = client.storage.credentials.recreate(
storage = client.storage.credentials.recreate( # pyright: ignore[reportDeprecated]
storage_id=sftp_storage_id,
generate_sftp_password=True,
)
Expand All @@ -115,7 +115,7 @@ def generate_sftp_password(*, client: Gcore, sftp_storage_id: int) -> None:
def set_custom_sftp_password(*, client: Gcore, sftp_storage_id: int) -> None:
print("\n=== SET CUSTOM SFTP PASSWORD ===")
custom_password = "MyNewSecurePassword456!"
client.storage.credentials.recreate(
client.storage.credentials.recreate( # pyright: ignore[reportDeprecated]
storage_id=sftp_storage_id,
sftp_password=custom_password,
)
Expand All @@ -125,7 +125,7 @@ def set_custom_sftp_password(*, client: Gcore, sftp_storage_id: int) -> None:

def delete_sftp_password(*, client: Gcore, sftp_storage_id: int) -> None:
print("\n=== DELETE SFTP PASSWORD ===")
client.storage.credentials.recreate(
client.storage.credentials.recreate( # pyright: ignore[reportDeprecated]
storage_id=sftp_storage_id,
delete_sftp_password=True,
)
Expand All @@ -136,7 +136,7 @@ def delete_sftp_password(*, client: Gcore, sftp_storage_id: int) -> None:
def delete_storage(*, client: Gcore, storage_id: int) -> None:
"""Delete a single storage"""
print("\n=== DELETE STORAGE ===")
client.storage.delete(storage_id=storage_id)
client.storage.delete(storage_id=storage_id) # pyright: ignore[reportDeprecated]
print(f"Storage {storage_id} deleted successfully")
print("======================")

Expand Down
16 changes: 8 additions & 8 deletions examples/storage/credentials_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ async def main() -> None:
async def create_s3_storage(*, client: AsyncGcore) -> int:
print("\n=== CREATE S3 STORAGE ===")
s3_name = f"s3-creds-example-{int(time.time())}"
storage = await client.storage.create(
storage = await client.storage.create( # pyright: ignore[reportDeprecated]
name=s3_name,
type="s3",
type="s3_compatible",
location="s-ed1",
)
print(f"Created Storage: ID={storage.id}, Name={storage.name}, Type={storage.type}, Location={storage.location}")
Expand All @@ -48,7 +48,7 @@ async def create_s3_storage(*, client: AsyncGcore) -> int:
async def create_sftp_storage(*, client: AsyncGcore) -> int:
print("\n=== CREATE SFTP STORAGE ===")
sftp_name = f"sftp-ex-{int(time.time()) % 1000000}"
storage = await client.storage.create(
storage = await client.storage.create( # pyright: ignore[reportDeprecated]
name=sftp_name,
type="sftp",
location="ams",
Expand Down Expand Up @@ -91,7 +91,7 @@ async def get_storage(*, client: AsyncGcore, storage_id: int) -> None:

async def generate_s3_keys(*, client: AsyncGcore, s3_storage_id: int) -> None:
print("\n=== GENERATE S3 KEYS ===")
storage = await client.storage.credentials.recreate(
storage = await client.storage.credentials.recreate( # pyright: ignore[reportDeprecated]
storage_id=s3_storage_id,
generate_s3_keys=True,
)
Expand All @@ -104,7 +104,7 @@ async def generate_s3_keys(*, client: AsyncGcore, s3_storage_id: int) -> None:

async def generate_sftp_password(*, client: AsyncGcore, sftp_storage_id: int) -> None:
print("\n=== GENERATE SFTP PASSWORD ===")
storage = await client.storage.credentials.recreate(
storage = await client.storage.credentials.recreate( # pyright: ignore[reportDeprecated]
storage_id=sftp_storage_id,
generate_sftp_password=True,
)
Expand All @@ -116,7 +116,7 @@ async def generate_sftp_password(*, client: AsyncGcore, sftp_storage_id: int) ->
async def set_custom_sftp_password(*, client: AsyncGcore, sftp_storage_id: int) -> None:
print("\n=== SET CUSTOM SFTP PASSWORD ===")
custom_password = "MyNewSecurePassword456!"
await client.storage.credentials.recreate(
await client.storage.credentials.recreate( # pyright: ignore[reportDeprecated]
storage_id=sftp_storage_id,
sftp_password=custom_password,
)
Expand All @@ -126,7 +126,7 @@ async def set_custom_sftp_password(*, client: AsyncGcore, sftp_storage_id: int)

async def delete_sftp_password(*, client: AsyncGcore, sftp_storage_id: int) -> None:
print("\n=== DELETE SFTP PASSWORD ===")
await client.storage.credentials.recreate(
await client.storage.credentials.recreate( # pyright: ignore[reportDeprecated]
storage_id=sftp_storage_id,
delete_sftp_password=True,
)
Expand All @@ -137,7 +137,7 @@ async def delete_sftp_password(*, client: AsyncGcore, sftp_storage_id: int) -> N
async def delete_storage(*, client: AsyncGcore, storage_id: int) -> None:
"""Delete a single storage"""
print("\n=== DELETE STORAGE ===")
await client.storage.delete(storage_id=storage_id)
await client.storage.delete(storage_id=storage_id) # pyright: ignore[reportDeprecated]
print(f"Storage {storage_id} deleted successfully")
print("======================")

Expand Down
18 changes: 9 additions & 9 deletions examples/storage/s3_buckets.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@ def main() -> None:
def create_s3_storage(*, client: Gcore) -> int:
print("\n=== CREATE S3 STORAGE ===")
storage_name = f"s3-bucket-example-{int(time.time())}"
storage = client.storage.create(
storage = client.storage.create( # pyright: ignore[reportDeprecated]
name=storage_name,
type="s3",
type="s3_compatible",
location="s-ed1",
)
print(f"Created Storage: ID={storage.id}, Name={storage.name}, Type={storage.type}, Location={storage.location}")
Expand Down Expand Up @@ -66,7 +66,7 @@ def create_bucket(*, client: Gcore, storage_id: int) -> str:
print("\n=== CREATE BUCKET ===")
timestamp = int(time.time())
bucket_name = f"example-bucket-{timestamp}"
client.storage.buckets.create(
client.storage.buckets.create( # pyright: ignore[reportDeprecated]
bucket_name=bucket_name,
storage_id=storage_id,
)
Expand All @@ -77,7 +77,7 @@ def create_bucket(*, client: Gcore, storage_id: int) -> str:

def list_buckets(*, client: Gcore, storage_id: int) -> None:
print("\n=== LIST BUCKETS ===")
buckets = client.storage.buckets.list(storage_id=storage_id)
buckets = client.storage.buckets.list(storage_id=storage_id) # pyright: ignore[reportDeprecated]
for count, bucket in enumerate(buckets, 1):
lifecycle_info = f", Lifecycle: {bucket.lifecycle} days" if bucket.lifecycle and bucket.lifecycle > 0 else ""
print(f" {count}. Bucket: Name={bucket.name}{lifecycle_info}")
Expand All @@ -86,7 +86,7 @@ def list_buckets(*, client: Gcore, storage_id: int) -> None:

def set_bucket_lifecycle(*, client: Gcore, storage_id: int, bucket_name: str) -> None:
print("\n=== SET BUCKET LIFECYCLE ===")
client.storage.buckets.lifecycle.create(
client.storage.buckets.lifecycle.create( # pyright: ignore[reportDeprecated]
bucket_name=bucket_name,
storage_id=storage_id,
expiration_days=30,
Expand All @@ -97,7 +97,7 @@ def set_bucket_lifecycle(*, client: Gcore, storage_id: int, bucket_name: str) ->

def set_bucket_cors(*, client: Gcore, storage_id: int, bucket_name: str) -> None:
print("\n=== SET BUCKET CORS ===")
client.storage.buckets.cors.create(
client.storage.buckets.cors.create( # pyright: ignore[reportDeprecated]
bucket_name=bucket_name,
storage_id=storage_id,
allowed_origins=["*"],
Expand All @@ -108,7 +108,7 @@ def set_bucket_cors(*, client: Gcore, storage_id: int, bucket_name: str) -> None

def set_bucket_policy(*, client: Gcore, storage_id: int, bucket_name: str) -> None:
print("\n=== SET BUCKET POLICY ===")
client.storage.buckets.policy.create(
client.storage.buckets.policy.create( # pyright: ignore[reportDeprecated]
bucket_name=bucket_name,
storage_id=storage_id,
)
Expand All @@ -118,7 +118,7 @@ def set_bucket_policy(*, client: Gcore, storage_id: int, bucket_name: str) -> No

def delete_bucket(*, client: Gcore, storage_id: int, bucket_name: str) -> None:
print("\n=== DELETE BUCKET ===")
client.storage.buckets.delete(
client.storage.buckets.delete( # pyright: ignore[reportDeprecated]
bucket_name=bucket_name,
storage_id=storage_id,
)
Expand All @@ -128,7 +128,7 @@ def delete_bucket(*, client: Gcore, storage_id: int, bucket_name: str) -> None:

def delete_storage(*, client: Gcore, storage_id: int) -> None:
print("\n=== DELETE STORAGE ===")
client.storage.delete(storage_id=storage_id)
client.storage.delete(storage_id=storage_id) # pyright: ignore[reportDeprecated]
print(f"Storage {storage_id} deleted successfully")
print("======================")

Expand Down
Loading
Loading