Modern Python client for Pritunl Web API
Project description
pritunl-webclient
A modern, fully-typed Python client for interacting with the Pritunl VPN API.
Features
- 🚀 Modern & Async-Ready: Built with
httpxfor 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 toFalsefor self-signed certificatestimeout: Request timeout in seconds (default: 10)username: Optional username for automatic login on first auth requirementpassword: Optional password for automatic login on first auth requirementtimeout: Request timeout in seconds (default: 10)
login(username: str, password: str) -> None
Authenticate with the Pritunl server.
Parameters:
username: Admin usernamepassword: 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 inPritunlError: 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 startserver_obj: Optional server object. If not provided, will be fetched automatically
Returns:
- Server response dictionary
Raises:
NotAuthenticated: If not logged inServerNotFound: If server doesn't existPritunlError: 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 stopserver_obj: Optional server object. If not provided, will be fetched automatically
Returns:
- Server response dictionary
Raises:
NotAuthenticated: If not logged inServerNotFound: If server doesn't existPritunlError: 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 inPritunlError: If request fails
close() -> None
Close the HTTP client connection.
Exceptions
PritunlError: Base exception for all Pritunl errorsAuthenticationError: Raised when authentication failsNotAuthenticated: Raised when an operation requires authenticationServerNotFound: 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=Falsewhen 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.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
486f9fcf42f8853774f0b8f924a9152d38999c0adee847ce87ddca50ac120bb0
|
|
| MD5 |
5582a5fb4566b3b1bc79a9ea883b9efd
|
|
| BLAKE2b-256 |
a1035e7f7cf4e80fdd0543b64ffb0c4ebfd3bd855ebc125bf603aae3d479be85
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
45bbbadc84ceb869760bd9c5ec81577c6f137976e4cd8cea0927908bf6c5c8ae
|
|
| MD5 |
7f17393a7d46bf8ffeac6cdc94b4b996
|
|
| BLAKE2b-256 |
716470b95fa55e24d26f0b54a3d43312145d66659ce6d24b8d6da77bd21f8b2a
|