Skip to main content

Python client for HipHops Hook

Project description

HipHops Hook Python Client

Python client library for integrating with HipHops Hook.

Installation

pip install hiphops-hook

The package will automatically download the appropriate Hook binary for your platform during installation.

Quick Start

from hiphops_hook import license

# Get license information
info = license()
print(info)

Usage

Basic Usage

from hiphops_hook import license

# Get license information
license_info = license()
print(f"License verified: {license_info['verified']}")

Error Handling

from hiphops_hook import license, HookError, RequestError

try:
    info = license()
except RequestError as e:
    print(f"Request failed: {e}")
except HookError as e:
    print(f"Hook error: {e}")

API Reference

Functions

license() -> LicenseInfo

Get license information using the global client instance.

Returns:

  • LicenseInfo: Dictionary containing license information

Raises:

  • RequestError: If the request fails
  • ResponseError: If the response is invalid
  • ServerStartupError: If the server fails to start

Types

LicenseInfo

TypedDict containing license information:

class LicenseInfo(TypedDict):
    verified: bool
    verify_failures: List[str]
    license: Optional[Dict[str, Any]]
    hiphops: Dict[str, str]
    # Additional fields may be present

Exceptions

  • HookError: Base exception for all Hook-related errors
  • BinaryNotFoundError: Raised when the Hook binary cannot be found
  • ServerStartupError: Raised when the Hook server fails to start
  • ServerTimeoutError: Raised when the server startup times out
  • RequestError: Raised when an HTTP request fails
  • ResponseError: Raised when the server returns an invalid response
  • DownloadError: Raised when binary download fails

Configuration

Environment Variables

  • HIPHOPS_HOOK_BIN: Override the path to the Hook binary
  • SKIP_HOOK_DOWNLOAD=true: Force skip binary download

Development Mode

When SKIP_HOOK_DOWNLOAD=true, the client will skip downloading the Hook binary during installation. This is useful for development environments where you want to use a custom binary.

Platform Support

The client supports the same platforms as the Hook binary:

  • macOS: hook-darwin-amd64, hook-darwin-arm64
  • Linux: hook-linux-amd64, hook-linux-arm64
  • Windows: hook-windows-amd64.exe

Development

Local Development (Source Code)

Setting Up Development Environment

# Clone the repository
git clone https://github.com/hiphops-io/hook.git
cd hook/clients/python

# Create a virtual environment (recommended)
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install development dependencies
pip install -e ".[dev]"

Testing Locally (Without Installation)

Test the source code directly without installing the package:

# Set PYTHONPATH and run the test script
PYTHONPATH=. python scripts/test.py

# Test with custom binary path
HIPHOPS_HOOK_BIN=/path/to/hook/binary PYTHONPATH=. python scripts/test.py

# Skip binary download during development
SKIP_HOOK_DOWNLOAD=true PYTHONPATH=. python scripts/test.py

# Test platform detection
PYTHONPATH=. python -c "from hiphops_hook.platform_utils import get_platform_info, get_binary_name; print(f'Platform: {get_platform_info()}'); print(f'Binary: {get_binary_name()}')"

# Test with license token (if available)
LICENSE_TOKEN=your_token_here PYTHONPATH=. python scripts/test.py

Installing for Local Development

# Install in development mode (editable install)
pip install -e .

# Install with development dependencies
pip install -e ".[dev]"

# Then test the installed package
python scripts/test.py

Note: If you encounter network/SSL issues with pip, you can work around them by:

  1. Using the PYTHONPATH approach for testing (shown above)
  2. Installing dependencies individually if needed
  3. Using --no-build-isolation flag: pip install -e . --no-build-isolation

Binary Management During Development

# Skip binary download during development
export SKIP_HOOK_DOWNLOAD=true
pip install -e .

# Use a custom binary path
export HIPHOPS_HOOK_BIN=/path/to/your/hook/binary
pip install -e .

Package Building and Distribution

Building the Package

python setup.py sdist

This creates a source distribution in the dist/ directory:

  • hiphops-hook-<version>.tar.gz - Ready for distribution

Testing the Pip Package

Test Installation from Built Package

# Create a clean test environment
python -m venv test_env
source test_env/bin/activate  # On Windows: test_env\Scripts\activate

# Install from built package
pip install dist/hiphops-hook-*.tar.gz

# Test the installed package
python -c "from hiphops_hook import license; print('Package installed successfully')"

