Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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.24.0"
".": "0.25.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: 640
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-4079df5b80ccb3ccbdfbfab9543db244c7e236675b3ef9fd4f9b9f21e77cbb19.yml
openapi_spec_hash: 2ab81d6ee1696810acf27cfbfd559700
config_hash: 12d04b6067da5a07e6f7f104987c0360
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-739b0d84ccefaa883a2334ad16738cc87ec625ded28ee0e2e11781f17ba36580.yml
openapi_spec_hash: deb6a4c127edd808cfd8c8eb9eb9610b
config_hash: 1607041fe51cd832db709af848355624
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## 0.25.0 (2025-12-12)

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

### ⚠ BREAKING CHANGES

* **cloud:** streamline vip connected and candidate ports

### Bug Fixes

* **cloud:** fix vip examples ([f4f6c46](https://github.com/G-Core/gcore-python/commit/f4f6c46f6352fb55eae9d91a2060f24289ed4dda))
* **cloud:** streamline vip connected and candidate ports ([958b2a7](https://github.com/G-Core/gcore-python/commit/958b2a735265407c29cc2ccd4b06566f9151dd15))

## 0.24.0 (2025-12-10)

Full Changelog: [v0.23.0...v0.24.0](https://github.com/G-Core/gcore-python/compare/v0.23.0...v0.24.0)
Expand Down
40 changes: 28 additions & 12 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -311,22 +311,38 @@ Methods:
Types:

```python
from gcore.types.cloud.reserved_fixed_ips import (
CandidatePort,
CandidatePortList,
ConnectedPort,
ConnectedPortList,
IPWithSubnet,
)
from gcore.types.cloud.reserved_fixed_ips import IPWithSubnet
```

Methods:

- <code title="patch /cloud/v1/reserved_fixed_ips/{project_id}/{region_id}/{port_id}">client.cloud.reserved_fixed_ips.vip.<a href="./src/gcore/resources/cloud/reserved_fixed_ips/vip/vip.py">toggle</a>(port_id, \*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/reserved_fixed_ips/vip_toggle_params.py">params</a>) -> <a href="./src/gcore/types/cloud/reserved_fixed_ip.py">ReservedFixedIP</a></code>

#### CandidatePorts

Types:

```python
from gcore.types.cloud.reserved_fixed_ips.vip import CandidatePort, CandidatePortList
```

Methods:

- <code title="get /cloud/v1/reserved_fixed_ips/{project_id}/{region_id}/{port_id}/available_devices">client.cloud.reserved_fixed_ips.vip.candidate_ports.<a href="./src/gcore/resources/cloud/reserved_fixed_ips/vip/candidate_ports.py">list</a>(port_id, \*, project_id, region_id) -> <a href="./src/gcore/types/cloud/reserved_fixed_ips/vip/candidate_port_list.py">CandidatePortList</a></code>

#### ConnectedPorts

Types:

```python
from gcore.types.cloud.reserved_fixed_ips.vip import ConnectedPort, ConnectedPortList
```

Methods:

- <code title="get /cloud/v1/reserved_fixed_ips/{project_id}/{region_id}/{port_id}/available_devices">client.cloud.reserved_fixed_ips.vip.<a href="./src/gcore/resources/cloud/reserved_fixed_ips/vip.py">list_candidate_ports</a>(port_id, \*, project_id, region_id) -> <a href="./src/gcore/types/cloud/reserved_fixed_ips/candidate_port_list.py">CandidatePortList</a></code>
- <code title="get /cloud/v1/reserved_fixed_ips/{project_id}/{region_id}/{port_id}/connected_devices">client.cloud.reserved_fixed_ips.vip.<a href="./src/gcore/resources/cloud/reserved_fixed_ips/vip.py">list_connected_ports</a>(port_id, \*, project_id, region_id) -> <a href="./src/gcore/types/cloud/reserved_fixed_ips/connected_port_list.py">ConnectedPortList</a></code>
- <code title="put /cloud/v1/reserved_fixed_ips/{project_id}/{region_id}/{port_id}/connected_devices">client.cloud.reserved_fixed_ips.vip.<a href="./src/gcore/resources/cloud/reserved_fixed_ips/vip.py">replace_connected_ports</a>(port_id, \*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/reserved_fixed_ips/vip_replace_connected_ports_params.py">params</a>) -> <a href="./src/gcore/types/cloud/reserved_fixed_ips/connected_port_list.py">ConnectedPortList</a></code>
- <code title="patch /cloud/v1/reserved_fixed_ips/{project_id}/{region_id}/{port_id}">client.cloud.reserved_fixed_ips.vip.<a href="./src/gcore/resources/cloud/reserved_fixed_ips/vip.py">toggle</a>(port_id, \*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/reserved_fixed_ips/vip_toggle_params.py">params</a>) -> <a href="./src/gcore/types/cloud/reserved_fixed_ip.py">ReservedFixedIP</a></code>
- <code title="patch /cloud/v1/reserved_fixed_ips/{project_id}/{region_id}/{port_id}/connected_devices">client.cloud.reserved_fixed_ips.vip.<a href="./src/gcore/resources/cloud/reserved_fixed_ips/vip.py">update_connected_ports</a>(port_id, \*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/reserved_fixed_ips/vip_update_connected_ports_params.py">params</a>) -> <a href="./src/gcore/types/cloud/reserved_fixed_ips/connected_port_list.py">ConnectedPortList</a></code>
- <code title="get /cloud/v1/reserved_fixed_ips/{project_id}/{region_id}/{port_id}/connected_devices">client.cloud.reserved_fixed_ips.vip.connected_ports.<a href="./src/gcore/resources/cloud/reserved_fixed_ips/vip/connected_ports.py">list</a>(port_id, \*, project_id, region_id) -> <a href="./src/gcore/types/cloud/reserved_fixed_ips/vip/connected_port_list.py">ConnectedPortList</a></code>
- <code title="patch /cloud/v1/reserved_fixed_ips/{project_id}/{region_id}/{port_id}/connected_devices">client.cloud.reserved_fixed_ips.vip.connected_ports.<a href="./src/gcore/resources/cloud/reserved_fixed_ips/vip/connected_ports.py">add</a>(port_id, \*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/reserved_fixed_ips/vip/connected_port_add_params.py">params</a>) -> <a href="./src/gcore/types/cloud/reserved_fixed_ips/vip/connected_port_list.py">ConnectedPortList</a></code>
- <code title="put /cloud/v1/reserved_fixed_ips/{project_id}/{region_id}/{port_id}/connected_devices">client.cloud.reserved_fixed_ips.vip.connected_ports.<a href="./src/gcore/resources/cloud/reserved_fixed_ips/vip/connected_ports.py">replace</a>(port_id, \*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/reserved_fixed_ips/vip/connected_port_replace_params.py">params</a>) -> <a href="./src/gcore/types/cloud/reserved_fixed_ips/vip/connected_port_list.py">ConnectedPortList</a></code>

## Networks

Expand Down
4 changes: 2 additions & 2 deletions examples/cloud/reserved_fixed_ips.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,15 +73,15 @@ def toggle_reserved_fixed_ip_vip(*, client: Gcore, port_id: str, is_vip: bool) -

def list_candidate_ports(*, client: Gcore, port_id: str) -> None:
print("\n=== LIST CANDIDATE PORTS ===")
candidate_ports = client.cloud.reserved_fixed_ips.vip.list_candidate_ports(port_id)
candidate_ports = client.cloud.reserved_fixed_ips.vip.candidate_ports.list(port_id)
for count, port in enumerate(candidate_ports.results, 1):
print(f"{count}. Candidate port: ID={port.port_id}, instance name={port.instance_name}")
print("========================")


def list_connected_ports(*, client: Gcore, port_id: str) -> None:
print("\n=== LIST CONNECTED PORTS ===")
connected_ports = client.cloud.reserved_fixed_ips.vip.list_connected_ports(port_id)
connected_ports = client.cloud.reserved_fixed_ips.vip.connected_ports.list(port_id)
for count, port in enumerate(connected_ports.results, 1):
print(f"{count}. Connected port: ID={port.port_id}, instance name={port.instance_name}")
print("========================")
Expand Down
4 changes: 2 additions & 2 deletions examples/cloud/reserved_fixed_ips_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,15 +77,15 @@ async def toggle_reserved_fixed_ip_vip(*, client: AsyncGcore, port_id: str, is_v

async def list_candidate_ports(*, client: AsyncGcore, port_id: str) -> None:
print("\n=== LIST CANDIDATE PORTS ===")
candidate_ports = await client.cloud.reserved_fixed_ips.vip.list_candidate_ports(port_id)
candidate_ports = await client.cloud.reserved_fixed_ips.vip.candidate_ports.list(port_id)
for count, port in enumerate(candidate_ports.results, 1):
print(f"{count}. Candidate port: ID={port.port_id}, instance name={port.instance_name}")
print("========================")


async def list_connected_ports(*, client: AsyncGcore, port_id: str) -> None:
print("\n=== LIST CONNECTED PORTS ===")
connected_ports = await client.cloud.reserved_fixed_ips.vip.list_connected_ports(port_id)
connected_ports = await client.cloud.reserved_fixed_ips.vip.connected_ports.list(port_id)
for count, port in enumerate(connected_ports.results, 1):
print(f"{count}. Connected port: ID={port.port_id}, instance name={port.instance_name}")
print("========================")
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "gcore"
version = "0.24.0"
version = "0.25.0"
description = "The official Python library for the gcore API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion src/gcore/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

__title__ = "gcore"
__version__ = "0.24.0" # x-release-please-version
__version__ = "0.25.0" # x-release-please-version
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import httpx

from .vip import (
from .vip.vip import (
VipResource,
AsyncVipResource,
VipResourceWithRawResponse,
Expand Down
47 changes: 47 additions & 0 deletions src/gcore/resources/cloud/reserved_fixed_ips/vip/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

from .vip import (
VipResource,
AsyncVipResource,
VipResourceWithRawResponse,
AsyncVipResourceWithRawResponse,
VipResourceWithStreamingResponse,
AsyncVipResourceWithStreamingResponse,
)
from .candidate_ports import (
CandidatePortsResource,
AsyncCandidatePortsResource,
CandidatePortsResourceWithRawResponse,
AsyncCandidatePortsResourceWithRawResponse,
CandidatePortsResourceWithStreamingResponse,
AsyncCandidatePortsResourceWithStreamingResponse,
)
from .connected_ports import (
ConnectedPortsResource,
AsyncConnectedPortsResource,
ConnectedPortsResourceWithRawResponse,
AsyncConnectedPortsResourceWithRawResponse,
ConnectedPortsResourceWithStreamingResponse,
AsyncConnectedPortsResourceWithStreamingResponse,
)

__all__ = [
"CandidatePortsResource",
"AsyncCandidatePortsResource",
"CandidatePortsResourceWithRawResponse",
"AsyncCandidatePortsResourceWithRawResponse",
"CandidatePortsResourceWithStreamingResponse",
"AsyncCandidatePortsResourceWithStreamingResponse",
"ConnectedPortsResource",
"AsyncConnectedPortsResource",
"ConnectedPortsResourceWithRawResponse",
"AsyncConnectedPortsResourceWithRawResponse",
"ConnectedPortsResourceWithStreamingResponse",
"AsyncConnectedPortsResourceWithStreamingResponse",
"VipResource",
"AsyncVipResource",
"VipResourceWithRawResponse",
"AsyncVipResourceWithRawResponse",
"VipResourceWithStreamingResponse",
"AsyncVipResourceWithStreamingResponse",
]
175 changes: 175 additions & 0 deletions src/gcore/resources/cloud/reserved_fixed_ips/vip/candidate_ports.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

from __future__ import annotations

import httpx

from ....._types import Body, Query, Headers, NotGiven, not_given
from ....._compat import cached_property
from ....._resource import SyncAPIResource, AsyncAPIResource
from ....._response import (
to_raw_response_wrapper,
to_streamed_response_wrapper,
async_to_raw_response_wrapper,
async_to_streamed_response_wrapper,
)
from ....._base_client import make_request_options
from .....types.cloud.reserved_fixed_ips.vip.candidate_port_list import CandidatePortList

__all__ = ["CandidatePortsResource", "AsyncCandidatePortsResource"]


class CandidatePortsResource(SyncAPIResource):
@cached_property
def with_raw_response(self) -> CandidatePortsResourceWithRawResponse:
"""
This property can be used as a prefix for any HTTP method call to return
the raw response object instead of the parsed content.

For more information, see https://www.github.com/G-Core/gcore-python#accessing-raw-response-data-eg-headers
"""
return CandidatePortsResourceWithRawResponse(self)

@cached_property
def with_streaming_response(self) -> CandidatePortsResourceWithStreamingResponse:
"""
An alternative to `.with_raw_response` that doesn't eagerly read the response body.

For more information, see https://www.github.com/G-Core/gcore-python#with_streaming_response
"""
return CandidatePortsResourceWithStreamingResponse(self)

def list(
self,
port_id: str,
*,
project_id: int | None = None,
region_id: int | None = None,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CandidatePortList:
"""
List all instance ports that are available for connecting to a VIP.

Args:
extra_headers: Send extra headers

extra_query: Add additional query parameters to the request

extra_body: Add additional JSON properties to the request

timeout: Override the client-level default timeout for this request, in seconds
"""
if project_id is None:
project_id = self._client._get_cloud_project_id_path_param()
if region_id is None:
region_id = self._client._get_cloud_region_id_path_param()
if not port_id:
raise ValueError(f"Expected a non-empty value for `port_id` but received {port_id!r}")
return self._get(
f"/cloud/v1/reserved_fixed_ips/{project_id}/{region_id}/{port_id}/available_devices",
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=CandidatePortList,
)


class AsyncCandidatePortsResource(AsyncAPIResource):
@cached_property
def with_raw_response(self) -> AsyncCandidatePortsResourceWithRawResponse:
"""
This property can be used as a prefix for any HTTP method call to return
the raw response object instead of the parsed content.

For more information, see https://www.github.com/G-Core/gcore-python#accessing-raw-response-data-eg-headers
"""
return AsyncCandidatePortsResourceWithRawResponse(self)

@cached_property
def with_streaming_response(self) -> AsyncCandidatePortsResourceWithStreamingResponse:
"""
An alternative to `.with_raw_response` that doesn't eagerly read the response body.

For more information, see https://www.github.com/G-Core/gcore-python#with_streaming_response
"""
return AsyncCandidatePortsResourceWithStreamingResponse(self)

async def list(
self,
port_id: str,
*,
project_id: int | None = None,
region_id: int | None = None,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> CandidatePortList:
"""
List all instance ports that are available for connecting to a VIP.

Args:
extra_headers: Send extra headers

extra_query: Add additional query parameters to the request

extra_body: Add additional JSON properties to the request

timeout: Override the client-level default timeout for this request, in seconds
"""
if project_id is None:
project_id = self._client._get_cloud_project_id_path_param()
if region_id is None:
region_id = self._client._get_cloud_region_id_path_param()
if not port_id:
raise ValueError(f"Expected a non-empty value for `port_id` but received {port_id!r}")
return await self._get(
f"/cloud/v1/reserved_fixed_ips/{project_id}/{region_id}/{port_id}/available_devices",
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
cast_to=CandidatePortList,
)


class CandidatePortsResourceWithRawResponse:
def __init__(self, candidate_ports: CandidatePortsResource) -> None:
self._candidate_ports = candidate_ports

self.list = to_raw_response_wrapper(
candidate_ports.list,
)


class AsyncCandidatePortsResourceWithRawResponse:
def __init__(self, candidate_ports: AsyncCandidatePortsResource) -> None:
self._candidate_ports = candidate_ports

self.list = async_to_raw_response_wrapper(
candidate_ports.list,
)


class CandidatePortsResourceWithStreamingResponse:
def __init__(self, candidate_ports: CandidatePortsResource) -> None:
self._candidate_ports = candidate_ports

self.list = to_streamed_response_wrapper(
candidate_ports.list,
)


class AsyncCandidatePortsResourceWithStreamingResponse:
def __init__(self, candidate_ports: AsyncCandidatePortsResource) -> None:
self._candidate_ports = candidate_ports

self.list = async_to_streamed_response_wrapper(
candidate_ports.list,
)
Loading
Loading