# 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 -Dbuildtype=release -Dpython.allow_limited_api=false
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 -Dbuildtype=release -Dpython.allow_limited_api=false\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.21",
"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": "",
"digests": {
"blake2b_256": "7801147abbcd4cea92c9a83aefa42cd5132f03e296780520bdb1b6e213a71fa1",
"md5": "4e0553795e5bbd4c875aea05b348f43c",
"sha256": "4cd89de770f5b177342917521404c146cb0f11b40cb815f4bc09aca17784fa26"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "4e0553795e5bbd4c875aea05b348f43c",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.9",
"size": 125765,
"upload_time": "2024-12-10T13:55:31",
"upload_time_iso_8601": "2024-12-10T13:55:31.068808Z",
"url": "https://files.pythonhosted.org/packages/78/01/147abbcd4cea92c9a83aefa42cd5132f03e296780520bdb1b6e213a71fa1/bencode2-0.3.21-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fdfc0ed009232a649f1725cd378bf94e568005ee965963abc6e6b3744e3909c1",
"md5": "fbf111e7013e87cd4ff5fd4103def8ba",
"sha256": "7cbbb5c9c18702950130a6f0d12b63f9855625274c41aa3f02313afbd7ce0f22"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp310-cp310-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "fbf111e7013e87cd4ff5fd4103def8ba",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.9",
"size": 138209,
"upload_time": "2024-12-10T13:55:33",
"upload_time_iso_8601": "2024-12-10T13:55:33.507937Z",
"url": "https://files.pythonhosted.org/packages/fd/fc/0ed009232a649f1725cd378bf94e568005ee965963abc6e6b3744e3909c1/bencode2-0.3.21-cp310-cp310-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "beb9bb9c4c2010456dd45cc3b099fb2dcb2a6884cb0e72d36142e17d35e302a8",
"md5": "890984564340bc8eb9a93f1a8ab08971",
"sha256": "06c8ba77c642a9a12d7802ed0798bfba9ce76b3d122f12cd0aee322374aaeeb9"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "890984564340bc8eb9a93f1a8ab08971",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.9",
"size": 169566,
"upload_time": "2024-12-10T13:53:53",
"upload_time_iso_8601": "2024-12-10T13:53:53.819450Z",
"url": "https://files.pythonhosted.org/packages/be/b9/bb9c4c2010456dd45cc3b099fb2dcb2a6884cb0e72d36142e17d35e302a8/bencode2-0.3.21-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d539607afb6dfdd7e2ca37cdfa8e45ba150ea950fb20d0059249acb1a377da23",
"md5": "bf1ba8478ed51ebcd7889b11336fb0b5",
"sha256": "f2faef3d02740a0712ac1ed25d1d9cd69ed2c16c43ccc0cea8b3c8f4bc049d0b"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "bf1ba8478ed51ebcd7889b11336fb0b5",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.9",
"size": 177016,
"upload_time": "2024-12-10T13:55:35",
"upload_time_iso_8601": "2024-12-10T13:55:35.368760Z",
"url": "https://files.pythonhosted.org/packages/d5/39/607afb6dfdd7e2ca37cdfa8e45ba150ea950fb20d0059249acb1a377da23/bencode2-0.3.21-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9e425a19a20460619704ca7816ec29cdf67574ca67f6cc6de9121bd8a01439b7",
"md5": "6c998ddb60b2e74bb16c7f5e3caef632",
"sha256": "827f44abe872ebe23529b6a6b91d1a9c4f29abdc736e3eb004e2f8273073fb3a"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "6c998ddb60b2e74bb16c7f5e3caef632",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": "<4.0,>=3.9",
"size": 99416,
"upload_time": "2024-12-10T13:55:37",
"upload_time_iso_8601": "2024-12-10T13:55:37.873511Z",
"url": "https://files.pythonhosted.org/packages/9e/42/5a19a20460619704ca7816ec29cdf67574ca67f6cc6de9121bd8a01439b7/bencode2-0.3.21-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "81e3718c07617f405d95298aec3cfe09f1d2413f6c804fed48b1662f00598886",
"md5": "6fcceb1ba48614980dcc008b8b7acdcf",
"sha256": "4b250e4c3ea24b135b316f90b84e53eb5ed288dbe683c0b8ee7d6b7e9f40fd9e"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "6fcceb1ba48614980dcc008b8b7acdcf",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.9",
"size": 125513,
"upload_time": "2024-12-10T13:55:40",
"upload_time_iso_8601": "2024-12-10T13:55:40.248271Z",
"url": "https://files.pythonhosted.org/packages/81/e3/718c07617f405d95298aec3cfe09f1d2413f6c804fed48b1662f00598886/bencode2-0.3.21-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "25e1fb9305f95162076cdd2445ceb6e8b167912ed73a0b00abfd5c8cec06d19f",
"md5": "fad6b809be1ef9bbfd4d44ea92963df7",
"sha256": "c27e28c8f2841ec23084941ab67441fa077e6cd2d93434617b5b64a5406a2cad"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp311-cp311-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "fad6b809be1ef9bbfd4d44ea92963df7",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.9",
"size": 137948,
"upload_time": "2024-12-10T13:55:42",
"upload_time_iso_8601": "2024-12-10T13:55:42.543352Z",
"url": "https://files.pythonhosted.org/packages/25/e1/fb9305f95162076cdd2445ceb6e8b167912ed73a0b00abfd5c8cec06d19f/bencode2-0.3.21-cp311-cp311-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1a4db964111ad638a13eb49cdcdf304568696c028020eb72db680a178f1952ec",
"md5": "ee8042649c0faa66a977c99723a50f01",
"sha256": "c9168f003d0d78c7133c9b28ac155a124462e5a950903e9017427415e07dd005"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "ee8042649c0faa66a977c99723a50f01",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.9",
"size": 169476,
"upload_time": "2024-12-10T13:53:55",
"upload_time_iso_8601": "2024-12-10T13:53:55.489068Z",
"url": "https://files.pythonhosted.org/packages/1a/4d/b964111ad638a13eb49cdcdf304568696c028020eb72db680a178f1952ec/bencode2-0.3.21-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "52d7a5e5703440b7a501087446c17d3fbea60454734a585368b2e04e9692ba36",
"md5": "e09db6be2a80cd8c7b3bba02217bad1a",
"sha256": "ded42176b4c0eb92b419f2a64a5e3d36e61b81c1053956efb79d76d43eee4d18"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "e09db6be2a80cd8c7b3bba02217bad1a",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.9",
"size": 176895,
"upload_time": "2024-12-10T13:55:44",
"upload_time_iso_8601": "2024-12-10T13:55:44.892044Z",
"url": "https://files.pythonhosted.org/packages/52/d7/a5e5703440b7a501087446c17d3fbea60454734a585368b2e04e9692ba36/bencode2-0.3.21-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "692f7596c25ee5ca68814180209f79bab55d9c3accd80cdabdbd975e6ed0976a",
"md5": "6e78a48d9c4999d2005aabc03868a7ec",
"sha256": "94a4d549a9efab32c501cba5b58bc879503e96bc5a091254f498e7e10830bf3f"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "6e78a48d9c4999d2005aabc03868a7ec",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": "<4.0,>=3.9",
"size": 99143,
"upload_time": "2024-12-10T13:55:47",
"upload_time_iso_8601": "2024-12-10T13:55:47.230309Z",
"url": "https://files.pythonhosted.org/packages/69/2f/7596c25ee5ca68814180209f79bab55d9c3accd80cdabdbd975e6ed0976a/bencode2-0.3.21-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5ff26f657fc69b64167f4a761bbee8e2c12ad94a751d83fec751fa58ed5279b4",
"md5": "f618b7014c7e529a667fdcc4d73fad74",
"sha256": "c59fb23e35bdbffac1cd9f9dd488bdad40332c11390f6dd0219acff872fee133"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "f618b7014c7e529a667fdcc4d73fad74",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.9",
"size": 124625,
"upload_time": "2024-12-10T13:55:48",
"upload_time_iso_8601": "2024-12-10T13:55:48.322160Z",
"url": "https://files.pythonhosted.org/packages/5f/f2/6f657fc69b64167f4a761bbee8e2c12ad94a751d83fec751fa58ed5279b4/bencode2-0.3.21-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "58511a466197501c105f5f88762356a1b5b672b8c2d9785be10728c778e28010",
"md5": "4d271f2bb2038582a5785da30a23f57a",
"sha256": "7c56cc25016f10632630ce0810dab2061cf0a0950ecf9fbfa5d54ccd2e25dee0"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp312-cp312-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "4d271f2bb2038582a5785da30a23f57a",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.9",
"size": 137769,
"upload_time": "2024-12-10T13:55:49",
"upload_time_iso_8601": "2024-12-10T13:55:49.424385Z",
"url": "https://files.pythonhosted.org/packages/58/51/1a466197501c105f5f88762356a1b5b672b8c2d9785be10728c778e28010/bencode2-0.3.21-cp312-cp312-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "25000efa745de8d4d5d9e6eab9503287fba48ac8e68d2c35366b7ee17d6b5fdc",
"md5": "6fc26cf45190d87f4d5e2f012af5adbe",
"sha256": "e25fc85695370a51d706560aa8c146e4f70572963f7ef607100e0882bc17a09e"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "6fc26cf45190d87f4d5e2f012af5adbe",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.9",
"size": 167953,
"upload_time": "2024-12-10T13:53:57",
"upload_time_iso_8601": "2024-12-10T13:53:57.703021Z",
"url": "https://files.pythonhosted.org/packages/25/00/0efa745de8d4d5d9e6eab9503287fba48ac8e68d2c35366b7ee17d6b5fdc/bencode2-0.3.21-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "70593404d9e708cf11fd5b1bb95b1d5d7c633996f7729450e28f50c224f6f555",
"md5": "b3066d845c296eb65650432ef94af3ed",
"sha256": "1732bbf3847c077eefe14eb2cf168206143ee8e52e56a3c9b1d460b94d855907"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "b3066d845c296eb65650432ef94af3ed",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.9",
"size": 175309,
"upload_time": "2024-12-10T13:55:51",
"upload_time_iso_8601": "2024-12-10T13:55:51.962476Z",
"url": "https://files.pythonhosted.org/packages/70/59/3404d9e708cf11fd5b1bb95b1d5d7c633996f7729450e28f50c224f6f555/bencode2-0.3.21-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "fd19e46a3169638b5eb6e46a5940fc23ba0d9cdc3dd40bd29b8aab519913b9b9",
"md5": "50f1223e7fde71f5a26de9ba9705f3b9",
"sha256": "16e80f83a9e779cf71c4eedf2ab095e5806755d24d5aa1fcd6d12a37c475e1a4"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "50f1223e7fde71f5a26de9ba9705f3b9",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": "<4.0,>=3.9",
"size": 99079,
"upload_time": "2024-12-10T13:55:56",
"upload_time_iso_8601": "2024-12-10T13:55:56.256350Z",
"url": "https://files.pythonhosted.org/packages/fd/19/e46a3169638b5eb6e46a5940fc23ba0d9cdc3dd40bd29b8aab519913b9b9/bencode2-0.3.21-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0f7655cb0f5cc94246540c79a8ddc2375f1eee9c94ade89d989349160aaefd44",
"md5": "986074e5cadafc97a77b131053dcec24",
"sha256": "b2af8d97ed2566ca1c6eda56f25db5f3bdeb1fd0a5c4c93e1a698a2d756cdafb"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "986074e5cadafc97a77b131053dcec24",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 124564,
"upload_time": "2024-12-10T13:55:58",
"upload_time_iso_8601": "2024-12-10T13:55:58.481801Z",
"url": "https://files.pythonhosted.org/packages/0f/76/55cb0f5cc94246540c79a8ddc2375f1eee9c94ade89d989349160aaefd44/bencode2-0.3.21-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "13050695647b3c11586f648cdc9ada452b09f181b9ad62b298dcb87853f846db",
"md5": "b83ee570d42af5f180b6391699e4f0a5",
"sha256": "edfe28db0f88216b7ecf48e06b83432b24b778199130afc3cdea006a83b640b8"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp313-cp313-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "b83ee570d42af5f180b6391699e4f0a5",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 137797,
"upload_time": "2024-12-10T13:56:00",
"upload_time_iso_8601": "2024-12-10T13:56:00.456011Z",
"url": "https://files.pythonhosted.org/packages/13/05/0695647b3c11586f648cdc9ada452b09f181b9ad62b298dcb87853f846db/bencode2-0.3.21-cp313-cp313-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6f4dcddaab904b3b7f6909baa4529697818570dd101987b5b9988c129c67eb40",
"md5": "790ed733fb4f4c2307677d75bc6125aa",
"sha256": "b1bfb7b95dce1f9a881fc56386c3fdc6031f49511c2c48f766a8a096ba6793d4"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "790ed733fb4f4c2307677d75bc6125aa",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 167923,
"upload_time": "2024-12-10T13:53:58",
"upload_time_iso_8601": "2024-12-10T13:53:58.633507Z",
"url": "https://files.pythonhosted.org/packages/6f/4d/cddaab904b3b7f6909baa4529697818570dd101987b5b9988c129c67eb40/bencode2-0.3.21-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1d53fc3d02328f50bc80be1242c0d6cd7e9c412e813cfe25fa831f9c55bab6ef",
"md5": "0b7dc290325370847aa61d2c0b9b7d63",
"sha256": "403601e3a79a51a95e135c7728ba06bb8d24fe7846e6615bdff34fe619592b19"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "0b7dc290325370847aa61d2c0b9b7d63",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 175358,
"upload_time": "2024-12-10T13:56:01",
"upload_time_iso_8601": "2024-12-10T13:56:01.543971Z",
"url": "https://files.pythonhosted.org/packages/1d/53/fc3d02328f50bc80be1242c0d6cd7e9c412e813cfe25fa831f9c55bab6ef/bencode2-0.3.21-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "09fcc63bfddeb886c35fec98d2b72b64001cfeb6435b899a8ad45ac882361aa4",
"md5": "497c62a139c6d2a71a4054553b672c62",
"sha256": "935ea659c27691b4286e12437b691b2df4f05a9af2cfce6bdef3600a4f0797bd"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp313-cp313t-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "497c62a139c6d2a71a4054553b672c62",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 127780,
"upload_time": "2024-12-10T13:56:04",
"upload_time_iso_8601": "2024-12-10T13:56:04.957184Z",
"url": "https://files.pythonhosted.org/packages/09/fc/c63bfddeb886c35fec98d2b72b64001cfeb6435b899a8ad45ac882361aa4/bencode2-0.3.21-cp313-cp313t-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2d74a7b93e85ea1a35642622066c40cfad9f397a10d259fc997e2ea3828e0852",
"md5": "77f8d670f03756cfe1b2c9805630c538",
"sha256": "1ba17cc279912fbb86fe3b171c4647752abc6c0b1f9ac0a129d9da837dfba8ae"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp313-cp313t-macosx_11_0_x86_64.whl",
"has_sig": false,
"md5_digest": "77f8d670f03756cfe1b2c9805630c538",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 140890,
"upload_time": "2024-12-10T13:56:05",
"upload_time_iso_8601": "2024-12-10T13:56:05.953664Z",
"url": "https://files.pythonhosted.org/packages/2d/74/a7b93e85ea1a35642622066c40cfad9f397a10d259fc997e2ea3828e0852/bencode2-0.3.21-cp313-cp313t-macosx_11_0_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ba00e743c861a06cac4ea3792ca3f744e50f46ae638fc8750383cbf0c1e4a1f3",
"md5": "88c9e9fbc60d7619501c1147db25f5f9",
"sha256": "e72f5a3b8224d3649ac5f313e93a2e760eb3d88a5d705786dd31d3fd3cfc5ac5"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "88c9e9fbc60d7619501c1147db25f5f9",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 172969,
"upload_time": "2024-12-10T13:53:59",
"upload_time_iso_8601": "2024-12-10T13:53:59.733256Z",
"url": "https://files.pythonhosted.org/packages/ba/00/e743c861a06cac4ea3792ca3f744e50f46ae638fc8750383cbf0c1e4a1f3/bencode2-0.3.21-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "52504ca4bf24bdbd296f5a55b47b14faf61cd2b1ebabd9341aa147aa65ae08f2",
"md5": "8b525f2d925469229f5aa9aea0196e31",
"sha256": "661d49a9bbe874330605b6304467e5c5d226e9cb2265820ee1e4832f45961a73"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "8b525f2d925469229f5aa9aea0196e31",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 179843,
"upload_time": "2024-12-10T13:56:08",
"upload_time_iso_8601": "2024-12-10T13:56:08.333272Z",
"url": "https://files.pythonhosted.org/packages/52/50/4ca4bf24bdbd296f5a55b47b14faf61cd2b1ebabd9341aa147aa65ae08f2/bencode2-0.3.21-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5bd194e4ed609b18b45a66c2682f4151b8631d647122ed95ca4fd8f411a716eb",
"md5": "c73cc288fbe8f054b1e8f69af1b65da7",
"sha256": "082173314f09356e1db897bc523e7eb8bcbef3f619c56c78315c9d105b96da60"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp313-cp313t-win_amd64.whl",
"has_sig": false,
"md5_digest": "c73cc288fbe8f054b1e8f69af1b65da7",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 101113,
"upload_time": "2024-12-10T13:56:11",
"upload_time_iso_8601": "2024-12-10T13:56:11.177807Z",
"url": "https://files.pythonhosted.org/packages/5b/d1/94e4ed609b18b45a66c2682f4151b8631d647122ed95ca4fd8f411a716eb/bencode2-0.3.21-cp313-cp313t-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7d059cc95bee0b06436d0159b0b6d867b01ac0a55cd8a2021c5215b4480dad5d",
"md5": "46b2d6b90f65347737767b201de681fc",
"sha256": "3db3797006e3b72679c9babdc325d9e36f7e541fca67d60f7a493742775eca9b"
},
"downloads": -1,
"filename": "bencode2-0.3.21-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "46b2d6b90f65347737767b201de681fc",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": "<4.0,>=3.9",
"size": 99095,
"upload_time": "2024-12-10T13:56:03",
"upload_time_iso_8601": "2024-12-10T13:56:03.886420Z",
"url": "https://files.pythonhosted.org/packages/7d/05/9cc95bee0b06436d0159b0b6d867b01ac0a55cd8a2021c5215b4480dad5d/bencode2-0.3.21-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "084d992038f3f0ccbe6c4aecc1c4e314864df7741ea7bea614badb848f6d07a1",
"md5": "368496eee30db88b60339417e7ae20db",
"sha256": "95f4d79491e13677cc98a7dfca9aefa2835b83a2d3ce9d285d53a0a52fdaded0"
},
"downloads": -1,
"filename": "bencode2-0.3.21-py3-none-any.whl",
"has_sig": false,
"md5_digest": "368496eee30db88b60339417e7ae20db",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.9",
"size": 6566,
"upload_time": "2024-12-10T13:56:13",
"upload_time_iso_8601": "2024-12-10T13:56:13.457403Z",
"url": "https://files.pythonhosted.org/packages/08/4d/992038f3f0ccbe6c4aecc1c4e314864df7741ea7bea614badb848f6d07a1/bencode2-0.3.21-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-10 13:55:31",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "trim21",
"github_project": "bencode-py",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"circle": true,
"requirements": [
{
"name": "meson-python",
"specs": [
[
">=",
"0.14.0"
]
]
},
{
"name": "meson",
"specs": [
[
">=",
"1.2.1"
]
]
},
{
"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.1.0"
]
]
},
{
"name": "pytest-github-actions-annotate-failures",
"specs": [
[
"==",
"0.2.0"
]
]
},
{
"name": "pre-commit",
"specs": []
}
],
"lcname": "bencode2"
}