# Run comprehensive test
python -c "
from hiphops_hook import license
try:
    info = license()
    print('✅ Package works correctly')
    print(f'License info: {info}')
except Exception as e:
    print(f'❌ Package test failed: {e}')
"

# Test with license token (if available)
LICENSE_TOKEN=your_token_here python -c "
from hiphops_hook import license
try:
    info = license()
    print('✅ License verification test:')
    print(f'Verified: {info.get(\"verified\", False)}')
    print(f'License info: {info}')
except Exception as e:
    print(f'❌ License test failed: {e}')
"

# Clean up
deactivate
rm -rf test_env

Test Installation from PyPI (Future)

Once published to PyPI:

# Create clean environment
python -m venv test_pypi
source test_pypi/bin/activate

# Install from PyPI
pip install hiphops-hook

# Test functionality
LICENSE_TOKEN=your_token_here python -c "
from hiphops_hook import license
info = license()
print('PyPI package works correctly')
print(info)
"

# Test with different environment variables
SKIP_HOOK_DOWNLOAD=true pip install --force-reinstall hiphops-hook
HIPHOPS_HOOK_BIN=/custom/path python -c "from hiphops_hook import license"

# Clean up
deactivate
rm -rf test_pypi

Testing Binary Download Process

# Test automatic binary download
python -c "
import os
import subprocess
import tempfile

# Create temporary directory
with tempfile.TemporaryDirectory() as tmpdir:
    # Install package in clean environment
    env = os.environ.copy()
    env['VIRTUAL_ENV'] = tmpdir

    result = subprocess.run([
        'pip', 'install', 'dist/hiphops-hook-*.tar.gz'
    ], env=env, capture_output=True, text=True)

    if 'Successfully downloaded hook binary' in result.stdout:
        print('✅ Binary download works correctly')
    else:
        print('❌ Binary download may have issues')
        print(result.stdout)
        print(result.stderr)
"

Development Workflow

Complete Development Cycle

# 1. Make code changes
# Edit files in hiphops_hook/

# 2. Test locally without installation
PYTHONPATH=. python scripts/test.py

# 3. Test with editable installation
pip install -e .
python scripts/test.py

# 4. Build package
python setup.py sdist

# 5. Test built package in clean environment
python -m venv test_clean
source test_clean/bin/activate
pip install dist/hiphops-hook-*.tar.gz
python -c "from hiphops_hook import license; print(license())"
deactivate
rm -rf test_clean

# 6. Code quality checks
black hiphops_hook/ scripts/
flake8 hiphops_hook/ scripts/
mypy hiphops_hook/

Debugging

Enable verbose logging:

import logging
logging.basicConfig(level=logging.DEBUG)

from hiphops_hook import license
info = license()

Code Quality Tools

# Format code (requires black)
pip install black
black hiphops_hook/ scripts/

# Lint code (requires flake8)
pip install flake8
flake8 hiphops_hook/ scripts/

# Type checking (requires mypy)
pip install mypy
mypy hiphops_hook/

# Install all quality tools
pip install black flake8 mypy

Publishing to PyPI

Prerequisites

  1. PyPI Account: Create account at pypi.org
  2. Trusted Publisher: Configure trusted publisher for hiphops-hook on PyPI
  3. GitHub Environment: Create pypi environment in repository settings

Automated Publishing (Recommended)

Publishing is automated via GitHub Actions and triggered during the release process:

  1. Individual PyPI publish: Use publish-pypi.yml workflow
  2. Automatic release publishing: Both publish-npm.yml and publish-pypi.yml are triggered automatically during releases

The workflow automatically:

  • Sets up Python environment
  • Installs dependencies (skips binary download)
  • Builds the package
  • Publishes to PyPI using trusted publishing (no API tokens needed)

Manual Publishing (Development)

For testing or manual releases:

# Install publishing tools
pip install build twine

# Build the package
python setup.py sdist

