ptsandbox


Nameptsandbox JSON
Version 5.0.5 PyPI version JSON
download
home_pageNone
SummaryAsync API connector for PT Sandbox instances
upload_time2025-08-01 09:28:10
maintainerNone
docs_urlNone
authorAlexey Kolesnikov, Dmitry Zotov, PT ESC Malware Detection
requires_python<4.0,>=3.11
licenseNone
keywords ptsandbox sandbox
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # PTSandbox Python Client

![PTSandbox Logo](https://raw.githubusercontent.com/Security-Experts-Community/py-ptsandbox/refs/heads/main/docs/assets/logo_with_text.svg)

<p align="center">
    <em>Full-featured async Python client for PT Sandbox instances</em>
</p>

<p align="center">
    <a href="https://pypi.org/project/ptsandbox"><img src="https://badgen.net/pypi/v/ptsandbox" alt="PyPI Version"></a>
    <a href="https://pypi.org/project/ptsandbox"><img src="https://badgen.net/pypi/python/ptsandbox" alt="Python Versions"></a>
    <a href="https://github.com/Security-Experts-Community/py-ptsandbox/blob/main/LICENSE"><img src="https://badgen.net/github/license/Security-Experts-Community/py-ptsandbox" alt="License"></a>
</p>

---

**Documentation**: <a href="https://security-experts-community.github.io/py-ptsandbox" target="_blank">https://security-experts-community.github.io/py-ptsandbox</a>

**Source Code**: <a href="https://github.com/Security-Experts-Community/py-ptsandbox" target="_blank">https://github.com/Security-Experts-Community/py-ptsandbox</a>

---

## 📖 Overview

PTSandbox Python Client is a modern async library for interacting with PT Sandbox through API. The library provides a convenient interface for submitting files and URLs for analysis, retrieving scan results, system management, and much more.

### ✨ Key Features

- **Fully Asynchronous** — all operations are performed in a non-blocking manner
- **Fully Typed** — complete type hints support for better development experience
- **Dual API Support** — both Public API and UI API for administrative tasks
- **Flexible File Upload** — support for various input data formats
- **High Performance** — optimized HTTP requests with connection pooling
- **Error Resilience** — built-in error handling and retry logic
- **Modern Python** — requires Python 3.11+

## 📦 Installation

### PyPI

```bash
python3 -m pip install ptsandbox
```

### uv (recommended)

```bash
uv add ptsandbox
```

### Nix

```bash
# Coming soon
```

## 🔧 Requirements

- Python 3.11+
- aiohttp 3.11.15+
- pydantic 2.11.1+
- loguru 0.7.3+

## 🚀 Quick Start

### Basic File Scanning

```python
import asyncio
from pathlib import Path
from ptsandbox import Sandbox, SandboxKey

async def main():
    # Create connection key
    key = SandboxKey(
        name="test-key-1",
        key="<TOKEN_FROM_SANDBOX>",
        host="10.10.10.10",
    )
    
    # Initialize client
    sandbox = Sandbox(key)
    
    # Submit file for analysis
    task = await sandbox.create_scan(Path("suspicious_file.exe"))
    
    # Wait for analysis completion
    result = await sandbox.wait_for_report(task)
    
    if (report := result.get_long_report()) is not None:
        print(report.result.verdict)

asyncio.run(main())
```

### URL Scanning

```python
import asyncio
from ptsandbox import Sandbox, SandboxKey

async def main():
    key = SandboxKey(
        name="test-key-1", 
        key="<TOKEN_FROM_SANDBOX>",
        host="10.10.10.10"
    )
    
    sandbox = Sandbox(key)
    
    # Scan suspicious URL
    task = await sandbox.create_url_scan("http://malware.com/malicious-file")
    result = await sandbox.wait_for_report(task)
    
    if (report := result.get_long_report()) is not None:
        print(report.result.verdict)

asyncio.run(main())
```

### Working with UI API (Administrative Functions)

```python
import asyncio
from ptsandbox import Sandbox, SandboxKey

async def main():
    key = SandboxKey(
        name="test-key-1",
        key="<TOKEN_FROM_SANDBOX>", 
        host="10.10.10.10",
        ui=SandboxKey.UI(
            login="login",
            password="password"
        )
    )
    
    sandbox = Sandbox(key)
    
    # Authorize in UI API
    await sandbox.ui.authorize()
    
    # Get system information
    system_info = await sandbox.ui.get_system_settings()
    print(f"System version: {system_info.data}")
    
    # Get tasks status
    tasks = await sandbox.ui.get_tasks()
    print(f"Active tasks: {len(tasks.tasks)}")

asyncio.run(main())
```

## 🛠️ Core Features

### Public API

- **[File Scanning](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/scanning/default-scan/)** — submit files of any type for analysis
- **[URL Scanning](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/scanning/scan/#url)** — check web links for threats  
- **[Advanced Scanning](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/scanning/scan/#advanced-scan)** — configure analysis parameters (VM image, duration, commands)
- **[Rescan Analysis](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/scanning/rescan/)** — analyze saved traces without re-execution
- **[File Downloads](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/download-files/)** — retrieve original files and artifacts by hash
- **[System Information](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/system/)** — get version and health status
- **[Email Analysis](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/email/)** — extract and analyze email headers
- **[Source Checking](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/scanning/source/)** — specialized source file analysis

### UI API (Administrative)

- **[Token Management](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/api-tokens/)** — create and manage API keys
- **[Entry Points](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/entry-points/)** — configure automatic processing rules
- **[Task Management](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/tasks/)** — view and manage scan queue
- **[System Settings](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/system/)** — configure sandbox parameters
- **[License Management](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/license/)** — manage licenses and restrictions
- **[Cluster Monitoring](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/cluster/)** — monitor cluster node status
- **[Component Management](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/components/)** — manage system modules
- **[Download Files](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/download-files/)** — download files and artifacts via UI API
- **[Artifacts](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/artifacts/)** — work with scan results and artifacts
- **[Antivirus Engines](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/antiviruses/)** — manage AV engine integrations
- **[Queue Management](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/baqueue/)** — monitor and manage scan queues
- **[Authorization](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/authorization/)** — handle UI API authentication

## 🔄 Advanced Usage

### Batch Scanning

```python
import asyncio
from pathlib import Path
from ptsandbox import Sandbox, SandboxKey

async def scan_multiple_files(files: list[Path]):
    sandbox = Sandbox(SandboxKey(...))
    
    # Submit all files in parallel
    tasks = []
    for file in files:
        task = await sandbox.create_scan(file, async_result=True)
        tasks.append(task)
    
    # Wait for all tasks to complete
    results = []
    for task in tasks:
        result = await sandbox.wait_for_report(task)
        results.append(result)
    
    return results
```

### Custom Scan Configuration

```python
from ptsandbox.models import SandboxBaseScanTaskRequest, SandboxOptions

# Configure scan options
options = SandboxBaseScanTaskRequest.Options(
    sandbox=SandboxOptions(
        image_id="ubuntu-jammy-x64",     # VM image selection
        analysis_duration=300,           # Analysis time in seconds
        custom_command="python3 {file}", # Custom execution command
        save_video=True,                 # Save process video
    )
)

task = await sandbox.create_scan(file, options=options)
```

### Advanced File Analysis

```python
from ptsandbox.models import SandboxOptionsAdvanced

# Advanced scanning with custom rules and extra files
task = await sandbox.create_advanced_scan(
    Path("malware.exe"),
    extra_files=[Path("config.ini"), Path("data.txt")],  # Additional files
    sandbox=SandboxOptionsAdvanced(
        image_id="win10-x64",
        analysis_duration=600,
        custom_command="python3 {file}",  # Custom execution command
        save_video=True,                  # Save process video
        mitm_enabled=True,                # Enable traffic decryption
        bootkitmon=False                  # Disable bootkitmon analysis
    )
)
```

### Error Handling

```python
from ptsandbox.models import (
    SandboxUploadException, 
    SandboxWaitTimeoutException,
    SandboxTooManyErrorsException
)

try:
    task = await sandbox.create_scan(large_file, upload_timeout=600)
    result = await sandbox.wait_for_report(task, wait_time=300)
except SandboxUploadException as e:
    print(f"Upload error: {e}")
except SandboxWaitTimeoutException as e:
    print(f"Timeout waiting for result: {e}")
except SandboxTooManyErrorsException as e:
    print(f"Too many errors occurred: {e}")
```

### Stream File Downloads

```python
# Download large files as stream
async for chunk in sandbox.get_file_stream("sha256_hash"):
    # Process chunk by chunk
    process_chunk(chunk)

# Get email headers
async for header_chunk in sandbox.get_email_headers(email_file):
    print(header_chunk.decode())
```

## 🔧 Configuration

### Proxy Support

```python
sandbox = Sandbox(
    key, 
    proxy="http://proxy.company.com:8080"
)
```

### Custom Timeouts

```python
from aiohttp import ClientTimeout

sandbox = Sandbox(
    key,
    default_timeout=ClientTimeout(
        total=600,
        connect=60,
        sock_read=300
    )
)
```

### Upload Semaphore Control

```python
# Limit concurrent uploads
sandbox = Sandbox(
    key,
    upload_semaphore_size=3  # Max 3 concurrent uploads
)
```

## 🤝 Contributing

We welcome contributions to the project! Whether you're fixing bugs, adding features, improving documentation, or helping other users, every contribution is valuable.

Please read our [Contributing Guide](CONTRIBUTING.md) for detailed information.

## 📋 License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.

## 📞 Support

- **Documentation**: [https://security-experts-community.github.io/py-ptsandbox](https://security-experts-community.github.io/py-ptsandbox)
- **Issues**: [GitHub Issues](https://github.com/Security-Experts-Community/py-ptsandbox/issues)

## 🙏 Acknowledgments

- **PT ESC Malware Detection** — PT Sandbox development team
- **Security Experts Community** — information security experts community
- All project contributors

---

<p align="center">
    <img width="60%" src="https://raw.githubusercontent.com/Security-Experts-Community/py-ptsandbox/refs/heads/main/docs/assets/pic_right.svg">
</p>
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "ptsandbox",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.11",
    "maintainer_email": null,
    "keywords": "ptsandbox, sandbox",
    "author": "Alexey Kolesnikov, Dmitry Zotov, PT ESC Malware Detection",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/3f/e0/192ae8080ad4f75147a3156aa4bb6f9bca554b8161bab0f656d1398a70f3/ptsandbox-5.0.5.tar.gz",
    "platform": null,
    "description": "# PTSandbox Python Client\n\n![PTSandbox Logo](https://raw.githubusercontent.com/Security-Experts-Community/py-ptsandbox/refs/heads/main/docs/assets/logo_with_text.svg)\n\n<p align=\"center\">\n    <em>Full-featured async Python client for PT Sandbox instances</em>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://pypi.org/project/ptsandbox\"><img src=\"https://badgen.net/pypi/v/ptsandbox\" alt=\"PyPI Version\"></a>\n    <a href=\"https://pypi.org/project/ptsandbox\"><img src=\"https://badgen.net/pypi/python/ptsandbox\" alt=\"Python Versions\"></a>\n    <a href=\"https://github.com/Security-Experts-Community/py-ptsandbox/blob/main/LICENSE\"><img src=\"https://badgen.net/github/license/Security-Experts-Community/py-ptsandbox\" alt=\"License\"></a>\n</p>\n\n---\n\n**Documentation**: <a href=\"https://security-experts-community.github.io/py-ptsandbox\" target=\"_blank\">https://security-experts-community.github.io/py-ptsandbox</a>\n\n**Source Code**: <a href=\"https://github.com/Security-Experts-Community/py-ptsandbox\" target=\"_blank\">https://github.com/Security-Experts-Community/py-ptsandbox</a>\n\n---\n\n## \ud83d\udcd6 Overview\n\nPTSandbox Python Client is a modern async library for interacting with PT Sandbox through API. The library provides a convenient interface for submitting files and URLs for analysis, retrieving scan results, system management, and much more.\n\n### \u2728 Key Features\n\n- **Fully Asynchronous** \u2014 all operations are performed in a non-blocking manner\n- **Fully Typed** \u2014 complete type hints support for better development experience\n- **Dual API Support** \u2014 both Public API and UI API for administrative tasks\n- **Flexible File Upload** \u2014 support for various input data formats\n- **High Performance** \u2014 optimized HTTP requests with connection pooling\n- **Error Resilience** \u2014 built-in error handling and retry logic\n- **Modern Python** \u2014 requires Python 3.11+\n\n## \ud83d\udce6 Installation\n\n### PyPI\n\n```bash\npython3 -m pip install ptsandbox\n```\n\n### uv (recommended)\n\n```bash\nuv add ptsandbox\n```\n\n### Nix\n\n```bash\n# Coming soon\n```\n\n## \ud83d\udd27 Requirements\n\n- Python 3.11+\n- aiohttp 3.11.15+\n- pydantic 2.11.1+\n- loguru 0.7.3+\n\n## \ud83d\ude80 Quick Start\n\n### Basic File Scanning\n\n```python\nimport asyncio\nfrom pathlib import Path\nfrom ptsandbox import Sandbox, SandboxKey\n\nasync def main():\n    # Create connection key\n    key = SandboxKey(\n        name=\"test-key-1\",\n        key=\"<TOKEN_FROM_SANDBOX>\",\n        host=\"10.10.10.10\",\n    )\n    \n    # Initialize client\n    sandbox = Sandbox(key)\n    \n    # Submit file for analysis\n    task = await sandbox.create_scan(Path(\"suspicious_file.exe\"))\n    \n    # Wait for analysis completion\n    result = await sandbox.wait_for_report(task)\n    \n    if (report := result.get_long_report()) is not None:\n        print(report.result.verdict)\n\nasyncio.run(main())\n```\n\n### URL Scanning\n\n```python\nimport asyncio\nfrom ptsandbox import Sandbox, SandboxKey\n\nasync def main():\n    key = SandboxKey(\n        name=\"test-key-1\", \n        key=\"<TOKEN_FROM_SANDBOX>\",\n        host=\"10.10.10.10\"\n    )\n    \n    sandbox = Sandbox(key)\n    \n    # Scan suspicious URL\n    task = await sandbox.create_url_scan(\"http://malware.com/malicious-file\")\n    result = await sandbox.wait_for_report(task)\n    \n    if (report := result.get_long_report()) is not None:\n        print(report.result.verdict)\n\nasyncio.run(main())\n```\n\n### Working with UI API (Administrative Functions)\n\n```python\nimport asyncio\nfrom ptsandbox import Sandbox, SandboxKey\n\nasync def main():\n    key = SandboxKey(\n        name=\"test-key-1\",\n        key=\"<TOKEN_FROM_SANDBOX>\", \n        host=\"10.10.10.10\",\n        ui=SandboxKey.UI(\n            login=\"login\",\n            password=\"password\"\n        )\n    )\n    \n    sandbox = Sandbox(key)\n    \n    # Authorize in UI API\n    await sandbox.ui.authorize()\n    \n    # Get system information\n    system_info = await sandbox.ui.get_system_settings()\n    print(f\"System version: {system_info.data}\")\n    \n    # Get tasks status\n    tasks = await sandbox.ui.get_tasks()\n    print(f\"Active tasks: {len(tasks.tasks)}\")\n\nasyncio.run(main())\n```\n\n## \ud83d\udee0\ufe0f Core Features\n\n### Public API\n\n- **[File Scanning](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/scanning/default-scan/)** \u2014 submit files of any type for analysis\n- **[URL Scanning](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/scanning/scan/#url)** \u2014 check web links for threats  \n- **[Advanced Scanning](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/scanning/scan/#advanced-scan)** \u2014 configure analysis parameters (VM image, duration, commands)\n- **[Rescan Analysis](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/scanning/rescan/)** \u2014 analyze saved traces without re-execution\n- **[File Downloads](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/download-files/)** \u2014 retrieve original files and artifacts by hash\n- **[System Information](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/system/)** \u2014 get version and health status\n- **[Email Analysis](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/email/)** \u2014 extract and analyze email headers\n- **[Source Checking](https://security-experts-community.github.io/py-ptsandbox/usage/public-api/scanning/source/)** \u2014 specialized source file analysis\n\n### UI API (Administrative)\n\n- **[Token Management](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/api-tokens/)** \u2014 create and manage API keys\n- **[Entry Points](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/entry-points/)** \u2014 configure automatic processing rules\n- **[Task Management](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/tasks/)** \u2014 view and manage scan queue\n- **[System Settings](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/system/)** \u2014 configure sandbox parameters\n- **[License Management](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/license/)** \u2014 manage licenses and restrictions\n- **[Cluster Monitoring](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/cluster/)** \u2014 monitor cluster node status\n- **[Component Management](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/components/)** \u2014 manage system modules\n- **[Download Files](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/download-files/)** \u2014 download files and artifacts via UI API\n- **[Artifacts](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/artifacts/)** \u2014 work with scan results and artifacts\n- **[Antivirus Engines](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/antiviruses/)** \u2014 manage AV engine integrations\n- **[Queue Management](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/baqueue/)** \u2014 monitor and manage scan queues\n- **[Authorization](https://security-experts-community.github.io/py-ptsandbox/usage/ui-api/authorization/)** \u2014 handle UI API authentication\n\n## \ud83d\udd04 Advanced Usage\n\n### Batch Scanning\n\n```python\nimport asyncio\nfrom pathlib import Path\nfrom ptsandbox import Sandbox, SandboxKey\n\nasync def scan_multiple_files(files: list[Path]):\n    sandbox = Sandbox(SandboxKey(...))\n    \n    # Submit all files in parallel\n    tasks = []\n    for file in files:\n        task = await sandbox.create_scan(file, async_result=True)\n        tasks.append(task)\n    \n    # Wait for all tasks to complete\n    results = []\n    for task in tasks:\n        result = await sandbox.wait_for_report(task)\n        results.append(result)\n    \n    return results\n```\n\n### Custom Scan Configuration\n\n```python\nfrom ptsandbox.models import SandboxBaseScanTaskRequest, SandboxOptions\n\n# Configure scan options\noptions = SandboxBaseScanTaskRequest.Options(\n    sandbox=SandboxOptions(\n        image_id=\"ubuntu-jammy-x64\",     # VM image selection\n        analysis_duration=300,           # Analysis time in seconds\n        custom_command=\"python3 {file}\", # Custom execution command\n        save_video=True,                 # Save process video\n    )\n)\n\ntask = await sandbox.create_scan(file, options=options)\n```\n\n### Advanced File Analysis\n\n```python\nfrom ptsandbox.models import SandboxOptionsAdvanced\n\n# Advanced scanning with custom rules and extra files\ntask = await sandbox.create_advanced_scan(\n    Path(\"malware.exe\"),\n    extra_files=[Path(\"config.ini\"), Path(\"data.txt\")],  # Additional files\n    sandbox=SandboxOptionsAdvanced(\n        image_id=\"win10-x64\",\n        analysis_duration=600,\n        custom_command=\"python3 {file}\",  # Custom execution command\n        save_video=True,                  # Save process video\n        mitm_enabled=True,                # Enable traffic decryption\n        bootkitmon=False                  # Disable bootkitmon analysis\n    )\n)\n```\n\n### Error Handling\n\n```python\nfrom ptsandbox.models import (\n    SandboxUploadException, \n    SandboxWaitTimeoutException,\n    SandboxTooManyErrorsException\n)\n\ntry:\n    task = await sandbox.create_scan(large_file, upload_timeout=600)\n    result = await sandbox.wait_for_report(task, wait_time=300)\nexcept SandboxUploadException as e:\n    print(f\"Upload error: {e}\")\nexcept SandboxWaitTimeoutException as e:\n    print(f\"Timeout waiting for result: {e}\")\nexcept SandboxTooManyErrorsException as e:\n    print(f\"Too many errors occurred: {e}\")\n```\n\n### Stream File Downloads\n\n```python\n# Download large files as stream\nasync for chunk in sandbox.get_file_stream(\"sha256_hash\"):\n    # Process chunk by chunk\n    process_chunk(chunk)\n\n# Get email headers\nasync for header_chunk in sandbox.get_email_headers(email_file):\n    print(header_chunk.decode())\n```\n\n## \ud83d\udd27 Configuration\n\n### Proxy Support\n\n```python\nsandbox = Sandbox(\n    key, \n    proxy=\"http://proxy.company.com:8080\"\n)\n```\n\n### Custom Timeouts\n\n```python\nfrom aiohttp import ClientTimeout\n\nsandbox = Sandbox(\n    key,\n    default_timeout=ClientTimeout(\n        total=600,\n        connect=60,\n        sock_read=300\n    )\n)\n```\n\n### Upload Semaphore Control\n\n```python\n# Limit concurrent uploads\nsandbox = Sandbox(\n    key,\n    upload_semaphore_size=3  # Max 3 concurrent uploads\n)\n```\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions to the project! Whether you're fixing bugs, adding features, improving documentation, or helping other users, every contribution is valuable.\n\nPlease read our [Contributing Guide](CONTRIBUTING.md) for detailed information.\n\n## \ud83d\udccb License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n\n## \ud83d\udcde Support\n\n- **Documentation**: [https://security-experts-community.github.io/py-ptsandbox](https://security-experts-community.github.io/py-ptsandbox)\n- **Issues**: [GitHub Issues](https://github.com/Security-Experts-Community/py-ptsandbox/issues)\n\n## \ud83d\ude4f Acknowledgments\n\n- **PT ESC Malware Detection** \u2014 PT Sandbox development team\n- **Security Experts Community** \u2014 information security experts community\n- All project contributors\n\n---\n\n<p align=\"center\">\n    <img width=\"60%\" src=\"https://raw.githubusercontent.com/Security-Experts-Community/py-ptsandbox/refs/heads/main/docs/assets/pic_right.svg\">\n</p>",
    "bugtrack_url": null,
    "license": null,
    "summary": "Async API connector for PT Sandbox instances",
    "version": "5.0.5",
    "project_urls": {
        "Documentation": "https://security-experts-community.github.io/py-ptsandbox",
        "Homepage": "https://github.com/Security-Experts-Community/py-ptsandbox",
        "Issues": "https://github.com/Security-Experts-Community/py-ptsandbox/issues",
        "Repository": "https://github.com/Security-Experts-Community/py-ptsandbox"
    },
    "split_keywords": [
        "ptsandbox",
        " sandbox"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0c34b1b7af23e7a9e425fdca6f334518bc0ec4bde959d76580ce7babc5d50dfb",
                "md5": "91f982f6024b0bfb12e0a7d50ffe9b04",
                "sha256": "f29031e1f72ed642c490a634d83eab616ba2cc01a52a8da9f79b7e221e19a67a"
            },
            "downloads": -1,
            "filename": "ptsandbox-5.0.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "91f982f6024b0bfb12e0a7d50ffe9b04",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.11",
            "size": 63175,
            "upload_time": "2025-08-01T09:28:09",
            "upload_time_iso_8601": "2025-08-01T09:28:09.666046Z",
            "url": "https://files.pythonhosted.org/packages/0c/34/b1b7af23e7a9e425fdca6f334518bc0ec4bde959d76580ce7babc5d50dfb/ptsandbox-5.0.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3fe0192ae8080ad4f75147a3156aa4bb6f9bca554b8161bab0f656d1398a70f3",
                "md5": "f7983855faf2dcb2d44a2e4253532ac9",
                "sha256": "3da97c0e7d1c3cfd9aacb66ffc3e98bcaa99b2ed5b0f77e8dc7d304595679c9f"
            },
            "downloads": -1,
            "filename": "ptsandbox-5.0.5.tar.gz",
            "has_sig": false,
            "md5_digest": "f7983855faf2dcb2d44a2e4253532ac9",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.11",
            "size": 50556,
            "upload_time": "2025-08-01T09:28:10",
            "upload_time_iso_8601": "2025-08-01T09:28:10.982729Z",
            "url": "https://files.pythonhosted.org/packages/3f/e0/192ae8080ad4f75147a3156aa4bb6f9bca554b8161bab0f656d1398a70f3/ptsandbox-5.0.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-01 09:28:10",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Security-Experts-Community",
    "github_project": "py-ptsandbox",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "ptsandbox"
}
        
Elapsed time: 1.41498s