Skip to main content

Python client SDK for ExisOne Software Activation System

Project description

ExisOne Python Client SDK

Official Python client SDK for the ExisOne Software Activation System.

Installation

pip install exisone-client

Quick Start

from exisone import ExisOneClient, ExisOneClientOptions

# Initialize the client
options = ExisOneClientOptions(
    base_url="https://www.exisone.com",
    access_token="your-api-token"
)
client = ExisOneClient(options)

# Generate a hardware fingerprint for this machine
hardware_id = client.generate_hardware_id()

# Activate a license
result = client.activate(
    activation_key="XXXX-XXXX-XXXX-XXXX",
    email="user@example.com",
    hardware_id=hardware_id,
    product_name="MyProduct"
)

if result.success:
    print("License activated successfully!")
else:
    print(f"Activation failed: {result.error_message}")

Features

  • License Activation - Activate licenses on specific hardware
  • License Validation - Validate licenses online or offline
  • Smart Validation - Auto-detects offline vs online keys with fallback
  • Hardware ID Generation - Cross-platform hardware fingerprinting
  • Offline Support - Validate licenses without internet using RSA signatures
  • Type Hints - Full type annotation support (PEP 561)

API Reference

ExisOneClientOptions

Configuration options for the client:

Option Type Description
base_url str Base URL for the ExisOne API (must use HTTPS)
access_token str API access token for authentication
offline_public_key str RSA public key (PEM) for offline validation
allowed_base_url_hosts list[str] Restrict base_url to specific hosts
timeout int Request timeout in seconds (default: 30)

ExisOneClient Methods

generate_hardware_id() -> str

Generate a cross-platform hardware fingerprint for this machine.

hardware_id = client.generate_hardware_id()
# Returns: "A1B2C3D4E5F6..." (64-char hex string)

activate(activation_key, email, hardware_id, product_name, version=None) -> ActivationResult

Activate a license on this machine.

result = client.activate(
    activation_key="XXXX-XXXX-XXXX-XXXX",
    email="user@example.com",
    hardware_id=hardware_id,
    product_name="MyProduct",
    version="1.0.0"  # Optional: your app version
)

if result.success:
    print(f"Server version: {result.server_version}")
else:
    print(f"Error: {result.error_code} - {result.error_message}")

validate(activation_key, hardware_id, product_name=None, version=None) -> ValidationResult

Validate a license online.

result = client.validate(
    activation_key="XXXX-XXXX-XXXX-XXXX",
    hardware_id=hardware_id
)

if result.is_valid:
    print(f"License valid until: {result.expiration_date}")
    print(f"Features: {', '.join(result.features)}")

validate_smart(key_or_code, hardware_id, product_name=None) -> SmartValidationResult

Smart validation that auto-detects offline vs online keys.

# Works with both online keys and offline codes
result = client.validate_smart(
    activation_key_or_offline_code="XXXX-XXXX-XXXX-XXXX",
    hardware_id=hardware_id
)

print(f"Valid: {result.is_valid}")
print(f"Was offline: {result.was_offline}")

deactivate(activation_key, hardware_id, product_name) -> bool

Deactivate a license.

success = client.deactivate(
    activation_key="XXXX-XXXX-XXXX-XXXX",
    hardware_id=hardware_id,
    product_name="MyProduct"
)

validate_offline(offline_code, hardware_id) -> OfflineValidationResult

Validate an offline activation code locally (requires offline_public_key).

options = ExisOneClientOptions(
    base_url="https://www.exisone.com",
    access_token="your-token",
    offline_public_key="""-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A...
-----END PUBLIC KEY-----"""
)
client = ExisOneClient(options)

result = client.validate_offline(
    offline_code="ABCD-EFGH-1234-5678-...",
    hardware_id=hardware_id
)

if result.is_valid:
    print(f"Product: {result.product_name}")
    print(f"Expires: {result.expiration_date}")

Environment Variables

Variable Description
EXISONE_BASEURL Default base URL if not specified in options

Error Handling

from exisone import ExisOneClient, ExisOneClientOptions
import requests

client = ExisOneClient(options)

try:
    result = client.validate(activation_key, hardware_id)
except requests.HTTPError as e:
    print(f"HTTP error: {e.response.status_code}")
except requests.RequestException as e:
    print(f"Network error: {e}")

Compatibility

  • Python 3.8+
  • Windows, Linux, macOS

Dependencies

  • requests - HTTP client
  • cryptography - RSA signature verification for offline validation

Documentation

License

MIT License - see LICENSE file for details.

Support

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

exisone_client-0.9.0.tar.gz (15.2 kB view details)

Uploaded Source

Built Distribution

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

exisone_client-0.9.0-py3-none-any.whl (15.1 kB view details)

Uploaded Python 3

File details

Details for the file exisone_client-0.9.0.tar.gz.

File metadata

  • Download URL: exisone_client-0.9.0.tar.gz
  • Upload date:
  • Size: 15.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for exisone_client-0.9.0.tar.gz
Algorithm Hash digest
SHA256 f44d6d451d2eb9b4c652a5e313b4856254e3162eb7fd3d0b2a8abd611e325a8c
MD5 e6a3da54e64ec57548fc15d3797bce6c
BLAKE2b-256 0f13349fed56eaca326be5fdfd32d92c20d6a54c97a1eb460f553bfbf321cfbc

See more details on using hashes here.

File details

Details for the file exisone_client-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: exisone_client-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 15.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for exisone_client-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b58cdba6f743067f0b08161323bd0356f283f4d01404ea7f72fa335b057c261f
MD5 07b8e036855c9e57b7388e0317d6b766
BLAKE2b-256 3e8bbf0d1bf2f34080a197e96caf20ff3086251f7ff6bab4a3eb196cc46915ea

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