robinzhon


Namerobinzhon JSON
Version 0.2.1 PyPI version JSON
download
home_pagehttps://github.com/rohaquinlop/robinzhon
SummaryMinimal, high-performance Python helpers for concurrent S3 object transfers
upload_time2025-08-20 17:28:22
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT
keywords s3 aws download s3-download upload s3-upload performance concurrent async rust pyo3 rust-extension cloud storage boto3
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # robinzhon

Minimal, high-performance Python helpers for concurrent S3 object transfers.

A small extension that exposes fast, concurrent downloads (and uploads) to Python
using a Rust implementation optimized for I/O-bound workloads.

## Install

- From PyPI: `pip install robinzhon` or `uv add robinzhon`
- From source (requires Rust + maturin):

```bash
# build and install into active venv
maturin develop --release
```

## Quick start

Download a single object:

```python
from robinzhon import S3Downloader

d = S3Downloader("us-east-1")
path = d.download_file("my-bucket", "path/to/object.txt", "./object.txt")
print(path)  # ./object.txt
```

Download many objects into a directory:

```python
files = ["data/a.csv", "data/b.csv"]
res = d.download_multiple_files("my-bucket", files, "./downloads")
print(res.successful)
print(res.failed)
```

Upload a single file or multiple files:

```python
from robinzhon import S3Uploader

u = S3Uploader("us-east-1")
u.upload_file("my-bucket", "dest/key.txt", "./local.txt")
paths_and_keys = [("./local1.txt", "key1"), ("./local2.txt", "key2")]
res = u.upload_multiple_files("my-bucket", paths_and_keys)
print(res.successful, res.failed)
```

## Configuration

- Both `S3Downloader` and `S3Uploader` accept an optional concurrency argument (default 5):

```python
S3Downloader("us-east-1", max_concurrent_downloads=10)
S3Uploader("us-east-1", max_concurrent_uploads=10)
```

## API summary

- Results
    - Attributes: `successful: List[str]`, `failed: List[str]`
    - Methods: `is_complete_success()`, `has_success()`, `has_failures()`, `total_count()`, `success_rate()`

- S3Downloader(region_name, max_concurrent_downloads=5)
    - `download_file(bucket, key, local_path) -> str`
    - `download_multiple_files(bucket, keys, base_dir) -> Results`
    - `download_multiple_files_with_paths(bucket, [(key, local_path), ...]) -> Results`

- S3Uploader(region_name, max_concurrent_uploads=5)
    - `upload_file(bucket, key, local_path) -> str`
    - `upload_multiple_files(bucket, [(local_path, key), ...]) -> Results`

## Building & testing

- Requires Rust toolchain and `maturin` to build the extension.
- Tests are simple Python tests that assume the compiled extension is available.

## License

