Skip to main content

Data Agent Tunnel client - proxy local web services to public network

Project description

Data Agent Tunnel Client

Proxy local web services to the public network through Data Agent Tunnel.

Installation

pip install data-agent-tunnel-client

# or with uv
uv add data-agent-tunnel-client

Quick Start

Option 1: Simple Integration (Recommended)

The easiest way to connect - runs in a background thread, perfect for Flask/Django:

from flask import Flask
from data_agent_tunnel_client import connect_tunnel

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello from Flask!"

if __name__ == "__main__":
    # Start tunnel in background
    connect_tunnel(
        tunnel_url="wss://...",
        local_url="http://localhost:5000",
        secret_key="your-secret-key",  # optional
        home_path="/initial_path",     # optional
    )

    # Start Flask
    app.run(port=5000)

Option 2: FastAPI Integration

For FastAPI, use create_tunnel_lifespan():

from fastapi import FastAPI
from data_agent_tunnel_client import create_tunnel_lifespan, get_tunnel_client

lifespan=create_tunnel_lifespan(
    tunnel_url="wss://...",
    local_url="http://localhost:8000",
    secret_key="your-secret-key",  # optional
    home_path="/dashboard",        # optional
)

app = FastAPI(lifespan=lifespan)

@app.get("/")
async def root():
    return {"message": "Hello from FastAPI!"}

@app.get("/tunnel-info")
async def tunnel_info():
    client = get_tunnel_client()
    return {"public_url": client.public_url if client else None}

API Reference

connect_tunnel()

Quick start function for synchronous frameworks:

from data_agent_tunnel_client import connect_tunnel

runner = connect_tunnel(
    tunnel_url="wss://...",      # Tunnel WebSocket URL
    local_url="http://...",      # Local service URL
    secret_key="",               # Auth key (optional)
    home_path="/dashboard",      # Initial path appended to public URL (optional)
)

# Access connection info
print(runner.public_url)
print(runner.connected_session_id)
print(runner.is_connected)

home_path parameter:

The home_path parameter specifies the initial path to display after tunnel connection. This is useful when your app's entry point is not the root path.

# Example: If public_url is https://xxx.com?session=abc123&_tunnel_path=,
# With home_path="/dashboard", the displayed URL will be:
# https://xxx.com?session=abc123&_tunnel_path=/dashboard

create_tunnel_lifespan()

Create a lifespan context manager for FastAPI:

from data_agent_tunnel_client import create_tunnel_lifespan

lifespan = create_tunnel_lifespan(
    tunnel_url="wss://...",      # Tunnel WebSocket URL
    local_url="http://...",      # Local service URL
    secret_key="",               # Auth key (optional)
    home_path="/",               # Home path for display (optional)
    on_connect=None,             # Connect callback (async or sync)
    on_disconnect=None,          # Disconnect callback (async or sync)
)

app = FastAPI(lifespan=lifespan)

Use get_tunnel_client() to access the client instance in your routes.

TunnelRunner

For more control over the background runner:

from data_agent_tunnel_client import TunnelRunner

runner = TunnelRunner(
    tunnel_url="wss://...",
    local_url="http://...",
    secret_key="",
    home_path="/",
    on_connect=lambda client: print(f"Connected: {client.public_url}"),
    on_disconnect=lambda client: print("Disconnected"),
)

runner.start()  # Non-blocking

TunnelClient

Low-level async client:

from data_agent_tunnel_client import TunnelClient

client = TunnelClient(
    tunnel_url: str,                    # Tunnel WebSocket URL
    local_url: str,                     # Local service URL
    secret_key: str = "",               # Auth key (optional)
    session_id: str = "",               # Session ID (optional)
    reconnect: bool = True,             # Auto reconnect on disconnect
    reconnect_interval: float = 5.0,    # Reconnect interval (seconds)
    ping_interval: float = 30.0,        # Heartbeat interval (seconds)
    request_timeout: float = 300.0,     # Request timeout (seconds)
    max_concurrent_requests: int = 100, # Max concurrent requests
    on_connect: Callable = None,        # Connect callback (async)
    on_disconnect: Callable = None,     # Disconnect callback (async)
)

# Properties
client.public_url           # Public URL
client.connected_session_id # Session ID
client.is_connected         # Connection status

# Methods
await client.connect()      # Connect and start proxying
await client.disconnect()   # Disconnect

Proxy Support

The client automatically detects and uses system proxy settings (http_proxy, https_proxy, socks_proxy, etc.).

  • If proxy is configured, it tries to connect via proxy first
  • If proxy connection fails, it falls back to direct connection
  • Use disable_proxy=True to skip proxy entirely

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

data_agent_tunnel_client-0.1.3.tar.gz (15.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

data_agent_tunnel_client-0.1.3-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

Details for the file data_agent_tunnel_client-0.1.3.tar.gz.

File metadata

  • Download URL: data_agent_tunnel_client-0.1.3.tar.gz
  • Upload date:
  • Size: 15.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for data_agent_tunnel_client-0.1.3.tar.gz
Algorithm Hash digest
SHA256 48a5229735074c410168c0493d0927919358448f6f1fa7d0c5e9c0aaa80b0cd4
MD5 16f01ccd77d55cadf8645f4e64f82879
BLAKE2b-256 65d654f64370ee82f96f953499b6e54617da1df9d2f3ad6de407729f50e47568

See more details on using hashes here.

File details

Details for the file data_agent_tunnel_client-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: data_agent_tunnel_client-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 16.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.16 {"installer":{"name":"uv","version":"0.9.16","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for data_agent_tunnel_client-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 58388868d8b8cb73653a300df31f2b1e170bf4ec5e2c09b738f1ce51c452f77a
MD5 b1996f1846d578df6fe0c8d69eaaa832
BLAKE2b-256 9a0e3e28e02ba5e169f61be7787447a809868b2775609d67d31f1c8e2fedf9f2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page