Skip to main content

Modern Python client for Pritunl Web API

Project description

pritunl-webclient

PyPI version Python Versions License: MIT Tests codecov

A modern, fully-typed Python client for interacting with the Pritunl VPN API.

Features

  • 🚀 Modern & Async-Ready: Built with httpx for both sync usage
  • 🔒 Type-Safe: Fully typed with comprehensive type hints
  • Well-Tested: 100% test coverage with 36+ unit tests
  • 🎯 Simple API: Clean, intuitive interface
  • 🔄 Auto-Reconnection: Automatic session management and re-authentication
  • 📦 Zero Config: Works out of the box with sensible defaults

Installation

Using uv (recommended)

uv add pritunl-webclient

Using pip

pip install pritunl-webclient

From source

git clone https://github.com/digglife/pritunl_webclient.git
cd pritunl_webclient
uv pip install -e .

Quick Start

from pritunl_webclient import Client

# Create a client instance
client = Client("https://vpn.example.com", verify=False)

# Login
client.login("admin", "password")

# List servers
servers = client.list_servers()
print(servers)

# Start a server
server_id = "ididid"
result = client.start_server(server_id)

# Check server status
status = client.check_server_status(server_id)
print(status)

# Stop a server
client.stop_server(server_id)

# Always close when done
client.close()

Using as a Context Manager

from pritunl_webclient import Client

with Client("https://vpn.example.com", verify=False) as client:
    client.login("admin", "password")
    servers = client.list_servers()
    print(servers)
# Client automatically closes

API Reference

Client

__init__(base_url: str, verify: bool = True, timeout: int = 10, username: Optional[str] = None, password: Optional[str] = None)

Create a new Pritunl client.

Parameters:

  • base_url: Base URL of the Pritunl web UI (e.g., https://vpn.example.com)
  • verify: Whether to verify TLS certificates. Set to False for self-signed certificates
  • timeout: Request timeout in seconds (default: 10)
  • username: Optional username for automatic login on first auth requirement
  • password: Optional password for automatic login on first auth requirement
  • timeout: Request timeout in seconds (default: 10)

login(username: str, password: str) -> None

Authenticate with the Pritunl server.

Parameters:

  • username: Admin username
  • password: Admin password

Raises:

  • AuthenticationError: If login fails

list_servers(page: int = 0) -> List[Dict[str, Any]]

List all servers.

Parameters:

  • page: Page number for pagination (default: 0)

Returns:

  • List of server dictionaries

Raises:

  • NotAuthenticated: If not logged in
  • PritunlError: If request fails

start_server(server_id: str, server_obj: Optional[Dict[str, Any]] = None) -> Dict[str, Any]

Start a server.

Parameters:

  • server_id: Server ID to start
  • server_obj: Optional server object. If not provided, will be fetched automatically

Returns:

  • Server response dictionary

Raises:

  • NotAuthenticated: If not logged in
  • ServerNotFound: If server doesn't exist
  • PritunlError: If operation fails

stop_server(server_id: str, server_obj: Optional[Dict[str, Any]] = None) -> Dict[str, Any]

Stop a server.

Parameters:

  • server_id: Server ID to stop
  • server_obj: Optional server object. If not provided, will be fetched automatically

Returns:

  • Server response dictionary

Raises:

  • NotAuthenticated: If not logged in
  • ServerNotFound: If server doesn't exist
  • PritunlError: If operation fails

check_server_status(server_id: str) -> List[Dict[str, Any]]

Check server host status.

Parameters:

  • server_id: Server ID to check

Returns:

  • List of host status dictionaries

Raises:

  • NotAuthenticated: If not logged in
  • PritunlError: If request fails

close() -> None

Close the HTTP client connection.

Exceptions

  • PritunlError: Base exception for all Pritunl errors
  • AuthenticationError: Raised when authentication fails
  • NotAuthenticated: Raised when an operation requires authentication
  • ServerNotFound: Raised when a server is not found

Development

Setup

# Clone the repository
git clone https://github.com/digglife/pritunl-webclient.git
cd pritunl-webclient

# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh

# Create virtual environment and install dependencies
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
uv pip install -e ".[dev]"

Running Tests

# Run all tests
pytest

# Run with coverage
pytest --cov=pritunl_webclient

# Run with verbose output
pytest -vv

# Run specific test file
pytest tests/test_client.py

Linting and Type Checking

# Run ruff linter
ruff check src tests

# Run ruff formatter
ruff format src tests

# Run type checker
mypy src

Building

# Build distribution packages
uv build

# This creates:
# - dist/pritunl_webclient-*.whl
# - dist/pritunl_webclient-*.tar.gz

Notes

  • If your Pritunl server uses a self-signed certificate, set verify=False when creating the client
  • The client automatically manages session cookies and CSRF tokens
  • Credentials are stored in memory for auto-reconnection on session expiry
  • All operations require authentication via login() first

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

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

pritunl_webclient-0.3.0.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

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

pritunl_webclient-0.3.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file pritunl_webclient-0.3.0.tar.gz.

File metadata

  • Download URL: pritunl_webclient-0.3.0.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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 pritunl_webclient-0.3.0.tar.gz
Algorithm Hash digest
SHA256 486f9fcf42f8853774f0b8f924a9152d38999c0adee847ce87ddca50ac120bb0
MD5 5582a5fb4566b3b1bc79a9ea883b9efd
BLAKE2b-256 a1035e7f7cf4e80fdd0543b64ffb0c4ebfd3bd855ebc125bf603aae3d479be85

See more details on using hashes here.

File details

Details for the file pritunl_webclient-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: pritunl_webclient-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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 pritunl_webclient-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 45bbbadc84ceb869760bd9c5ec81577c6f137976e4cd8cea0927908bf6c5c8ae
MD5 7f17393a7d46bf8ffeac6cdc94b4b996
BLAKE2b-256 716470b95fa55e24d26f0b54a3d43312145d66659ce6d24b8d6da77bd21f8b2a

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