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.10.0.tar.gz (15.9 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.10.0-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: exisone_client-0.10.0.tar.gz
  • Upload date:
  • Size: 15.9 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.10.0.tar.gz
Algorithm Hash digest
SHA256 239cbe07f1cd5fee13617df6306589403f53d6568d8471eeb16acc20cbe49462
MD5 52af464cd9bba97200ac28617049e276
BLAKE2b-256 a4bcbec5bd3b47dab99557585a54f3617e3496c14f649013c5b5a2e3e1be4bfe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for exisone_client-0.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b1f90cdb8aeec2e4f5e770bf41967c68233d7c0f7371c69e9047af75c0997577
MD5 b4c818749a421fb91bb95b4aa32e4457
BLAKE2b-256 ecea59b97aff4c22e245558bbcbfddecb4595fc50cc3be63eccd84a94b918f2f

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