Haina Deep OCR API Client SDK
Project description
HN Deep OCR Client
Python SDK for Haina Deep OCR API - PDF parsing and document processing made easy.
Features
- PDF file upload with automatic chunking (configurable chunk size)
- Parsing status polling with optimized timeouts
- Multi-format result generation (ZIP, JSON, Markdown, Image, Formula, Table)
- Comprehensive error handling with custom exception classes
- Built-in logging configuration
- Type hints for better IDE support
- Pydantic Settings for configuration management
- Connection pooling and HTTP session reuse
- Intelligent retry mechanism with exponential backoff
- Granular timeout configuration per operation type
- Full test coverage
Installation
pip install hn-deepocr-client
Or using uv:
uv add hn-deepocr-client
Quick Start
1. Get API Credentials
Apply for Access Key (AK) and Secret Key (SK) from Haina Platform.
2. Configure Environment Variables
Create a .env file in your project root:
AK=your_access_key_here
SK=your_secret_key_here
PRESIGNED_URL=https://open-sci-datahub.zero2x.org
Or use .env.example as a template:
cp .env.example .env
# Edit .env with your credentials
3. Basic Usage
from hn_deepocr_client import ParserPDF, load_config
config = load_config()
parser = ParserPDF(
ak=config.AK,
sk=config.SK,
presigned_url=config.PRESIGNED_URL,
)
data_id = parser.start(
file_name="document.pdf",
file_path="./document.pdf",
)
print(f"Parse completed! DataID: {data_id}")
Advanced Usage
Custom Configuration
from hn_deepocr_client import ParserPDF, load_config, ConfigurationError
try:
config = load_config()
parser = ParserPDF(ak=config.AK, sk=config.SK, presigned_url=config.PRESIGNED_URL)
data_id = parser.start("document.pdf", "./document.pdf")
except ConfigurationError as e:
print(f"Configuration error: {e}")
except UploadError as e:
print(f"Upload failed: {e}")
except ParseError as e:
print(f"Parse failed: {e}")
Generate Specific Formats Only
data_id = parser.start("document.pdf", "./document.pdf", generate_all_formats=False)
# Generate only formats you need
zip_url = parser.generate_zips(data_id, "zip")
json_url = parser.generate_zips(data_id, "json")
markdown_url = parser.generate_zips(data_id, "markdown")
Direct API Usage
from hn_deepocr_client import create_token
token = create_token(
ak="your_ak",
sk="your_sk",
url="https://api.example.com/upload",
request_body='{"file":"test.pdf"}',
)
API Reference
ParserPDF
Main class for PDF parsing operations.
Methods
__init__(ak: str, sk: str, presigned_url: str)- Initialize parserstart(file_name: str, file_path: str, generate_all_formats: bool = True) -> str- Start full parsing workflowget_parsing_status(data_id: str) -> int- Query parsing status (1=parsing, 2=success, 3=failed)generate_zips(data_id: str, file_type: str) -> str- Generate download link for specific format
Exception Classes
HNDeepOCRError- Base exception classConfigurationError- Configuration related errorsAuthenticationError- Authentication failuresUploadError- File upload failuresParseError- Parsing failures
Configuration
Configuration is managed via Pydantic Settings. Available options:
Core Configuration
| Option | Type | Default | Description |
|---|---|---|---|
| AK | str | (required) | Access Key |
| SK | str | (required) | Secret Key |
| PRESIGNED_URL | str | https://open-sci-datahub.zero2x.org | API base URL |
| LOG_DIR | str | logs | Log directory |
| LOG_FILE | str | pdf_parser.log | Log filename |
Network Configuration
| Option | Type | Default | Description |
|---|---|---|---|
| HN_DEEP_OCR_TIMEOUT_API | int | 30 | API call timeout (seconds) |
| HN_DEEP_OCR_TIMEOUT_UPLOAD | int | 300 | File upload timeout (seconds) |
| HN_DEEP_OCR_TIMEOUT_STATUS | int | 10 | Status query timeout (seconds) |
| HN_DEEP_OCR_TIMEOUT_MERGE | int | 60 | Merge operation timeout (seconds) |
| HN_DEEP_OCR_MAX_RETRIES_DEFAULT | int | 3 | Default retry count |
| HN_DEEP_OCR_MAX_RETRIES_UPLOAD | int | 5 | Upload retry count |
| HN_DEEP_OCR_BASE_DELAY | float | 1.0 | Base delay for retry backoff |
| HN_DEEP_OCR_CONNECTION_POOL_SIZE | int | 10 | Connection pool size |
| HN_DEEP_OCR_CONNECTION_MAXSIZE | int | 20 | Maximum connections per pool |
| HN_DEEP_OCR_PART_SIZE | int | 10485760 | File chunk size in bytes (10MB) |
All network configuration options can be set via environment variables with the HN_DEEP_OCR_ prefix or in your .env file.
Development
Installation
git clone https://github.com/yourusername/hn-deepocr-client.git
cd hn-deepocr-client
uv sync
Running Tests
uv run pytest
With coverage:
uv run pytest --cov=hn_deepocr_client
Code Quality
# Format code
uv run ruff format .
# Lint code
uv run ruff check .
# Fix linting issues
uv run ruff check --fix .
# Type check
uv run mypy .
Examples
See the examples/ directory for usage examples:
basic_usage.py- Basic usage exampleadvanced_usage.py- Advanced features and error handling
Documentation
For more detailed documentation, see:
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Support
- Documentation: https://github.com/yourusername/hn-deepocr-client
- Issues: https://github.com/yourusername/hn-deepocr-client/issues
- Email: support@haina.com
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 hn_deepocr_client-0.1.0.tar.gz.
File metadata
- Download URL: hn_deepocr_client-0.1.0.tar.gz
- Upload date:
- Size: 2.5 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","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 |
1e5f6d5c54661daa65a3f6c27f169f928978386eba054b16dff6416413fd7735
|
|
| MD5 |
84a10fd5b56470eb13dfec1926f97a76
|
|
| BLAKE2b-256 |
ef0543fca91eac9b06945e8e1f532bb73a2312a325ddcaa99f34b421451539e7
|
File details
Details for the file hn_deepocr_client-0.1.0-py3-none-any.whl.
File metadata
- Download URL: hn_deepocr_client-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","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 |
2020628f98a244a5afebbd448e363bed9f8af9f9e15ed830b542140c1996ba0d
|
|
| MD5 |
217627b6f50e4d331d6a3fa8ad487b43
|
|
| BLAKE2b-256 |
769d845b88c0c6b7351fc4a3465fcd91bd445ce7ebf159cd9bf81adbdb94746c
|