Skip to content

Commit 295b331

Browse files
committed
Mark legacy tunnel methods deprecated
1 parent 3d4ea01 commit 295b331

File tree

7 files changed

+89
-48
lines changed

7 files changed

+89
-48
lines changed

src/runloop_api_client/resources/devboxes/devboxes.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,9 @@ def create_ssh_key(
652652
cast_to=DevboxCreateSSHKeyResponse,
653653
)
654654

655-
@typing_extensions.deprecated("deprecated")
655+
@typing_extensions.deprecated(
656+
"create_tunnel is deprecated; use enable_tunnel or configure a tunnel at devbox creation."
657+
)
656658
def create_tunnel(
657659
self,
658660
id: str,
@@ -666,7 +668,7 @@ def create_tunnel(
666668
timeout: float | httpx.Timeout | None | NotGiven = not_given,
667669
idempotency_key: str | None = None,
668670
) -> DevboxTunnelView:
669-
"""[Deprecated] Use POST /v1/devboxes/{id}/enable_tunnel instead.
671+
"""[Deprecated] Use POST /v1/devboxes/{id}/enable_tunnel or devbox creation instead.
670672
671673
This endpoint
672674
creates a legacy tunnel. The new enable_tunnel endpoint provides improved tunnel
@@ -1270,7 +1272,9 @@ def read_file_contents(
12701272
cast_to=str,
12711273
)
12721274

1273-
@typing_extensions.deprecated("deprecated")
1275+
@typing_extensions.deprecated(
1276+
"remove_tunnel is deprecated; use enable_tunnel or configure a tunnel at devbox creation."
1277+
)
12741278
def remove_tunnel(
12751279
self,
12761280
id: str,
@@ -1284,7 +1288,7 @@ def remove_tunnel(
12841288
timeout: float | httpx.Timeout | None | NotGiven = not_given,
12851289
idempotency_key: str | None = None,
12861290
) -> object:
1287-
"""[Deprecated] Tunnels remain active until devbox is shutdown.
1291+
"""[Deprecated] Use enable_tunnel or devbox creation instead.
12881292
12891293
This endpoint
12901294
removes a legacy tunnel.
@@ -2261,7 +2265,9 @@ async def create_ssh_key(
22612265
cast_to=DevboxCreateSSHKeyResponse,
22622266
)
22632267

2264-
@typing_extensions.deprecated("deprecated")
2268+
@typing_extensions.deprecated(
2269+
"create_tunnel is deprecated; use enable_tunnel or configure a tunnel at devbox creation."
2270+
)
22652271
async def create_tunnel(
22662272
self,
22672273
id: str,
@@ -2275,7 +2281,7 @@ async def create_tunnel(
22752281
timeout: float | httpx.Timeout | None | NotGiven = not_given,
22762282
idempotency_key: str | None = None,
22772283
) -> DevboxTunnelView:
2278-
"""[Deprecated] Use POST /v1/devboxes/{id}/enable_tunnel instead.
2284+
"""[Deprecated] Use POST /v1/devboxes/{id}/enable_tunnel or devbox creation instead.
22792285
22802286
This endpoint
22812287
creates a legacy tunnel. The new enable_tunnel endpoint provides improved tunnel
@@ -2882,7 +2888,9 @@ async def read_file_contents(
28822888
cast_to=str,
28832889
)
28842890

2885-
@typing_extensions.deprecated("deprecated")
2891+
@typing_extensions.deprecated(
2892+
"remove_tunnel is deprecated; use enable_tunnel or configure a tunnel at devbox creation."
2893+
)
28862894
async def remove_tunnel(
28872895
self,
28882896
id: str,
@@ -2896,7 +2904,7 @@ async def remove_tunnel(
28962904
timeout: float | httpx.Timeout | None | NotGiven = not_given,
28972905
idempotency_key: str | None = None,
28982906
) -> object:
2899-
"""[Deprecated] Tunnels remain active until devbox is shutdown.
2907+
"""[Deprecated] Use enable_tunnel or devbox creation instead.
29002908
29012909
This endpoint
29022910
removes a legacy tunnel.

src/runloop_api_client/sdk/async_devbox.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,7 @@ async def create_tunnel(
779779
) -> DevboxTunnelView:
780780
"""[Deprecated] Create a legacy tunnel to expose a devbox port publicly.
781781
782-
Use :meth:`enable_tunnel` instead for the V2 tunnel API.
782+
Use :meth:`enable_tunnel` or configure a tunnel during devbox creation instead.
783783
784784
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKDevboxCreateTunnelParams` for available parameters
785785
:return: Details about the public endpoint
@@ -789,6 +789,11 @@ async def create_tunnel(
789789
>>> tunnel = await devbox.net.create_tunnel(port=8080)
790790
>>> print(f"Public URL: {tunnel.url}")
791791
"""
792+
warnings.warn(
793+
"create_tunnel is deprecated; use enable_tunnel or configure a tunnel at devbox creation.",
794+
DeprecationWarning,
795+
stacklevel=2,
796+
)
792797
with warnings.catch_warnings():
793798
warnings.simplefilter("ignore", DeprecationWarning)
794799
return await self._devbox._client.devboxes.create_tunnel( # type: ignore[deprecated]
@@ -824,7 +829,9 @@ async def remove_tunnel(
824829
self,
825830
**params: Unpack[SDKDevboxRemoveTunnelParams],
826831
) -> object:
827-
"""Remove a network tunnel, disabling public access to the port.
832+
"""[Deprecated] Remove a legacy network tunnel.
833+
834+
Use :meth:`enable_tunnel` or configure a tunnel during devbox creation instead.
828835
829836
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKDevboxRemoveTunnelParams` for available parameters
830837
:return: Response confirming the tunnel removal
@@ -833,6 +840,11 @@ async def remove_tunnel(
833840
Example:
834841
>>> await devbox.net.remove_tunnel(port=8080)
835842
"""
843+
warnings.warn(
844+
"remove_tunnel is deprecated; use enable_tunnel or configure a tunnel at devbox creation.",
845+
DeprecationWarning,
846+
stacklevel=2,
847+
)
836848
with warnings.catch_warnings():
837849
warnings.simplefilter("ignore", DeprecationWarning)
838850
return await self._devbox._client.devboxes.remove_tunnel( # type: ignore[deprecated]

src/runloop_api_client/sdk/devbox.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -782,7 +782,7 @@ def create_tunnel(
782782
) -> DevboxTunnelView:
783783
"""[Deprecated] Create a legacy tunnel to expose a devbox port publicly.
784784
785-
Use :meth:`enable_tunnel` instead for the V2 tunnel API.
785+
Use :meth:`enable_tunnel` or configure a tunnel during devbox creation instead.
786786
787787
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKDevboxCreateTunnelParams` for available parameters
788788
:return: Details about the public endpoint
@@ -792,6 +792,11 @@ def create_tunnel(
792792
>>> tunnel = devbox.net.create_tunnel(port=8080)
793793
>>> print(f"Public URL: {tunnel.url}")
794794
"""
795+
warnings.warn(
796+
"create_tunnel is deprecated; use enable_tunnel or configure a tunnel at devbox creation.",
797+
DeprecationWarning,
798+
stacklevel=2,
799+
)
795800
with warnings.catch_warnings():
796801
warnings.simplefilter("ignore", DeprecationWarning)
797802
return self._devbox._client.devboxes.create_tunnel( # type: ignore[deprecated]
@@ -827,7 +832,9 @@ def remove_tunnel(
827832
self,
828833
**params: Unpack[SDKDevboxRemoveTunnelParams],
829834
) -> object:
830-
"""Remove a network tunnel, disabling public access to the port.
835+
"""[Deprecated] Remove a legacy network tunnel.
836+
837+
Use :meth:`enable_tunnel` or configure a tunnel during devbox creation instead.
831838
832839
:param params: See :typeddict:`~runloop_api_client.sdk._types.SDKDevboxRemoveTunnelParams` for available parameters
833840
:return: Response confirming the tunnel removal
@@ -836,6 +843,11 @@ def remove_tunnel(
836843
Example:
837844
>>> devbox.net.remove_tunnel(port=8080)
838845
"""
846+
warnings.warn(
847+
"remove_tunnel is deprecated; use enable_tunnel or configure a tunnel at devbox creation.",
848+
DeprecationWarning,
849+
stacklevel=2,
850+
)
839851
with warnings.catch_warnings():
840852
warnings.simplefilter("ignore", DeprecationWarning)
841853
return self._devbox._client.devboxes.remove_tunnel( # type: ignore[deprecated]

tests/sdk/async_devbox/test_interfaces.py

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -185,14 +185,15 @@ async def test_create_tunnel(self, mock_async_client: AsyncMock) -> None:
185185
mock_async_client.devboxes.create_tunnel = AsyncMock(return_value=tunnel_view)
186186

187187
devbox = AsyncDevbox(mock_async_client, "dbx_123")
188-
result = await devbox.net.create_tunnel(
189-
port=8080,
190-
extra_headers={"X-Custom": "value"},
191-
extra_query={"param": "value"},
192-
extra_body={"key": "value"},
193-
timeout=30.0,
194-
idempotency_key="key-123",
195-
)
188+
with pytest.warns(DeprecationWarning, match="create_tunnel is deprecated"):
189+
result = await devbox.net.create_tunnel(
190+
port=8080,
191+
extra_headers={"X-Custom": "value"},
192+
extra_query={"param": "value"},
193+
extra_body={"key": "value"},
194+
timeout=30.0,
195+
idempotency_key="key-123",
196+
)
196197

197198
assert result == tunnel_view
198199
mock_async_client.devboxes.create_tunnel.assert_called_once()
@@ -203,14 +204,15 @@ async def test_remove_tunnel(self, mock_async_client: AsyncMock) -> None:
203204
mock_async_client.devboxes.remove_tunnel = AsyncMock(return_value=object())
204205

205206
devbox = AsyncDevbox(mock_async_client, "dbx_123")
206-
result = await devbox.net.remove_tunnel(
207-
port=8080,
208-
extra_headers={"X-Custom": "value"},
209-
extra_query={"param": "value"},
210-
extra_body={"key": "value"},
211-
timeout=30.0,
212-
idempotency_key="key-123",
213-
)
207+
with pytest.warns(DeprecationWarning, match="remove_tunnel is deprecated"):
208+
result = await devbox.net.remove_tunnel(
209+
port=8080,
210+
extra_headers={"X-Custom": "value"},
211+
extra_query={"param": "value"},
212+
extra_body={"key": "value"},
213+
timeout=30.0,
214+
idempotency_key="key-123",
215+
)
214216

215217
assert result is not None # Verify return value is propagated
216218
mock_async_client.devboxes.remove_tunnel.assert_called_once()

tests/sdk/devbox/test_interfaces.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from unittest.mock import Mock
1212

1313
import httpx
14+
import pytest
1415

1516
from tests.sdk.conftest import MockExecutionView
1617
from runloop_api_client.sdk import Devbox
@@ -285,14 +286,15 @@ def test_create_tunnel(self, mock_client: Mock) -> None:
285286
mock_client.devboxes.create_tunnel.return_value = tunnel_view
286287

287288
devbox = Devbox(mock_client, "dbx_123")
288-
result = devbox.net.create_tunnel(
289-
port=8080,
290-
extra_headers={"X-Custom": "value"},
291-
extra_query={"param": "value"},
292-
extra_body={"key": "value"},
293-
timeout=30.0,
294-
idempotency_key="key-123",
295-
)
289+
with pytest.warns(DeprecationWarning, match="create_tunnel is deprecated"):
290+
result = devbox.net.create_tunnel(
291+
port=8080,
292+
extra_headers={"X-Custom": "value"},
293+
extra_query={"param": "value"},
294+
extra_body={"key": "value"},
295+
timeout=30.0,
296+
idempotency_key="key-123",
297+
)
296298

297299
assert result == tunnel_view
298300
mock_client.devboxes.create_tunnel.assert_called_once_with(
@@ -310,14 +312,15 @@ def test_remove_tunnel(self, mock_client: Mock) -> None:
310312
mock_client.devboxes.remove_tunnel.return_value = object()
311313

312314
devbox = Devbox(mock_client, "dbx_123")
313-
result = devbox.net.remove_tunnel(
314-
port=8080,
315-
extra_headers={"X-Custom": "value"},
316-
extra_query={"param": "value"},
317-
extra_body={"key": "value"},
318-
timeout=30.0,
319-
idempotency_key="key-123",
320-
)
315+
with pytest.warns(DeprecationWarning, match="remove_tunnel is deprecated"):
316+
result = devbox.net.remove_tunnel(
317+
port=8080,
318+
extra_headers={"X-Custom": "value"},
319+
extra_query={"param": "value"},
320+
extra_body={"key": "value"},
321+
timeout=30.0,
322+
idempotency_key="key-123",
323+
)
321324

322325
assert result is not None # Verify return value is propagated
323326
mock_client.devboxes.remove_tunnel.assert_called_once_with(

tests/smoketests/sdk/test_async_devbox.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -447,14 +447,16 @@ async def test_create_and_remove_tunnel(self, async_sdk_client: AsyncRunloopSDK)
447447

448448
try:
449449
# Create tunnel
450-
tunnel = await devbox.net.create_tunnel(port=8080)
450+
with pytest.warns(DeprecationWarning, match="create_tunnel is deprecated"):
451+
tunnel = await devbox.net.create_tunnel(port=8080)
451452
assert tunnel is not None
452453
assert tunnel.url is not None
453454
assert tunnel.port == 8080
454455
assert tunnel.devbox_id == devbox.id
455456

456457
# Remove tunnel
457-
await devbox.net.remove_tunnel(port=8080)
458+
with pytest.warns(DeprecationWarning, match="remove_tunnel is deprecated"):
459+
await devbox.net.remove_tunnel(port=8080)
458460
finally:
459461
await devbox.shutdown()
460462

tests/smoketests/sdk/test_devbox.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -444,14 +444,16 @@ def test_create_and_remove_tunnel(self, sdk_client: RunloopSDK) -> None:
444444

445445
try:
446446
# Create tunnel
447-
tunnel = devbox.net.create_tunnel(port=8080)
447+
with pytest.warns(DeprecationWarning, match="create_tunnel is deprecated"):
448+
tunnel = devbox.net.create_tunnel(port=8080)
448449
assert tunnel is not None
449450
assert tunnel.url is not None
450451
assert tunnel.port == 8080
451452
assert tunnel.devbox_id == devbox.id
452453

453454
# Remove tunnel
454-
devbox.net.remove_tunnel(port=8080)
455+
with pytest.warns(DeprecationWarning, match="remove_tunnel is deprecated"):
456+
devbox.net.remove_tunnel(port=8080)
455457
finally:
456458
devbox.shutdown()
457459

0 commit comments

Comments
 (0)