| """
|
| colab-tunnel — утилиты для туннелирования веб-интерфейсов в Google Colab.
|
|
|
| Быстрый старт:
|
|
|
| from colab_tunnel import get_share_link
|
| link = get_share_link('srvus', 7860)
|
| print(link)
|
|
|
| Запуск всех провайдеров параллельно:
|
|
|
| from colab_tunnel import try_all
|
| print(try_all(7860))
|
|
|
| Бенчмарк — найти лучший провайдер прямо сейчас:
|
|
|
| from colab_tunnel import benchmark
|
| results = benchmark()
|
| print(results)
|
|
|
| Добавить собственный провайдер:
|
|
|
| from colab_tunnel import tunnel_provider
|
|
|
| @tunnel_provider('myprovider')
|
| def get_myprovider_url(port: int) -> str:
|
| ...
|
| """
|
| from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
|
| from ._config import WORK_FOLDER
|
| from ._logger import logger
|
| from ._registry import proxies_functions, tunnel_provider, list_providers, enable_provider, disable_provider
|
| from ._utils import run, download
|
|
|
|
|
| from . import _tunnels
|
| from . import _ssh
|
|
|
|
|
| from ._tunnels import (
|
| get_tmole_url,
|
| get_tunwg_url,
|
| get_cloudflared_url,
|
| get_localt_url,
|
| get_gradio_url,
|
| get_native_url,
|
| get_mmar_url,
|
| get_tunnelite_url,
|
| get_beeceptor_url,
|
| get_bore_url,
|
| get_boredigital_url,
|
| )
|
| from ._ssh import (
|
| get_optimistix_url,
|
| get_srvus_url,
|
| get_serveo_url,
|
| get_localhostrun_url,
|
| )
|
| from ._diagnostics import benchmark, TunnelBenchmarkResult
|
|
|
| __version__ = '1.1.0'
|
|
|
| __all__ = [
|
|
|
| 'get_share_link',
|
| 'try_all',
|
| 'benchmark',
|
| 'TunnelBenchmarkResult',
|
|
|
| 'disable_provider',
|
| 'enable_provider',
|
| 'list_providers',
|
| 'proxies_functions',
|
| 'tunnel_provider',
|
|
|
| 'get_tmole_url',
|
| 'get_tunwg_url',
|
| 'get_cloudflared_url',
|
| 'get_localt_url',
|
| 'get_gradio_url',
|
| 'get_native_url',
|
| 'get_mmar_url',
|
| 'get_tunnelite_url',
|
| 'get_beeceptor_url',
|
| 'get_bore_url',
|
| 'get_boredigital_url',
|
| 'get_optimistix_url',
|
| 'get_srvus_url',
|
| 'get_serveo_url',
|
| 'get_localhostrun_url',
|
|
|
| 'download',
|
| 'run',
|
| 'WORK_FOLDER',
|
| 'logger',
|
| ]
|
|
|
|
|
| def try_all(port: int) -> str:
|
| """
|
| Параллельно запускает все зарегистрированные провайдеры туннелей.
|
|
|
| В отличие от benchmark(), не измеряет метрики точно, зато возвращает
|
| все работающие ссылки в разы быстрее — за время самого медленного провайдера
|
| вместо суммы времён всех провайдеров.
|
|
|
| Args:
|
| port: Локальный порт для туннелирования.
|
|
|
| Returns:
|
| Строка со всеми полученными ссылками в формате 'провайдер: URL'.
|
| """
|
| results: list[str] = []
|
|
|
| with ThreadPoolExecutor(max_workers=len(proxies_functions)) as executor:
|
| futures = {
|
| executor.submit(func, port): name
|
| for name, func in proxies_functions.items()
|
| }
|
| for future in as_completed(futures):
|
| name = futures[future]
|
| try:
|
| url = future.result()
|
| results.append(f'{name}: {url}')
|
| except Exception as e:
|
| logger.warning(f'[try_all] {name}: {e}')
|
|
|
| return '\n'.join(results)
|
|
|
|
|
| def get_share_link(host: str, port: int) -> str:
|
| """
|
| Получает публичную ссылку на локальный порт через указанный туннель.
|
|
|
| Args:
|
| host: Имя провайдера или 'all' для параллельного запуска всех.
|
| Доступные провайдеры: list(proxies_functions.keys()).
|
| port: Локальный порт веб-интерфейса.
|
|
|
| Returns:
|
| Публичная URL-ссылка (или несколько строк при host='all').
|
| """
|
| if host in proxies_functions:
|
| return proxies_functions[host](port)
|
|
|
| if host == 'all':
|
| return try_all(port)
|
|
|
| available = ', '.join(proxies_functions.keys())
|
| return f'Провайдер "{host}" не найден. Доступные: {available}'
|
|
|