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 PritunlClient

# Create a client instance
client = PritunlClient("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 PritunlClient

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

API Reference

PritunlClient

__init__(base_url: str, verify: bool = True, timeout: int = 10)

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)

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

Links

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.2.1.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.2.1-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pritunl_webclient-0.2.1.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"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.2.1.tar.gz
Algorithm Hash digest
SHA256 deafd57c3b5b722f8fe4c802c11ed76c52eafb171686bb3d287f0d3b1c669eea
MD5 e1735dd5e019a4a12f50dd6e832a6d75
BLAKE2b-256 0c4cdb498236e29bd898a39909ab1e970d85e160441c35ae277218fe4f648366

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pritunl_webclient-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 7.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"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.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a6d452caf8d781cb378e0fade4ec74a79c4fa246d4aec674aa64bfb7f5480600
MD5 39614f73ffc0c4bb4ea8f77e6658ba8b
BLAKE2b-256 93bbc3775048f98fe15e036024359ceb4eccfb6eb61bb9d5d1c239bc75af82e9

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