# Check the package (optional but recommended)
twine check dist/*

# Publish to TestPyPI (for testing)
twine upload --repository testpypi dist/*

# Publish to PyPI (production)
twine upload dist/*

Version Management

  • Python package version is synchronized with npm package
  • Version is set in pyproject.toml and setup.py
  • Must match the Hook binary version for compatibility

Support

For issues and questions, please visit: https://github.com/hiphops-io/hook/issues

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

hiphops_hook-0.0.1a37.tar.gz (13.1 kB view details)

Uploaded Source

Built Distributions

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

hiphops_hook-0.0.1a37-py3-none-win_amd64.whl (3.0 MB view details)

Uploaded Python 3Windows x86-64

hiphops_hook-0.0.1a37-py3-none-manylinux_2_17_x86_64.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

hiphops_hook-0.0.1a37-py3-none-manylinux_2_17_aarch64.whl (2.7 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

hiphops_hook-0.0.1a37-py3-none-macosx_11_0_x86_64.whl (3.0 MB view details)

Uploaded Python 3macOS 11.0+ x86-64

hiphops_hook-0.0.1a37-py3-none-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file hiphops_hook-0.0.1a37.tar.gz.

File metadata

  • Download URL: hiphops_hook-0.0.1a37.tar.gz
  • Upload date:
  • Size: 13.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for hiphops_hook-0.0.1a37.tar.gz
Algorithm Hash digest
SHA256 6881719058c2c9be12a6552fc2df5c295b65fc33ac02fea27244ebc0a080e84a
MD5 82bab390190f25445122a7749666fbf4
BLAKE2b-256 3949705980dc07dfb4cb22b3e8b58dbfe754a83ff827669b63fcd42dbbf81bce

See more details on using hashes here.

Provenance

The following attestation bundles were made for hiphops_hook-0.0.1a37.tar.gz:

Publisher: publish-pypi.yml on hiphops-io/hook

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hiphops_hook-0.0.1a37-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for hiphops_hook-0.0.1a37-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 b5f30fed14584db756bef2da813b87f3315729391278ba53e742df54d48ac8ea
MD5 c4066b866b9a7797d83a8aa14c23f81a
BLAKE2b-256 7dde30861e8ce8bbe922b937ff498c5524f38d6b9331acae8c3a91bae1fcb65d

See more details on using hashes here.

Provenance

The following attestation bundles were made for hiphops_hook-0.0.1a37-py3-none-win_amd64.whl:

Publisher: publish-pypi.yml on hiphops-io/hook

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hiphops_hook-0.0.1a37-py3-none-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for hiphops_hook-0.0.1a37-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 3fd1f4592985417e4c20af5e3fd9b16c620653fa8e743faf80448aa19f69ddf7
MD5 c280db7ed7f61c0ae5061f8213366e47
BLAKE2b-256 050b112d307e304ae1dbac146c3afd8559fbba71c88a01a27f56ae244d8eab43

See more details on using hashes here.

Provenance

The following attestation bundles were made for hiphops_hook-0.0.1a37-py3-none-manylinux_2_17_x86_64.whl:

Publisher: publish-pypi.yml on hiphops-io/hook

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hiphops_hook-0.0.1a37-py3-none-manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for hiphops_hook-0.0.1a37-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 36c67828e8050ab4ea4d1730641045b9a5b351c190fce53a6e916498ee8a06a3
MD5 669f99a779ebe5682333059d22dc3446
BLAKE2b-256 68c076df671b08d593d481e9e95518da417b81d33ddcbc6c31668c669bb99298

See more details on using hashes here.

Provenance

The following attestation bundles were made for hiphops_hook-0.0.1a37-py3-none-manylinux_2_17_aarch64.whl:

Publisher: publish-pypi.yml on hiphops-io/hook

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hiphops_hook-0.0.1a37-py3-none-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for hiphops_hook-0.0.1a37-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 891480cd49cef3f9e4591f0fe172950e10e51a499f92020792c7e873d81b5e23
MD5 5331ad5336a86516b4da407b1ee5d337
BLAKE2b-256 f303c4a133909f1857d49a05d0d969501afdd07bb4860b49721b338dd5d51d90

See more details on using hashes here.

Provenance

The following attestation bundles were made for hiphops_hook-0.0.1a37-py3-none-macosx_11_0_x86_64.whl:

Publisher: publish-pypi.yml on hiphops-io/hook

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hiphops_hook-0.0.1a37-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for hiphops_hook-0.0.1a37-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 273ab60380fb6fea6fb4d1191b6ba1516c09dca34bced06d3ef60417b6818041
MD5 3d1fc30564998db7926f15fc095109b9
BLAKE2b-256 f59f0dc55bbb285a5e276882e535f45daace6241b24ff6e37e8710a6b931c75e

See more details on using hashes here.

Provenance

The following attestation bundles were made for hiphops_hook-0.0.1a37-py3-none-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on hiphops-io/hook

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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