bencode2


Namebencode2 JSON
Version 0.3.24 PyPI version JSON
download
home_pageNone
SummaryA fast and correct bencode serialize/deserialize library
upload_time2025-02-23 15:22:25
maintainerNone
docs_urlNone
authorNone
requires_python<4.0,>=3.9
licenseMIT
keywords bencode bittorrent bit-torrent serialize deserialize p2p
VCS
bugtrack_url
requirements meson-python meson flit-core typing_extensions mypy pytest pytest-cov pytest-codspeed pytest-github-actions-annotate-failures pre-commit
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # A fast and correct bencode serialize/deserialize library

[![PyPI](https://img.shields.io/pypi/v/bencode2)](https://pypi.org/project/bencode2/)
[![tests](https://github.com/trim21/bencode-py/actions/workflows/tests.yaml/badge.svg)](https://github.com/trim21/bencode-py/actions/workflows/tests.yaml)
[![CircleCI](https://dl.circleci.com/status-badge/img/gh/trim21/bencode-py/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/trim21/bencode-py/tree/master)
[![PyPI - Python Version](https://img.shields.io/badge/python-%3E%3D3.8%2C%3C4.0-blue)](https://pypi.org/project/bencode2/)
[![Codecov branch](https://img.shields.io/codecov/c/github/Trim21/bencode-py/master)](https://codecov.io/gh/Trim21/bencode-py/branch/master)

## introduction

Why yet another bencode package in python?

because I need a bencode library:

### 1. Correct

It should fully validate its inputs, both encoded bencode bytes, or python object to be
encoded.

And it should not decode bencode bytes to `str` by default.

Bencode doesn't have a utf-8 str type, only bytes,
so many decoder try to decode bytes to str and fallback to bytes,
**this package won't, it parse bencode bytes value as python bytes.**

It may be attempting to parse all dictionary keys as string,
but for BitTorrent v2 torrent, the keys in `pieces root` dictionary is still sha256 hash
instead of ascii/utf-8 string.

If you prefer string as dictionary keys, write a dedicated function to convert parsing
result.

Also be careful! Even file name or torrent name may not be valid utf-8 string.

### 2. Fast enough

this package is written with c++ in CPython.

### 3. still cross implement

This package sill have a pure python wheel `bencode2-${version}-py3-none-any.whl` wheel
on pypi.

Which means you can still use it in non-cpython python with same behavior.

## install

```shell
pip install bencode2
```

## basic usage

```python
import bencode2

assert bencode2.bdecode(b"d4:spaml1:a1:bee") == {b"spam": [b"a", b"b"]}

assert bencode2.bencode({'hello': 'world'}) == b'd5:hello5:worlde'
```

### Decoding

| bencode type | python type |
| :----------: | :---------: |
|   integer    |    `int`    |
|    string    |   `bytes`   |
|    array     |   `list`    |
|  dictionary  |   `dict`    |

bencode have 4 native types, integer, string, array and dictionary.

This package will decode integer to `int`, array to `list` and
dictionary to `dict`.

Because bencode string is not defined as utf-8 string, and will contain raw bytes
bencode2 will decode bencode string to python `bytes`.

### Encoding

|            python type            | bencode type |
| :-------------------------------: | :----------: |
|              `bool`               | integer 0/1  |
|       `int`, `enum.IntEnum`       |   integer    |
|       `str`, `enum.StrEnum`       |    string    |
| `bytes`, `bytearray`,`memoryview` |    string    |
|   `list`, `tuple`, `NamedTuple`   |    array     |
|       `dict`, `OrderedDict`       |  dictionary  |
|       `types.MaapingProxy`        |  dictionary  |
|            dataclasses            |  dictionary  |

## free threading

bencode2 have a free threading wheel on pypi, build with GIL disabled.

When encoding or decoding, it will not acquire GIL and may call non-thread-safy c-api,
which mean it's the caller's responsibility to ensure thread safety.

When calling `bencode`, it's safe to encode same object in multiple threading,
but it's not safe to encoding a object and change it in another thread at same time.

Also, when decoding, `bytes` objects are immutable so it's safe to be used in multiple
threading,
but `memoryview` and `bytearray` maybe not, please make sure underlay data doesn't
change when decoding.

## Development

This project use [meson](https://github.com/mesonbuild/meson) for building.

For testing pure python library,
make sure all so/pyd files in `src/bencode2` are removed, then run
`PYTHONPATH=src pytest --assert-pkg-compiled=false`.

For testing native extension, meson-python doesn't provide same function with
`python setup.py build_ext --inplace`.

So you will need to run command like this:

```shell
meson setup build
meson compile -C build
ninja -C build copy
```

ninja will need to build so/pyd with meson and copy it to `src/bencode2`,

then run tests with `PYTHONPATH=src pytest --assert-pkg-compiled=true`.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "bencode2",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.9",
    "maintainer_email": null,
    "keywords": "bencode, bittorrent, bit-torrent, serialize, deserialize, p2p",
    "author": null,
    "author_email": "trim21 <trim21me@gmail.com>",
    "download_url": null,
    "platform": null,
    "description": "# A fast and correct bencode serialize/deserialize library\n\n[![PyPI](https://img.shields.io/pypi/v/bencode2)](https://pypi.org/project/bencode2/)\n[![tests](https://github.com/trim21/bencode-py/actions/workflows/tests.yaml/badge.svg)](https://github.com/trim21/bencode-py/actions/workflows/tests.yaml)\n[![CircleCI](https://dl.circleci.com/status-badge/img/gh/trim21/bencode-py/tree/master.svg?style=svg)](https://dl.circleci.com/status-badge/redirect/gh/trim21/bencode-py/tree/master)\n[![PyPI - Python Version](https://img.shields.io/badge/python-%3E%3D3.8%2C%3C4.0-blue)](https://pypi.org/project/bencode2/)\n[![Codecov branch](https://img.shields.io/codecov/c/github/Trim21/bencode-py/master)](https://codecov.io/gh/Trim21/bencode-py/branch/master)\n\n## introduction\n\nWhy yet another bencode package in python?\n\nbecause I need a bencode library:\n\n### 1. Correct\n\nIt should fully validate its inputs, both encoded bencode bytes, or python object to be\nencoded.\n\nAnd it should not decode bencode bytes to `str` by default.\n\nBencode doesn't have a utf-8 str type, only bytes,\nso many decoder try to decode bytes to str and fallback to bytes,\n**this package won't, it parse bencode bytes value as python bytes.**\n\nIt may be attempting to parse all dictionary keys as string,\nbut for BitTorrent v2 torrent, the keys in `pieces root` dictionary is still sha256 hash\ninstead of ascii/utf-8 string.\n\nIf you prefer string as dictionary keys, write a dedicated function to convert parsing\nresult.\n\nAlso be careful! Even file name or torrent name may not be valid utf-8 string.\n\n### 2. Fast enough\n\nthis package is written with c++ in CPython.\n\n### 3. still cross implement\n\nThis package sill have a pure python wheel `bencode2-${version}-py3-none-any.whl` wheel\non pypi.\n\nWhich means you can still use it in non-cpython python with same behavior.\n\n## install\n\n```shell\npip install bencode2\n```\n\n## basic usage\n\n```python\nimport bencode2\n\nassert bencode2.bdecode(b\"d4:spaml1:a1:bee\") == {b\"spam\": [b\"a\", b\"b\"]}\n\nassert bencode2.bencode({'hello': 'world'}) == b'd5:hello5:worlde'\n```\n\n### Decoding\n\n| bencode type | python type |\n| :----------: | :---------: |\n|   integer    |    `int`    |\n|    string    |   `bytes`   |\n|    array     |   `list`    |\n|  dictionary  |   `dict`    |\n\nbencode have 4 native types, integer, string, array and dictionary.\n\nThis package will decode integer to `int`, array to `list` and\ndictionary to `dict`.\n\nBecause bencode string is not defined as utf-8 string, and will contain raw bytes\nbencode2 will decode bencode string to python `bytes`.\n\n### Encoding\n\n|            python type            | bencode type |\n| :-------------------------------: | :----------: |\n|              `bool`               | integer 0/1  |\n|       `int`, `enum.IntEnum`       |   integer    |\n|       `str`, `enum.StrEnum`       |    string    |\n| `bytes`, `bytearray`,`memoryview` |    string    |\n|   `list`, `tuple`, `NamedTuple`   |    array     |\n|       `dict`, `OrderedDict`       |  dictionary  |\n|       `types.MaapingProxy`        |  dictionary  |\n|            dataclasses            |  dictionary  |\n\n## free threading\n\nbencode2 have a free threading wheel on pypi, build with GIL disabled.\n\nWhen encoding or decoding, it will not acquire GIL and may call non-thread-safy c-api,\nwhich mean it's the caller's responsibility to ensure thread safety.\n\nWhen calling `bencode`, it's safe to encode same object in multiple threading,\nbut it's not safe to encoding a object and change it in another thread at same time.\n\nAlso, when decoding, `bytes` objects are immutable so it's safe to be used in multiple\nthreading,\nbut `memoryview` and `bytearray` maybe not, please make sure underlay data doesn't\nchange when decoding.\n\n## Development\n\nThis project use [meson](https://github.com/mesonbuild/meson) for building.\n\nFor testing pure python library,\nmake sure all so/pyd files in `src/bencode2` are removed, then run\n`PYTHONPATH=src pytest --assert-pkg-compiled=false`.\n\nFor testing native extension, meson-python doesn't provide same function with\n`python setup.py build_ext --inplace`.\n\nSo you will need to run command like this:\n\n```shell\nmeson setup build\nmeson compile -C build\nninja -C build copy\n```\n\nninja will need to build so/pyd with meson and copy it to `src/bencode2`,\n\nthen run tests with `PYTHONPATH=src pytest --assert-pkg-compiled=true`.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A fast and correct bencode serialize/deserialize library",
    "version": "0.3.24",
    "project_urls": {
        "Homepage": "https://github.com/trim21/bencode-py",
        "Issues": "https://github.com/trim21/bencode-py/issues",
        "Repository": "https://github.com/trim21/bencode-py"
    },
    "split_keywords": [
        "bencode",
        " bittorrent",
        " bit-torrent",
        " serialize",
        " deserialize",
        " p2p"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "91178d2e43b0a2f37af193bf8e79fda9dd4f3c3945e897c1bcf5ab94286850fd",
                "md5": "bf890de98638d2055fb6d1631cff7941",
                "sha256": "ca995acbc38893b58d688a0b6275b0122277211294799ecf632ae12f0b49dae2"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "bf890de98638d2055fb6d1631cff7941",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 122174,
            "upload_time": "2025-02-23T15:22:25",
            "upload_time_iso_8601": "2025-02-23T15:22:25.022735Z",
            "url": "https://files.pythonhosted.org/packages/91/17/8d2e43b0a2f37af193bf8e79fda9dd4f3c3945e897c1bcf5ab94286850fd/bencode2-0.3.24-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5b1bfe9771e7f7feece5583e15cc68663649a96d3e5381617cadfc4a9e16e23a",
                "md5": "e6091ce3d86e057be213a6448aeb567f",
                "sha256": "8a2f349fa26d0c884868a72dee49c9ee0da5b662ef738a8e934ab5cba4996e9e"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp310-cp310-macosx_11_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e6091ce3d86e057be213a6448aeb567f",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 137097,
            "upload_time": "2025-02-23T15:22:27",
            "upload_time_iso_8601": "2025-02-23T15:22:27.813095Z",
            "url": "https://files.pythonhosted.org/packages/5b/1b/fe9771e7f7feece5583e15cc68663649a96d3e5381617cadfc4a9e16e23a/bencode2-0.3.24-cp310-cp310-macosx_11_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6683d6daad2f970dc1151ac0d57ada5f189e2223baae641312253bc96c91dfff",
                "md5": "f439ac1515f8c9ec1d2f774b14762b7e",
                "sha256": "88cd42d5515e408fde271f0c18e0f5992bc4a5dd1321b1e22102afd11be7623b"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "f439ac1515f8c9ec1d2f774b14762b7e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 162841,
            "upload_time": "2025-02-23T15:22:30",
            "upload_time_iso_8601": "2025-02-23T15:22:30.284113Z",
            "url": "https://files.pythonhosted.org/packages/66/83/d6daad2f970dc1151ac0d57ada5f189e2223baae641312253bc96c91dfff/bencode2-0.3.24-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d9ba6b5894273d9c30d4f9b1a8af4349e23096a927862a8c4c9c71788832c73f",
                "md5": "8ce9e7588ccd0aa1d89c4644e11082d4",
                "sha256": "b63bfb002a86c52de314e7148a7e02accee53f3f2ab6bf2d33e0ce92049a4eb1"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8ce9e7588ccd0aa1d89c4644e11082d4",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 170966,
            "upload_time": "2025-02-23T15:22:31",
            "upload_time_iso_8601": "2025-02-23T15:22:31.873212Z",
            "url": "https://files.pythonhosted.org/packages/d9/ba/6b5894273d9c30d4f9b1a8af4349e23096a927862a8c4c9c71788832c73f/bencode2-0.3.24-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "398b6418e2313096f968744432d396d7d18afb6ba339d03ebab7ca37b4d42628",
                "md5": "086c127d63744dfab46f166dad399d55",
                "sha256": "bba1021ecea2a8e086aaa953c9c7805e5c18eac846b12cd9cf0a9086b2f4ad17"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "086c127d63744dfab46f166dad399d55",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 92856,
            "upload_time": "2025-02-23T15:22:34",
            "upload_time_iso_8601": "2025-02-23T15:22:34.052285Z",
            "url": "https://files.pythonhosted.org/packages/39/8b/6418e2313096f968744432d396d7d18afb6ba339d03ebab7ca37b4d42628/bencode2-0.3.24-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "83add7b45d6955ad4fec17329f7022c2437730731c1fba672c07b3a738c28d98",
                "md5": "bb580e7f11ff4b1d6437798f43f72d63",
                "sha256": "11e3862dad147223de35abd01a6b287f96fddeba1593b553e169aa4c2989df73"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "bb580e7f11ff4b1d6437798f43f72d63",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 121969,
            "upload_time": "2025-02-23T15:22:35",
            "upload_time_iso_8601": "2025-02-23T15:22:35.826585Z",
            "url": "https://files.pythonhosted.org/packages/83/ad/d7b45d6955ad4fec17329f7022c2437730731c1fba672c07b3a738c28d98/bencode2-0.3.24-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3216fc5fa3afc5cf200cd4bd4ac9bf7ad180722ed8d61cc7d69c8759edea1fcd",
                "md5": "e5228ae5296dab47fae222c7d3389b24",
                "sha256": "c756434a51160191d38a5b8df86a9aab2f8d0edf83b4c2999de77066c71c5345"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp311-cp311-macosx_11_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "e5228ae5296dab47fae222c7d3389b24",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 136819,
            "upload_time": "2025-02-23T15:22:37",
            "upload_time_iso_8601": "2025-02-23T15:22:37.216935Z",
            "url": "https://files.pythonhosted.org/packages/32/16/fc5fa3afc5cf200cd4bd4ac9bf7ad180722ed8d61cc7d69c8759edea1fcd/bencode2-0.3.24-cp311-cp311-macosx_11_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a9a8b2bfbc70f92adbce3e8e108e0815f06829302dbc7a2f688956f145385ff5",
                "md5": "cd27ddaad2c82f3351b6ce3a4146af51",
                "sha256": "7ebdd3976abdf6ffbf73e4c57b6f949c7e28db6bf3d3103c74a4f9bcf99b1619"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "cd27ddaad2c82f3351b6ce3a4146af51",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 163067,
            "upload_time": "2025-02-23T15:22:38",
            "upload_time_iso_8601": "2025-02-23T15:22:38.510536Z",
            "url": "https://files.pythonhosted.org/packages/a9/a8/b2bfbc70f92adbce3e8e108e0815f06829302dbc7a2f688956f145385ff5/bencode2-0.3.24-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fc740eecae16f0966f5cd6acd367e27955bb3af0348ef5ba6b1a9db10a4257af",
                "md5": "64757c49bd399f3b6696e2ca5eb2b7e0",
                "sha256": "fc2efb908d52708302ac43f9f42d16b9b5a20e953ffb1010884bf3ffc3b286fd"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "64757c49bd399f3b6696e2ca5eb2b7e0",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 170759,
            "upload_time": "2025-02-23T15:22:40",
            "upload_time_iso_8601": "2025-02-23T15:22:40.817722Z",
            "url": "https://files.pythonhosted.org/packages/fc/74/0eecae16f0966f5cd6acd367e27955bb3af0348ef5ba6b1a9db10a4257af/bencode2-0.3.24-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fb0b1a5d2622d280ca2d4bb126b52d4b67c9575334a17006bf56d8d2564e6290",
                "md5": "2948fe7efc61987710576484244dd213",
                "sha256": "ed8911339e5f061beaba5dd5f6b5a9e56bae6b7fc25834511d02dbc2e4557adf"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "2948fe7efc61987710576484244dd213",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 92737,
            "upload_time": "2025-02-23T15:22:42",
            "upload_time_iso_8601": "2025-02-23T15:22:42.176336Z",
            "url": "https://files.pythonhosted.org/packages/fb/0b/1a5d2622d280ca2d4bb126b52d4b67c9575334a17006bf56d8d2564e6290/bencode2-0.3.24-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2f4577698af267649ea01d8d8c048ed98c9b346964c48b45c1d5ca85bd5e9011",
                "md5": "05d175aa37291bb731d8768d0c069306",
                "sha256": "e8814bd6b981d0798d84e295de5e6f99f87cf3456ee686b74818b5a32103cc44"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "05d175aa37291bb731d8768d0c069306",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 121114,
            "upload_time": "2025-02-23T15:22:45",
            "upload_time_iso_8601": "2025-02-23T15:22:45.335799Z",
            "url": "https://files.pythonhosted.org/packages/2f/45/77698af267649ea01d8d8c048ed98c9b346964c48b45c1d5ca85bd5e9011/bencode2-0.3.24-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f21afc2a4c5bb37ad04e3f84ba938de5ff04bb14aee881a15e570023be27be42",
                "md5": "2a8043d25308ddedefe252f6f974eed0",
                "sha256": "12bb800b1ef7d00932bb718d19d9b7ec938b42be628a1f8cca1bff82f842feaa"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp312-cp312-macosx_11_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2a8043d25308ddedefe252f6f974eed0",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 136500,
            "upload_time": "2025-02-23T15:22:46",
            "upload_time_iso_8601": "2025-02-23T15:22:46.626723Z",
            "url": "https://files.pythonhosted.org/packages/f2/1a/fc2a4c5bb37ad04e3f84ba938de5ff04bb14aee881a15e570023be27be42/bencode2-0.3.24-cp312-cp312-macosx_11_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "238542f91783246f60663134c5fc59311f0a63a0bb2b7bf8336ac13c22b13d23",
                "md5": "2f426f330b8d2c6239f7a0c2f309860d",
                "sha256": "6a6335eaa09ca27e69a25c3dd9f751704ecd5b95343a6adfa84e21e4835a1e6e"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "2f426f330b8d2c6239f7a0c2f309860d",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 161429,
            "upload_time": "2025-02-23T15:22:48",
            "upload_time_iso_8601": "2025-02-23T15:22:48.045380Z",
            "url": "https://files.pythonhosted.org/packages/23/85/42f91783246f60663134c5fc59311f0a63a0bb2b7bf8336ac13c22b13d23/bencode2-0.3.24-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "aad23f7c6a34616ab1ec8c984f1cb19d88d73c7a55e6befb8050b0c19b6b246c",
                "md5": "3d1d72317643ef64b894583f03505b2c",
                "sha256": "6640aa2d25db1fe7ef305a6f8083943261053ea1888189b02a0ac5c9251e3228"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3d1d72317643ef64b894583f03505b2c",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 168531,
            "upload_time": "2025-02-23T15:22:49",
            "upload_time_iso_8601": "2025-02-23T15:22:49.570503Z",
            "url": "https://files.pythonhosted.org/packages/aa/d2/3f7c6a34616ab1ec8c984f1cb19d88d73c7a55e6befb8050b0c19b6b246c/bencode2-0.3.24-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "507f8c9a58d4ca60d5c6de0237e2695e29ce90369b8b80bdf1e1474463bb03ab",
                "md5": "63026b48902faef883fa02acf568f720",
                "sha256": "cfa74c6f8039e723e4ed0594eb9ff83f361b4772c3cc777d10529f0e5c3b4d85"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "63026b48902faef883fa02acf568f720",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 92571,
            "upload_time": "2025-02-23T15:22:51",
            "upload_time_iso_8601": "2025-02-23T15:22:51.092285Z",
            "url": "https://files.pythonhosted.org/packages/50/7f/8c9a58d4ca60d5c6de0237e2695e29ce90369b8b80bdf1e1474463bb03ab/bencode2-0.3.24-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "12134e49c2f41b9860f653ef7379ff29597d7e03a8140e156e41d5e775138ec1",
                "md5": "efba6773c145d84f4bc13656dc5be58d",
                "sha256": "6e2c0bed03b37cf8506aec636bc8863b9daabeb822698ae69728aafaf2ddbdf7"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "efba6773c145d84f4bc13656dc5be58d",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 121087,
            "upload_time": "2025-02-23T15:22:53",
            "upload_time_iso_8601": "2025-02-23T15:22:53.162071Z",
            "url": "https://files.pythonhosted.org/packages/12/13/4e49c2f41b9860f653ef7379ff29597d7e03a8140e156e41d5e775138ec1/bencode2-0.3.24-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "586e04b17cedfa083d2a2757a108664fc68cf6a775a28727a61379e9515a5367",
                "md5": "45935f3bbfab7743e4d4464b700e3901",
                "sha256": "456866decba0d2c97c5c02f275c58e0ef9e3a89f401d0719cccf922b9d52e608"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp313-cp313-macosx_11_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "45935f3bbfab7743e4d4464b700e3901",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 136511,
            "upload_time": "2025-02-23T15:22:54",
            "upload_time_iso_8601": "2025-02-23T15:22:54.607579Z",
            "url": "https://files.pythonhosted.org/packages/58/6e/04b17cedfa083d2a2757a108664fc68cf6a775a28727a61379e9515a5367/bencode2-0.3.24-cp313-cp313-macosx_11_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2c635ed870a75645beb9aea521aebbcf3049271dd37e371b16501582a2e77dc5",
                "md5": "e41bc4c76643c64fa39f8173854d3a36",
                "sha256": "05439ebc0b1a82003be0a90d172f07aa14111ffac58e6f8c42cb319fe9c36c03"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "e41bc4c76643c64fa39f8173854d3a36",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 161427,
            "upload_time": "2025-02-23T15:22:56",
            "upload_time_iso_8601": "2025-02-23T15:22:56.725082Z",
            "url": "https://files.pythonhosted.org/packages/2c/63/5ed870a75645beb9aea521aebbcf3049271dd37e371b16501582a2e77dc5/bencode2-0.3.24-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d4116f5ce8b9a3c423e4fb81b5528536b9f2a7bcd9d7fd155b524400edeb145b",
                "md5": "ed991d09065d918335c13356f427b510",
                "sha256": "415f78e058c37d1653b8bf76bb251631d090cc8698054252e9a27f0c21416dfb"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ed991d09065d918335c13356f427b510",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 168587,
            "upload_time": "2025-02-23T15:22:58",
            "upload_time_iso_8601": "2025-02-23T15:22:58.064857Z",
            "url": "https://files.pythonhosted.org/packages/d4/11/6f5ce8b9a3c423e4fb81b5528536b9f2a7bcd9d7fd155b524400edeb145b/bencode2-0.3.24-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e6cfe37a902dd80ee00c8478482482c8c63b500349f9de5d6358e1ec3603e018",
                "md5": "848774eabc0edff64ecc90a964b56fe8",
                "sha256": "adfa1387a02a050c853d5dee51283b7669905f6213453cb3759754ff33d69a4e"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp313-cp313t-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "848774eabc0edff64ecc90a964b56fe8",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 124802,
            "upload_time": "2025-02-23T15:23:00",
            "upload_time_iso_8601": "2025-02-23T15:23:00.793640Z",
            "url": "https://files.pythonhosted.org/packages/e6/cf/e37a902dd80ee00c8478482482c8c63b500349f9de5d6358e1ec3603e018/bencode2-0.3.24-cp313-cp313t-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "333e3187b289dcdef54d36e38c6df1d436ef35c788692a7bdbed7a21b7dfe430",
                "md5": "bba64de0a06724879c78c6077510748a",
                "sha256": "e9a5da2487bde6d83725af2f95ec780c8385adb3d480e633a19842f2722f859f"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp313-cp313t-macosx_11_0_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bba64de0a06724879c78c6077510748a",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 139583,
            "upload_time": "2025-02-23T15:23:02",
            "upload_time_iso_8601": "2025-02-23T15:23:02.104517Z",
            "url": "https://files.pythonhosted.org/packages/33/3e/3187b289dcdef54d36e38c6df1d436ef35c788692a7bdbed7a21b7dfe430/bencode2-0.3.24-cp313-cp313t-macosx_11_0_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fb168610c1d2baa0eab259eee8f89116d3a6d5d31084897b8e369e321944b5c8",
                "md5": "ac36523933e1ee615fb41f72f7a3c9b7",
                "sha256": "5577cf70c6c7ddb5d11ae9ae7f552146884c05f1a55ce2686dda8416a5a840fd"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "ac36523933e1ee615fb41f72f7a3c9b7",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 166053,
            "upload_time": "2025-02-23T15:23:04",
            "upload_time_iso_8601": "2025-02-23T15:23:04.317982Z",
            "url": "https://files.pythonhosted.org/packages/fb/16/8610c1d2baa0eab259eee8f89116d3a6d5d31084897b8e369e321944b5c8/bencode2-0.3.24-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5407f72605eb5fa919760fc57033f6ccc1be0b44dd55fbb7867e513e981056df",
                "md5": "4a3bef78d0b096d40d2275bcd0665e4a",
                "sha256": "caa05be2b6ce9b4d6451f08760f550c406391d8e5bcaf7ecb785a480a652cf45"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4a3bef78d0b096d40d2275bcd0665e4a",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 173897,
            "upload_time": "2025-02-23T15:23:06",
            "upload_time_iso_8601": "2025-02-23T15:23:06.224011Z",
            "url": "https://files.pythonhosted.org/packages/54/07/f72605eb5fa919760fc57033f6ccc1be0b44dd55fbb7867e513e981056df/bencode2-0.3.24-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "966fd88bf02fccf2ca19153db97223b86b49be05a20724732a6cb2d7ebae6f9f",
                "md5": "63584a9aef996c1b0b71c714d571485f",
                "sha256": "877f371d8a771966961da1673e8d1bec865b4e1b709a0464617e77a839ef345c"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp313-cp313t-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "63584a9aef996c1b0b71c714d571485f",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 94560,
            "upload_time": "2025-02-23T15:23:07",
            "upload_time_iso_8601": "2025-02-23T15:23:07.601888Z",
            "url": "https://files.pythonhosted.org/packages/96/6f/d88bf02fccf2ca19153db97223b86b49be05a20724732a6cb2d7ebae6f9f/bencode2-0.3.24-cp313-cp313t-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "444a1c31d9cc68f0bcba1ebe2004bb78c91db0ad13e06e15cc05f233b5bedff4",
                "md5": "a397f8d74cb200c5d7a56c8f7adcf55d",
                "sha256": "130da7e478985f888eb4c3919cb69df87d06ba766d1b02263416c28c80f8cfb0"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a397f8d74cb200c5d7a56c8f7adcf55d",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 92584,
            "upload_time": "2025-02-23T15:22:59",
            "upload_time_iso_8601": "2025-02-23T15:22:59.566511Z",
            "url": "https://files.pythonhosted.org/packages/44/4a/1c31d9cc68f0bcba1ebe2004bb78c91db0ad13e06e15cc05f233b5bedff4/bencode2-0.3.24-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3e79792434fccc8d5cb3646d460fd9c50020bcebdfc26f9ad9b9a6fba0acbe5d",
                "md5": "4f750713fd6986846f439c5113d90c03",
                "sha256": "aa476e57aecd3b3ffde1ca17954fd587d25b582557145e7a98491732d3ece566"
            },
            "downloads": -1,
            "filename": "bencode2-0.3.24-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4f750713fd6986846f439c5113d90c03",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.9",
            "size": 14514,
            "upload_time": "2025-02-23T15:23:08",
            "upload_time_iso_8601": "2025-02-23T15:23:08.802319Z",
            "url": "https://files.pythonhosted.org/packages/3e/79/792434fccc8d5cb3646d460fd9c50020bcebdfc26f9ad9b9a6fba0acbe5d/bencode2-0.3.24-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-23 15:22:25",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "trim21",
    "github_project": "bencode-py",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "meson-python",
            "specs": [
                [
                    ">=",
                    "0.14.0"
                ]
            ]
        },
        {
            "name": "meson",
            "specs": [
                [
                    ">=",
                    "1.2.1"
                ]
            ]
        },
        {
            "name": "flit-core",
            "specs": [
                [
                    "<",
                    "4"
                ]
            ]
        },
        {
            "name": "typing_extensions",
            "specs": []
        },
        {
            "name": "mypy",
            "specs": []
        },
        {
            "name": "pytest",
            "specs": [
                [
                    "==",
                    "8.3.4"
                ]
            ]
        },
        {
            "name": "pytest-cov",
            "specs": [
                [
                    "==",
                    "6.0.0"
                ]
            ]
        },
        {
            "name": "pytest-codspeed",
            "specs": [
                [
                    "==",
                    "3.2.0"
                ]
            ]
        },
        {
            "name": "pytest-github-actions-annotate-failures",
            "specs": [
                [
                    "==",
                    "0.3.0"
                ]
            ]
        },
        {
            "name": "pre-commit",
            "specs": []
        }
    ],
    "lcname": "bencode2"
}
        
Elapsed time: 0.41929s