|
1 | 1 | import asyncio |
2 | 2 | import signal |
3 | | -from typing import List, Optional |
| 3 | +from typing import Any, List, Optional |
4 | 4 |
|
5 | 5 | import typer |
6 | 6 | from rich.table import Table |
|
18 | 18 | app = PlainTyper(help="Manage tunnels for exposing local services", no_args_is_help=True) |
19 | 19 | console = get_console() |
20 | 20 |
|
| 21 | +TunnelClient: Any = None |
| 22 | + |
| 23 | + |
| 24 | +def _tunnel_client_class() -> Any: |
| 25 | + if TunnelClient is not None: |
| 26 | + return TunnelClient |
| 27 | + from prime_tunnel.core.client import TunnelClient as loaded_tunnel_client |
| 28 | + |
| 29 | + return loaded_tunnel_client |
| 30 | + |
21 | 31 |
|
22 | 32 | def _format_tunnel_for_output(tunnel) -> dict: |
23 | 33 | created_at = tunnel.created_at |
@@ -157,9 +167,7 @@ def list_tunnels( |
157 | 167 | validate_output_format(output, console) |
158 | 168 |
|
159 | 169 | async def fetch_tunnels(): |
160 | | - from prime_tunnel.core.client import TunnelClient |
161 | | - |
162 | | - client = TunnelClient() |
| 170 | + client = _tunnel_client_class()() |
163 | 171 | try: |
164 | 172 | return await client.list_tunnels_page( |
165 | 173 | team_id=team_id, |
@@ -248,9 +256,7 @@ def tunnel_status( |
248 | 256 | """Get status of a specific tunnel.""" |
249 | 257 |
|
250 | 258 | async def fetch_status(): |
251 | | - from prime_tunnel.core.client import TunnelClient |
252 | | - |
253 | | - client = TunnelClient() |
| 259 | + client = _tunnel_client_class()() |
254 | 260 | try: |
255 | 261 | return await client.get_tunnel(tunnel_id) |
256 | 262 | finally: |
@@ -336,9 +342,7 @@ def stop_tunnel( |
336 | 342 | if all: |
337 | 343 |
|
338 | 344 | async def fetch_tunnel_ids() -> List[str]: |
339 | | - from prime_tunnel.core.client import TunnelClient |
340 | | - |
341 | | - client = TunnelClient() |
| 345 | + client = _tunnel_client_class()() |
342 | 346 | try: |
343 | 347 | scoped_team_id = team_id |
344 | 348 | if scoped_team_id is None: |
@@ -400,9 +404,7 @@ async def fetch_tunnel_ids() -> List[str]: |
400 | 404 | if labels: |
401 | 405 |
|
402 | 406 | async def validate_label_scope() -> None: |
403 | | - from prime_tunnel.core.client import TunnelClient |
404 | | - |
405 | | - client = TunnelClient() |
| 407 | + client = _tunnel_client_class()() |
406 | 408 | try: |
407 | 409 | scoped_user_id = client.config.user_id if only_mine else None |
408 | 410 | scoped_team_id = team_id if team_id is not None else client.config.team_id |
@@ -454,9 +456,7 @@ async def validate_label_scope() -> None: |
454 | 456 | return |
455 | 457 |
|
456 | 458 | async def delete_tunnels() -> tuple[List[str], List[dict], List[dict]]: |
457 | | - from prime_tunnel.core.client import TunnelClient |
458 | | - |
459 | | - client = TunnelClient() |
| 459 | + client = _tunnel_client_class()() |
460 | 460 | succeeded: List[str] = [] |
461 | 461 | not_found: List[dict] = [] |
462 | 462 | failed: List[dict] = [] |
|
0 commit comments