cl / colab_tunnel /__init__.py
rottenstuff's picture
Upload 13 files
c0e2219 verified
Raw
History Blame Contribute Delete
4.82 kB
"""
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
# Импорт модулей регистрирует провайдеров через @tunnel_provider
from . import _tunnels # noqa: F401
from . import _ssh # noqa: F401
# Прямой доступ к функциям провайдеров (обратная совместимость)
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__ = [
# Основной API
'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}'