# 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
```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[](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```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"
}