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.7.0.tar.gz (13.7 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.7.0-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: exisone_client-0.7.0.tar.gz
  • Upload date:
  • Size: 13.7 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.7.0.tar.gz
Algorithm Hash digest
SHA256 27e519c5dfd7f32e67566ee1bf6951fd395937aed8739f178ff6cfaa884df606
MD5 c16675de9fc2f7ad0a3625d6599602bd
BLAKE2b-256 1807540654cfac4aae8b507005573c7f62c0ebca82ca4fc5f6207a64818c1390

See more details on using hashes here.

File details

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

File metadata

  • Download URL: exisone_client-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 13.6 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.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d50cf63103e30553f6ca922d9cd79af8eccd94e77c1beec74fa30d0552d19eb7
MD5 b7ec1c277cef1c7d85aba7bd9a9ebd0e
BLAKE2b-256 27d8d77df61e21b07efb844d92833c0022afaae95b2b4bebef46c7cb944cea89

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