See the [LICENSE](LICENSE) file in the repository.


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/rohaquinlop/robinzhon",
    "name": "robinzhon",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "s3, aws, download, s3-download, upload, s3-upload, performance, concurrent, async, rust, pyo3, rust-extension, cloud, storage, boto3",
    "author": null,
    "author_email": "Robin Quintero <rohaquinlop301@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/8a/18/102ff6092fbe99f4efdaac83677bdf073e2ba8e9fc1b8b472e675aa67962/robinzhon-0.2.1.tar.gz",
    "platform": null,
    "description": "# robinzhon\n\nMinimal, high-performance Python helpers for concurrent S3 object transfers.\n\nA small extension that exposes fast, concurrent downloads (and uploads) to Python\nusing a Rust implementation optimized for I/O-bound workloads.\n\n## Install\n\n- From PyPI: `pip install robinzhon` or `uv add robinzhon`\n- From source (requires Rust + maturin):\n\n```bash\n# build and install into active venv\nmaturin develop --release\n```\n\n## Quick start\n\nDownload a single object:\n\n```python\nfrom robinzhon import S3Downloader\n\nd = S3Downloader(\"us-east-1\")\npath = d.download_file(\"my-bucket\", \"path/to/object.txt\", \"./object.txt\")\nprint(path)  # ./object.txt\n```\n\nDownload many objects into a directory:\n\n```python\nfiles = [\"data/a.csv\", \"data/b.csv\"]\nres = d.download_multiple_files(\"my-bucket\", files, \"./downloads\")\nprint(res.successful)\nprint(res.failed)\n```\n\nUpload a single file or multiple files:\n\n```python\nfrom robinzhon import S3Uploader\n\nu = S3Uploader(\"us-east-1\")\nu.upload_file(\"my-bucket\", \"dest/key.txt\", \"./local.txt\")\npaths_and_keys = [(\"./local1.txt\", \"key1\"), (\"./local2.txt\", \"key2\")]\nres = u.upload_multiple_files(\"my-bucket\", paths_and_keys)\nprint(res.successful, res.failed)\n```\n\n## Configuration\n\n- Both `S3Downloader` and `S3Uploader` accept an optional concurrency argument (default 5):\n\n```python\nS3Downloader(\"us-east-1\", max_concurrent_downloads=10)\nS3Uploader(\"us-east-1\", max_concurrent_uploads=10)\n```\n\n## API summary\n\n- Results\n    - Attributes: `successful: List[str]`, `failed: List[str]`\n    - Methods: `is_complete_success()`, `has_success()`, `has_failures()`, `total_count()`, `success_rate()`\n\n- S3Downloader(region_name, max_concurrent_downloads=5)\n    - `download_file(bucket, key, local_path) -> str`\n    - `download_multiple_files(bucket, keys, base_dir) -> Results`\n    - `download_multiple_files_with_paths(bucket, [(key, local_path), ...]) -> Results`\n\n- S3Uploader(region_name, max_concurrent_uploads=5)\n    - `upload_file(bucket, key, local_path) -> str`\n    - `upload_multiple_files(bucket, [(local_path, key), ...]) -> Results`\n\n## Building & testing\n\n- Requires Rust toolchain and `maturin` to build the extension.\n- Tests are simple Python tests that assume the compiled extension is available.\n\n## License\n\nSee the [LICENSE](LICENSE) file in the repository.\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Minimal, high-performance Python helpers for concurrent S3 object transfers",
    "version": "0.2.1",
    "project_urls": {
        "Homepage": "https://github.com/rohaquinlop/robinzhon"
    },
    "split_keywords": [
        "s3",
        " aws",
        " download",
        " s3-download",
        " upload",
        " s3-upload",
        " performance",
        " concurrent",
        " async",
        " rust",
        " pyo3",
        " rust-extension",
        " cloud",
        " storage",
        " boto3"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5847679633032fb3bce5b1f771db5f0fa05dc878dfc98dd74478dd463efe1d9f",
                "md5": "2cd6d6b6aead980a17cca248b8ddd278",
                "sha256": "98ba104f9bf5f1ef85d9e71542022984d64bedf19fbdd93dd4537d3feb081850"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp310-cp310-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2cd6d6b6aead980a17cca248b8ddd278",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 6784859,
            "upload_time": "2025-08-20T17:27:46",
            "upload_time_iso_8601": "2025-08-20T17:27:46.155889Z",
            "url": "https://files.pythonhosted.org/packages/58/47/679633032fb3bce5b1f771db5f0fa05dc878dfc98dd74478dd463efe1d9f/robinzhon-0.2.1-cp310-cp310-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e309714cfe03bd275ebfc38d9e51cea2be962705cbcb5f96aebd39fa6c3e4456",
                "md5": "f21d66169cd97da1a6dce957d4afa5b7",
                "sha256": "707705f8213411c54d244567dd6d18578e05d63b8e5e147d045a188b549e34ea"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "f21d66169cd97da1a6dce957d4afa5b7",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 6585089,
            "upload_time": "2025-08-20T17:27:47",
            "upload_time_iso_8601": "2025-08-20T17:27:47.693934Z",
            "url": "https://files.pythonhosted.org/packages/e3/09/714cfe03bd275ebfc38d9e51cea2be962705cbcb5f96aebd39fa6c3e4456/robinzhon-0.2.1-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "eb33afffc1f1e096b0a01aeb4526477582577f73264fc0e05f38668f2a4118f8",
                "md5": "b979a5364498200b2f48b31f508ccee1",
                "sha256": "1a83dbb97d1b8af48c1ddf86c6cfa74a356acd63cb70c6a053c62e52f17fb4ef"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "b979a5364498200b2f48b31f508ccee1",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 7384323,
            "upload_time": "2025-08-20T17:27:49",
            "upload_time_iso_8601": "2025-08-20T17:27:49.201496Z",
            "url": "https://files.pythonhosted.org/packages/eb/33/afffc1f1e096b0a01aeb4526477582577f73264fc0e05f38668f2a4118f8/robinzhon-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3355f8dc25a75de11f99886d03ceac94cb2d18beddaac68bb95c2444483c9121",
                "md5": "7c1222c02e04d1e46d612bd3d8df7186",
                "sha256": "c5e4b3ab4dc4585374e2819c11b07f5383954f4128bb987b28e2c373c173c339"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "7c1222c02e04d1e46d612bd3d8df7186",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 5548388,
            "upload_time": "2025-08-20T17:27:51",
            "upload_time_iso_8601": "2025-08-20T17:27:51.822542Z",
            "url": "https://files.pythonhosted.org/packages/33/55/f8dc25a75de11f99886d03ceac94cb2d18beddaac68bb95c2444483c9121/robinzhon-0.2.1-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "20222f518c176f78539793769e721fa0db590a2a8b5b240d6a0491557ba963b2",
                "md5": "dc50bb6b7ef31babf8cad3431845736e",
                "sha256": "7ed372024594baeef1c20e9849aca79cffe00837f17dca920ba9816129977e1b"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "dc50bb6b7ef31babf8cad3431845736e",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 6788619,
            "upload_time": "2025-08-20T17:27:53",
            "upload_time_iso_8601": "2025-08-20T17:27:53.226041Z",
            "url": "https://files.pythonhosted.org/packages/20/22/2f518c176f78539793769e721fa0db590a2a8b5b240d6a0491557ba963b2/robinzhon-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4f46d3a52325bdeb18c1d056e0d87307caa4f1cfdcd418d11ee15c0ae3a219bf",
                "md5": "36de1532d8bc4d66ffb522da8e3b0e43",
                "sha256": "27f1e468a2cc1a83b6491d091b6256f5be84537e31c5ff8c89fb310e092fc238"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "36de1532d8bc4d66ffb522da8e3b0e43",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 6583649,
            "upload_time": "2025-08-20T17:27:55",
            "upload_time_iso_8601": "2025-08-20T17:27:55.159807Z",
            "url": "https://files.pythonhosted.org/packages/4f/46/d3a52325bdeb18c1d056e0d87307caa4f1cfdcd418d11ee15c0ae3a219bf/robinzhon-0.2.1-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1879364aaae4ab6ce7c86216aca68dfc7386b7926d18c9ab96492729361b9862",
                "md5": "14da0e40bc6f48a68523690e169e2072",
                "sha256": "a23e7567c5232049fed2d41733a2418f888446575698a5cdf7901cce19314e96"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "14da0e40bc6f48a68523690e169e2072",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 7383197,
            "upload_time": "2025-08-20T17:27:57",
            "upload_time_iso_8601": "2025-08-20T17:27:57.222681Z",
            "url": "https://files.pythonhosted.org/packages/18/79/364aaae4ab6ce7c86216aca68dfc7386b7926d18c9ab96492729361b9862/robinzhon-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "98de069d66ea0ca0377e11c39525624b561012aa100c8d906d762fe816659dc8",
                "md5": "519d6dd327e9596c06dcf41510a2a877",
                "sha256": "57d49119d1acfbca99926e0b6a5c0c5a9757b302d99b8a1b937e8c27926d42a7"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "519d6dd327e9596c06dcf41510a2a877",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 5547192,
            "upload_time": "2025-08-20T17:27:59",
            "upload_time_iso_8601": "2025-08-20T17:27:59.166280Z",
            "url": "https://files.pythonhosted.org/packages/98/de/069d66ea0ca0377e11c39525624b561012aa100c8d906d762fe816659dc8/robinzhon-0.2.1-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ad8620784e38d4503278754d91326468019dc8951ccea09b18e3be8b9f45637d",
                "md5": "27931f9ff1ff4244db9c5b428ebc887f",
                "sha256": "72234b9aabba1ba2dd2ac238321f53c0379ed9112438a59d9b0a7196bd013abe"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "27931f9ff1ff4244db9c5b428ebc887f",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 6784436,
            "upload_time": "2025-08-20T17:28:00",
            "upload_time_iso_8601": "2025-08-20T17:28:00.880697Z",
            "url": "https://files.pythonhosted.org/packages/ad/86/20784e38d4503278754d91326468019dc8951ccea09b18e3be8b9f45637d/robinzhon-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "03150cfcce71f82620824f3d17da96cb94db88c625e08261f133b0e3e095d97f",
                "md5": "89fdf88cf7a19e5fa1632c0e6c468fa4",
                "sha256": "21258f94c24478fb90b58ff9b37095381f84698af86bec280b9e1835e12c8420"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "89fdf88cf7a19e5fa1632c0e6c468fa4",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 6576358,
            "upload_time": "2025-08-20T17:28:02",
            "upload_time_iso_8601": "2025-08-20T17:28:02.188371Z",
            "url": "https://files.pythonhosted.org/packages/03/15/0cfcce71f82620824f3d17da96cb94db88c625e08261f133b0e3e095d97f/robinzhon-0.2.1-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "47700d599fbaffeb956d422dba3e439d1bdfeaad96cf9ba645f72db63880f442",
                "md5": "4b1f8e59442977b24927cf5aa023fb81",
                "sha256": "7700e01f8f8321e0538dbd1bc0d81d9956e4f7b711f1957b953db291f71b2630"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4b1f8e59442977b24927cf5aa023fb81",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 7380650,
            "upload_time": "2025-08-20T17:28:03",
            "upload_time_iso_8601": "2025-08-20T17:28:03.906174Z",
            "url": "https://files.pythonhosted.org/packages/47/70/0d599fbaffeb956d422dba3e439d1bdfeaad96cf9ba645f72db63880f442/robinzhon-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "946c58eb5f27a6de3ab748b8d0e14affc0eeeda3c18c15516785191446be8c81",
                "md5": "2e017dffc1b3e77c3d8a47ef053b13ba",
                "sha256": "947eca2d8178e991eb60a6476adcf661d0b3d59a39d9b559daf4b43072eb555e"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "2e017dffc1b3e77c3d8a47ef053b13ba",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 5546428,
            "upload_time": "2025-08-20T17:28:06",
            "upload_time_iso_8601": "2025-08-20T17:28:06.039062Z",
            "url": "https://files.pythonhosted.org/packages/94/6c/58eb5f27a6de3ab748b8d0e14affc0eeeda3c18c15516785191446be8c81/robinzhon-0.2.1-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8bfd195152e19fecd68cfcb3b08aec7b9e9f9ce37cf9a7b2dd7c7493c9cc8c0b",
                "md5": "ef0017d6896a8faf56ab37d72e2072c7",
                "sha256": "ae2661f20fd53075db536220009a5f836b0e42ebf11992fa6a94e8acafb187fc"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp313-cp313-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ef0017d6896a8faf56ab37d72e2072c7",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 6784547,
            "upload_time": "2025-08-20T17:28:07",
            "upload_time_iso_8601": "2025-08-20T17:28:07.890283Z",
            "url": "https://files.pythonhosted.org/packages/8b/fd/195152e19fecd68cfcb3b08aec7b9e9f9ce37cf9a7b2dd7c7493c9cc8c0b/robinzhon-0.2.1-cp313-cp313-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ba47a35101c5209da9b01f98de8d6f45e1d2876342f5af0524337659881e2894",
                "md5": "b658be2d7201995cd256c9eed8d228b7",
                "sha256": "0444a1899f17efc827877606cc873af9f25f4e0223584bc7c0e619ada5c901cc"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "b658be2d7201995cd256c9eed8d228b7",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 6577038,
            "upload_time": "2025-08-20T17:28:09",
            "upload_time_iso_8601": "2025-08-20T17:28:09.203624Z",
            "url": "https://files.pythonhosted.org/packages/ba/47/a35101c5209da9b01f98de8d6f45e1d2876342f5af0524337659881e2894/robinzhon-0.2.1-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8a099eafd489289e1fd7c5dca9196f2270c19423ac3e87f64846c9a4112fb2ff",
                "md5": "bcb9f6cb02d91f41c74a4fe5ae2e8718",
                "sha256": "ce582ec347fb2c31be608281ec9d6c545918509dfc6da47697e895f147874376"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bcb9f6cb02d91f41c74a4fe5ae2e8718",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 7381428,
            "upload_time": "2025-08-20T17:28:10",
            "upload_time_iso_8601": "2025-08-20T17:28:10.566878Z",
            "url": "https://files.pythonhosted.org/packages/8a/09/9eafd489289e1fd7c5dca9196f2270c19423ac3e87f64846c9a4112fb2ff/robinzhon-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f9a4da96ade6b0535099b9105d06a243cb575e6e17871b3eafd7c05ba9d36b25",
                "md5": "e1832eeb0788a1d329b9ad8ce3f6414b",
                "sha256": "a63ba0d2ff01df0a5dd2564c940d275baf359741c5ad9feb42a52bfb997c6700"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e1832eeb0788a1d329b9ad8ce3f6414b",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.9",
            "size": 5546639,
            "upload_time": "2025-08-20T17:28:12",
            "upload_time_iso_8601": "2025-08-20T17:28:12.744571Z",
            "url": "https://files.pythonhosted.org/packages/f9/a4/da96ade6b0535099b9105d06a243cb575e6e17871b3eafd7c05ba9d36b25/robinzhon-0.2.1-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "24255454095e4622ffdebb701f8d0deed9b35877b59e5d311eb47b8d7978b8fe",
                "md5": "7e7212e97a9e8a96364df5ebaba7a4f8",
                "sha256": "a192409535715151f5245a3522ade9b2d2096e097da8eebf65d2a21be81f37c3"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7e7212e97a9e8a96364df5ebaba7a4f8",
            "packagetype": "bdist_wheel",
            "python_version": "cp314",
            "requires_python": ">=3.9",
            "size": 7382958,
            "upload_time": "2025-08-20T17:28:14",
            "upload_time_iso_8601": "2025-08-20T17:28:14.567398Z",
            "url": "https://files.pythonhosted.org/packages/24/25/5454095e4622ffdebb701f8d0deed9b35877b59e5d311eb47b8d7978b8fe/robinzhon-0.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a539b45ab6b3b5136f5a97b88aac7a9ec9f6635c34e7cc57a196b686ef7acc7b",
                "md5": "1fe72e4b5227e8060d256a2397b8a78d",
                "sha256": "a76196e7877f38e352d413f8a5c45113131a64833520632e7bb543fdd868a2b4"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1fe72e4b5227e8060d256a2397b8a78d",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 7385046,
            "upload_time": "2025-08-20T17:28:16",
            "upload_time_iso_8601": "2025-08-20T17:28:16.389817Z",
            "url": "https://files.pythonhosted.org/packages/a5/39/b45ab6b3b5136f5a97b88aac7a9ec9f6635c34e7cc57a196b686ef7acc7b/robinzhon-0.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "540e2cb4f4419f9b96fd16fa7651857beb0d5e36a2b3c8e9b75c94f31b2693a1",
                "md5": "b9523c4858328bd7aff9fe137ad2fb4a",
                "sha256": "64e833be369c6c84f54d8c0999089a8615e9f56231d95c43dc34a29bfb727e00"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "b9523c4858328bd7aff9fe137ad2fb4a",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 5548704,
            "upload_time": "2025-08-20T17:28:17",
            "upload_time_iso_8601": "2025-08-20T17:28:17.987639Z",
            "url": "https://files.pythonhosted.org/packages/54/0e/2cb4f4419f9b96fd16fa7651857beb0d5e36a2b3c8e9b75c94f31b2693a1/robinzhon-0.2.1-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "651ef3f45115adb3f1afa846ff76da0ca88aec0da231ada1e9455902d92999e8",
                "md5": "19ab9629206f54bce341ab3ba61c8052",
                "sha256": "d54e15c9063442d615d37b2b572720eabf59f29db8f3dc2dc5acc9ad9df651f8"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "19ab9629206f54bce341ab3ba61c8052",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.9",
            "size": 7382261,
            "upload_time": "2025-08-20T17:28:19",
            "upload_time_iso_8601": "2025-08-20T17:28:19.726238Z",
            "url": "https://files.pythonhosted.org/packages/65/1e/f3f45115adb3f1afa846ff76da0ca88aec0da231ada1e9455902d92999e8/robinzhon-0.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "30f8e62f12cb7c5499f9c4175261932b5730a338e9d8980b76db0f59a635120c",
                "md5": "8dc2ce9f70751882dfa8bf3b59ee2bff",
                "sha256": "247bbe2f1552f35e452340512d71595632e626e898c0392dc10b00a552ac75c2"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8dc2ce9f70751882dfa8bf3b59ee2bff",
            "packagetype": "bdist_wheel",
            "python_version": "pp311",
            "requires_python": ">=3.9",
            "size": 7381566,
            "upload_time": "2025-08-20T17:28:21",
            "upload_time_iso_8601": "2025-08-20T17:28:21.059046Z",
            "url": "https://files.pythonhosted.org/packages/30/f8/e62f12cb7c5499f9c4175261932b5730a338e9d8980b76db0f59a635120c/robinzhon-0.2.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8a18102ff6092fbe99f4efdaac83677bdf073e2ba8e9fc1b8b472e675aa67962",
                "md5": "497d48ef4afeedfa308cc538cf052616",
                "sha256": "03be8709f38fb59fab2af4a644cdb1313c3b4e2e16243c3fdb786a64c5cd5b3d"
            },
            "downloads": -1,
            "filename": "robinzhon-0.2.1.tar.gz",
            "has_sig": false,
            "md5_digest": "497d48ef4afeedfa308cc538cf052616",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 98425,
            "upload_time": "2025-08-20T17:28:22",
            "upload_time_iso_8601": "2025-08-20T17:28:22.406615Z",
            "url": "https://files.pythonhosted.org/packages/8a/18/102ff6092fbe99f4efdaac83677bdf073e2ba8e9fc1b8b472e675aa67962/robinzhon-0.2.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-20 17:28:22",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "rohaquinlop",
    "github_project": "robinzhon",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "robinzhon"
}
        
Elapsed time: 1.15621s