# A fast and correct bencode serialize/deserialize library
[](https://pypi.org/project/bencode2/)
[](https://github.com/trim21/bencode-py/actions/workflows/tests.yaml)
[](https://dl.circleci.com/status-badge/redirect/gh/trim21/bencode-py/tree/master)
[](https://pypi.org/project/bencode2/)
[](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
### pypi
```shell
pip install bencode2
```
### conda/pixi
you can install conda package `bencode2` from <https://prefix.dev/channels/trim21-pkgs/packages/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[](https://pypi.org/project/bencode2/)\n[](https://github.com/trim21/bencode-py/actions/workflows/tests.yaml)\n[](https://dl.circleci.com/status-badge/redirect/gh/trim21/bencode-py/tree/master)\n[](https://pypi.org/project/bencode2/)\n[](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### pypi\n\n```shell\npip install bencode2\n```\n\n### conda/pixi\n\nyou can install conda package `bencode2` from <https://prefix.dev/channels/trim21-pkgs/packages/bencode2>.\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.27",
"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": "82173a8d4e6c3c49b2bbd77e8eeccb907446d4cb04ef8965c1f926d83a706cf5",
"md5": "18c3ab31b4fc039425808f076494e025",
"sha256": "f62674e83255f065e344dcb9d14dff649a805d74561309629350879fd204222f"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "18c3ab31b4fc039425808f076494e025",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.9",
"size": 93474,
"upload_time": "2025-10-08T05:20:02",
"upload_time_iso_8601": "2025-10-08T05:20:02.507774Z",
"url": "https://files.pythonhosted.org/packages/82/17/3a8d4e6c3c49b2bbd77e8eeccb907446d4cb04ef8965c1f926d83a706cf5/bencode2-0.3.27-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d3befd02d63d2e73405c6105e9e9ff2fac753bd132eb8e79a751fb12234a3b33",
"md5": "d5b6d2a4c84dcac0f5ff58b6aa2d422d",
"sha256": "5e42119ca51e8110f4b4d76ab53b934aef06b6962fb9195e55974d25d37453ea"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "d5b6d2a4c84dcac0f5ff58b6aa2d422d",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.9",
"size": 111863,
"upload_time": "2025-10-08T05:20:04",
"upload_time_iso_8601": "2025-10-08T05:20:04.863314Z",
"url": "https://files.pythonhosted.org/packages/d3/be/fd02d63d2e73405c6105e9e9ff2fac753bd132eb8e79a751fb12234a3b33/bencode2-0.3.27-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7e3717edbe2e8a2abb2fb26b060e9676425e9fbba76953fbfb1aedc55bd4c781",
"md5": "789d1dc91001d1e21d6de684927c5f7d",
"sha256": "65bee5140826a0e95359d37769e9c48fe2156e16aac50b233ad5745197a846b5"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "789d1dc91001d1e21d6de684927c5f7d",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.9",
"size": 120019,
"upload_time": "2025-10-08T05:20:06",
"upload_time_iso_8601": "2025-10-08T05:20:06.249301Z",
"url": "https://files.pythonhosted.org/packages/7e/37/17edbe2e8a2abb2fb26b060e9676425e9fbba76953fbfb1aedc55bd4c781/bencode2-0.3.27-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f2f43ab47c6560717e2819c66e9d15deaf7fff3d8b8f16f39b8d14bbe70b5e35",
"md5": "e560bb2e8b7a10c90cbcaf66a437b3c7",
"sha256": "6562ecfa3999068e026cb109e9f365edbf00c1bbd63de7cbd98edd6a765beb88"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "e560bb2e8b7a10c90cbcaf66a437b3c7",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.9",
"size": 94284,
"upload_time": "2025-10-08T05:20:07",
"upload_time_iso_8601": "2025-10-08T05:20:07.661435Z",
"url": "https://files.pythonhosted.org/packages/f2/f4/3ab47c6560717e2819c66e9d15deaf7fff3d8b8f16f39b8d14bbe70b5e35/bencode2-0.3.27-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "221cfa472977195b4a7bb416e70c0666af432777c3b6a1596af05fbc7ae1ea59",
"md5": "fadb1486813550c394fae48e20f82df5",
"sha256": "c249391d5cdf0a5617f6c29df00ed036c60b1fae0b5a08040b25abc0b5318c9a"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp310-cp310-win_arm64.whl",
"has_sig": false,
"md5_digest": "fadb1486813550c394fae48e20f82df5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.9",
"size": 90149,
"upload_time": "2025-10-08T05:20:09",
"upload_time_iso_8601": "2025-10-08T05:20:09.023862Z",
"url": "https://files.pythonhosted.org/packages/22/1c/fa472977195b4a7bb416e70c0666af432777c3b6a1596af05fbc7ae1ea59/bencode2-0.3.27-cp310-cp310-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "90f16c09b699ec1c6b59b9f100c4f03029110d542c5f5a192ca33f5864175dd5",
"md5": "9982799375eb0e3aef792dcd781ff544",
"sha256": "b26e880d38a17a8365a10720f535aeb71fd6d671bde23ecb1b3ca8bf27d40252"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "9982799375eb0e3aef792dcd781ff544",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.9",
"size": 93345,
"upload_time": "2025-10-08T05:20:10",
"upload_time_iso_8601": "2025-10-08T05:20:10.416127Z",
"url": "https://files.pythonhosted.org/packages/90/f1/6c09b699ec1c6b59b9f100c4f03029110d542c5f5a192ca33f5864175dd5/bencode2-0.3.27-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "8958b0ca220c34da957b2e3d663f0c88aaeb70926129cbb23898a94a2f3ca6dd",
"md5": "687dbb71bb623fb646bcbc258b3fee66",
"sha256": "ba0bb2f0211efd2566a7c6593d0bd04a3f27405c48404b2bc264a69c2784e87b"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "687dbb71bb623fb646bcbc258b3fee66",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.9",
"size": 111813,
"upload_time": "2025-10-08T05:20:11",
"upload_time_iso_8601": "2025-10-08T05:20:11.930781Z",
"url": "https://files.pythonhosted.org/packages/89/58/b0ca220c34da957b2e3d663f0c88aaeb70926129cbb23898a94a2f3ca6dd/bencode2-0.3.27-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fa010f712a0b59d73c5f96a87b6afe81a7c93239f9df4e2d199fda39fdcde486",
"md5": "2d6a36c10643393f8d7442d024cbb8eb",
"sha256": "224af86cfee91785cb6f6ec1130c89ae619773d0853a8000dfb56b1495db4919"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "2d6a36c10643393f8d7442d024cbb8eb",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.9",
"size": 119984,
"upload_time": "2025-10-08T05:20:12",
"upload_time_iso_8601": "2025-10-08T05:20:12.954819Z",
"url": "https://files.pythonhosted.org/packages/fa/01/0f712a0b59d73c5f96a87b6afe81a7c93239f9df4e2d199fda39fdcde486/bencode2-0.3.27-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "eb2d82ef75080d73b835075d9cb83210485c2020ce986cb45631edca57aca667",
"md5": "08ec87e7fbfa03aed54e9be4337b3874",
"sha256": "db03695d2c5580469a0eda60b1531f0e712ca82affa0b9fae969244673bc6b98"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "08ec87e7fbfa03aed54e9be4337b3874",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.9",
"size": 93958,
"upload_time": "2025-10-08T05:20:13",
"upload_time_iso_8601": "2025-10-08T05:20:13.962209Z",
"url": "https://files.pythonhosted.org/packages/eb/2d/82ef75080d73b835075d9cb83210485c2020ce986cb45631edca57aca667/bencode2-0.3.27-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d218227fd8078d23123ae6b3c3696c2ba76a8b2ef221f8529b570e658f9288a0",
"md5": "ebe62e689e9186173ce32c5c82802ccd",
"sha256": "b9c93b49aff64b7cf05a98d545159421ebb046f5a6d20437f3fd694810844585"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp311-cp311-win_arm64.whl",
"has_sig": false,
"md5_digest": "ebe62e689e9186173ce32c5c82802ccd",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.9",
"size": 90016,
"upload_time": "2025-10-08T05:20:14",
"upload_time_iso_8601": "2025-10-08T05:20:14.989933Z",
"url": "https://files.pythonhosted.org/packages/d2/18/227fd8078d23123ae6b3c3696c2ba76a8b2ef221f8529b570e658f9288a0/bencode2-0.3.27-cp311-cp311-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "36cb0a6329d20c92eae12205322e2297973957adfd4bef2055a3ceb3de058dc5",
"md5": "61bc55f5010c52a8da65131c544dda82",
"sha256": "6bd20146a7ce3bb0d9dfcc3810dd57ea59885fb9f6cfb6e89be6bddda4a729d6"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "61bc55f5010c52a8da65131c544dda82",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.9",
"size": 93045,
"upload_time": "2025-10-08T05:20:16",
"upload_time_iso_8601": "2025-10-08T05:20:16.440466Z",
"url": "https://files.pythonhosted.org/packages/36/cb/0a6329d20c92eae12205322e2297973957adfd4bef2055a3ceb3de058dc5/bencode2-0.3.27-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7d21cfd849e0c752cd599a2f77cc22baa9bcd7f8704d40fddefdd4b91e4b29f8",
"md5": "4c599ecbbeb4faa75f60ff3b435b15cb",
"sha256": "e091d8f4c2b2f1d80c9df8c6044c2168ade492b04bf5ba216ac54aa09f06203d"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "4c599ecbbeb4faa75f60ff3b435b15cb",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.9",
"size": 111283,
"upload_time": "2025-10-08T05:20:17",
"upload_time_iso_8601": "2025-10-08T05:20:17.514304Z",
"url": "https://files.pythonhosted.org/packages/7d/21/cfd849e0c752cd599a2f77cc22baa9bcd7f8704d40fddefdd4b91e4b29f8/bencode2-0.3.27-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e230a23394d2c57c2eb3dc205f075096f2c2c27941ee806de615e5e8e3f854f8",
"md5": "4271d2abb4cc735fd8fbfa4103e0f312",
"sha256": "48735815c87185d6f99f238dac37b4bb68ccabb31a74ed4f48698a08fde67d04"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "4271d2abb4cc735fd8fbfa4103e0f312",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.9",
"size": 119558,
"upload_time": "2025-10-08T05:20:18",
"upload_time_iso_8601": "2025-10-08T05:20:18.752186Z",
"url": "https://files.pythonhosted.org/packages/e2/30/a23394d2c57c2eb3dc205f075096f2c2c27941ee806de615e5e8e3f854f8/bencode2-0.3.27-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "57e805a58599b41ccecca0cae498aedcabeb684a03f59de2ecfcfae3e22325e7",
"md5": "bcc0a2580e8680e9deb2f1c0aba9d2ad",
"sha256": "a8ca6131097407956bc500289739c37ea8c132ae4224688506032c7a392e1dcb"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "bcc0a2580e8680e9deb2f1c0aba9d2ad",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.9",
"size": 93697,
"upload_time": "2025-10-08T05:20:20",
"upload_time_iso_8601": "2025-10-08T05:20:20.203880Z",
"url": "https://files.pythonhosted.org/packages/57/e8/05a58599b41ccecca0cae498aedcabeb684a03f59de2ecfcfae3e22325e7/bencode2-0.3.27-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "84e00bafe5c516930a2b4f0ab44e29459643daa4e837fed3eee78fc0be398228",
"md5": "d268ce1d2bf939e75d804db85e58edce",
"sha256": "fcc2e23afbf8df94ee7581293ad188fbd6aacd30f8c16761c17a29a835706504"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp312-cp312-win_arm64.whl",
"has_sig": false,
"md5_digest": "d268ce1d2bf939e75d804db85e58edce",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.9",
"size": 89888,
"upload_time": "2025-10-08T05:20:21",
"upload_time_iso_8601": "2025-10-08T05:20:21.615046Z",
"url": "https://files.pythonhosted.org/packages/84/e0/0bafe5c516930a2b4f0ab44e29459643daa4e837fed3eee78fc0be398228/bencode2-0.3.27-cp312-cp312-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d843d86ad72e983af1c3486828af7b8ac4eb6ee75c4b6c34886a644ac7cac29e",
"md5": "67e5c7dd8810341223c5bbf315a62766",
"sha256": "8eae9d8085002f670a5c193bd69f9b928aab54db1e5edcaa78e1ae04fc1eaa12"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "67e5c7dd8810341223c5bbf315a62766",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 92950,
"upload_time": "2025-10-08T05:20:22",
"upload_time_iso_8601": "2025-10-08T05:20:22.811802Z",
"url": "https://files.pythonhosted.org/packages/d8/43/d86ad72e983af1c3486828af7b8ac4eb6ee75c4b6c34886a644ac7cac29e/bencode2-0.3.27-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d5d506d38360ae26902b85feb49d48862c9bff0cd855abbdc35bbbd20ab7b439",
"md5": "0f7bac121709cdfad98c55f201fc2eb3",
"sha256": "ab43170101411b8b6ab14a5024e2860eb5f5ecfb02fc57b9b43c41de42c5c3b0"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "0f7bac121709cdfad98c55f201fc2eb3",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 111268,
"upload_time": "2025-10-08T05:20:24",
"upload_time_iso_8601": "2025-10-08T05:20:24.178583Z",
"url": "https://files.pythonhosted.org/packages/d5/d5/06d38360ae26902b85feb49d48862c9bff0cd855abbdc35bbbd20ab7b439/bencode2-0.3.27-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c985689932a449617c91bfb24d3b05009d041fa9f0ae319de67bcc71c1cd1bd0",
"md5": "49574120bf2dd2e5e51d1b5e7b1ec889",
"sha256": "9238361b64a459a2601469a2d6c1a6463691817231c51c657c8631eccd5751f2"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "49574120bf2dd2e5e51d1b5e7b1ec889",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 119500,
"upload_time": "2025-10-08T05:20:25",
"upload_time_iso_8601": "2025-10-08T05:20:25.628800Z",
"url": "https://files.pythonhosted.org/packages/c9/85/689932a449617c91bfb24d3b05009d041fa9f0ae319de67bcc71c1cd1bd0/bencode2-0.3.27-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "efb682df129b3b897715c670a69227378311bf571e56aa38142c1f2d99056103",
"md5": "a82c1e3f9ce4c57c6155118ded90be5c",
"sha256": "eca980577050d26f1a0002bebda85409633214486a2f02757b38a43338f5a171"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp313-cp313t-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "a82c1e3f9ce4c57c6155118ded90be5c",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 93615,
"upload_time": "2025-10-08T05:20:29",
"upload_time_iso_8601": "2025-10-08T05:20:29.024561Z",
"url": "https://files.pythonhosted.org/packages/ef/b6/82df129b3b897715c670a69227378311bf571e56aa38142c1f2d99056103/bencode2-0.3.27-cp313-cp313t-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6e3bd033524879d6a4df3138203ae4ad224439155a26c6d6553cb1bc419b98c6",
"md5": "37b9701aea5763a9605c643fb3fc68a3",
"sha256": "d6bfa7822bc8d9da16c9c4b054a1f33a73618b76378fd0c1287e4583458cb75f"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "37b9701aea5763a9605c643fb3fc68a3",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 93641,
"upload_time": "2025-10-08T05:20:27",
"upload_time_iso_8601": "2025-10-08T05:20:27.012147Z",
"url": "https://files.pythonhosted.org/packages/6e/3b/d033524879d6a4df3138203ae4ad224439155a26c6d6553cb1bc419b98c6/bencode2-0.3.27-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "3c76a5d8b521e181607f305b7eff9cf80a6e7e129c8ea5901303d0b038ccb450",
"md5": "03011124a11e08d2ae930efdfbfa0e21",
"sha256": "0c04108b1c55613c8dc02c651227b768fe568169650d01859225f1d65bdf769d"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp313-cp313-win_arm64.whl",
"has_sig": false,
"md5_digest": "03011124a11e08d2ae930efdfbfa0e21",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 89795,
"upload_time": "2025-10-08T05:20:27",
"upload_time_iso_8601": "2025-10-08T05:20:27.986777Z",
"url": "https://files.pythonhosted.org/packages/3c/76/a5d8b521e181607f305b7eff9cf80a6e7e129c8ea5901303d0b038ccb450/bencode2-0.3.27-cp313-cp313-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "03e4df02357665dff78d64bd5950697fa4cd3e2917f437b1b1402a27fba3b369",
"md5": "53d0fffb1d4e1c8c96340cc192c6180f",
"sha256": "75f94882767f8aca10aab165b9784477681e6d9f6fd4680160719c91dbdf2f36"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp314-cp314-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "53d0fffb1d4e1c8c96340cc192c6180f",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": "<4.0,>=3.9",
"size": 93113,
"upload_time": "2025-10-08T05:20:30",
"upload_time_iso_8601": "2025-10-08T05:20:30.153228Z",
"url": "https://files.pythonhosted.org/packages/03/e4/df02357665dff78d64bd5950697fa4cd3e2917f437b1b1402a27fba3b369/bencode2-0.3.27-cp314-cp314-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ebc89621a21450dab5aab7e85a20f4aee07c8d91adafdbacbfb0d7a32af3448b",
"md5": "39ff824141a2083b64487a190f760b33",
"sha256": "e4343de8ee10048f2f7f6544ed98f4f9e08f3c42211385ff0e57bc4d7844c24d"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl",
"has_sig": false,
"md5_digest": "39ff824141a2083b64487a190f760b33",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": "<4.0,>=3.9",
"size": 111478,
"upload_time": "2025-10-08T05:20:31",
"upload_time_iso_8601": "2025-10-08T05:20:31.191764Z",
"url": "https://files.pythonhosted.org/packages/eb/c8/9621a21450dab5aab7e85a20f4aee07c8d91adafdbacbfb0d7a32af3448b/bencode2-0.3.27-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "71f8fff0ae6e9235c5d0fcebd08e86d7e78c7f145d50c0aa3f830947d7949113",
"md5": "4772a09afd11c8442d6a77e755f6c124",
"sha256": "01c7842d639bafb994349b069c51dba3f8c9e03bc553ee198a02e513d45428fc"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "4772a09afd11c8442d6a77e755f6c124",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": "<4.0,>=3.9",
"size": 119602,
"upload_time": "2025-10-08T05:20:32",
"upload_time_iso_8601": "2025-10-08T05:20:32.543985Z",
"url": "https://files.pythonhosted.org/packages/71/f8/fff0ae6e9235c5d0fcebd08e86d7e78c7f145d50c0aa3f830947d7949113/bencode2-0.3.27-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "99364d76f2ac02ffba365533cc20113e21a8212811deda04251aa0f2038b8b60",
"md5": "cc07be04609375ac181deb7839c631b5",
"sha256": "5ff63192f6feaebac2445d0d56ef3117a6bc7d5479fadc27b9d15c87831fb310"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp314-cp314t-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "cc07be04609375ac181deb7839c631b5",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": "<4.0,>=3.9",
"size": 93614,
"upload_time": "2025-10-08T05:20:36",
"upload_time_iso_8601": "2025-10-08T05:20:36.263693Z",
"url": "https://files.pythonhosted.org/packages/99/36/4d76f2ac02ffba365533cc20113e21a8212811deda04251aa0f2038b8b60/bencode2-0.3.27-cp314-cp314t-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1fc984a51058fd8879399a7beebe605eff760a84c1c93ac2c703c7c17e90cc89",
"md5": "0c1ca8b19cf23f0515d2a319304d1e17",
"sha256": "b1066233ac7ec55a8560482b2e5cfd5f7b35285adfc379e559edd5a62b5b587f"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp314-cp314-win_amd64.whl",
"has_sig": false,
"md5_digest": "0c1ca8b19cf23f0515d2a319304d1e17",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": "<4.0,>=3.9",
"size": 96280,
"upload_time": "2025-10-08T05:20:33",
"upload_time_iso_8601": "2025-10-08T05:20:33.810610Z",
"url": "https://files.pythonhosted.org/packages/1f/c9/84a51058fd8879399a7beebe605eff760a84c1c93ac2c703c7c17e90cc89/bencode2-0.3.27-cp314-cp314-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0345127d92529e5aca993f07363bbf7cec5f20fd43b767ad379dbbe9877f9100",
"md5": "be4a2e29f81eb0462c2c727e9446394b",
"sha256": "c1ea9294b39224968dae585227952793a4353604fb887360f13f99244e2a8c99"
},
"downloads": -1,
"filename": "bencode2-0.3.27-cp314-cp314-win_arm64.whl",
"has_sig": false,
"md5_digest": "be4a2e29f81eb0462c2c727e9446394b",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": "<4.0,>=3.9",
"size": 92388,
"upload_time": "2025-10-08T05:20:35",
"upload_time_iso_8601": "2025-10-08T05:20:35.229941Z",
"url": "https://files.pythonhosted.org/packages/03/45/127d92529e5aca993f07363bbf7cec5f20fd43b767ad379dbbe9877f9100/bencode2-0.3.27-cp314-cp314-win_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "50583bca74753cc7695d7a58e8e2384b97516b36d02bc87a46308bc8bd435d1a",
"md5": "68bc493973f97894b25629aa4ee2f612",
"sha256": "78c464ed162e278c0ba6bacf642e7002051e4c4dea57ab036238d59985200ab3"
},
"downloads": -1,
"filename": "bencode2-0.3.27-py3-none-any.whl",
"has_sig": false,
"md5_digest": "68bc493973f97894b25629aa4ee2f612",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.9",
"size": 14813,
"upload_time": "2025-10-08T05:20:37",
"upload_time_iso_8601": "2025-10-08T05:20:37.595001Z",
"url": "https://files.pythonhosted.org/packages/50/58/3bca74753cc7695d7a58e8e2384b97516b36d02bc87a46308bc8bd435d1a/bencode2-0.3.27-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-08 05:20:02",
"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.9.1"
]
]
},
{
"name": "flit-core",
"specs": [
[
"<",
"4"
]
]
},
{
"name": "typing_extensions",
"specs": []
},
{
"name": "mypy",
"specs": []
},
{
"name": "pytest",
"specs": [
[
"==",
"8.4.2"
]
]
},
{
"name": "pytest-cov",
"specs": [
[
"==",
"7.0.0"
]
]
},
{
"name": "pytest-codspeed",
"specs": [
[
"==",
"4.1.1"
]
]
},
{
"name": "pytest-github-actions-annotate-failures",
"specs": [
[
"==",
"0.3.0"
]
]
},
{
"name": "pre-commit",
"specs": []
}
],
"lcname": "bencode2"
}