bencode2


Namebencode2 JSON
Version 0.3.21 PyPI version JSON
download
home_pageNone
SummaryA fast and correct bencode serialize/deserialize library
upload_time2024-12-10 13:55:31
maintainerNone
docs_urlNone
authorNone
requires_python<4.0,>=3.9
licenseMIT
keywords bencode bittorrent bit-torrent serialize deserialize p2p
VCS
bugtrack_url
requirements meson-python meson typing_extensions mypy pytest pytest-cov pytest-codspeed pytest-github-actions-annotate-failures pre-commit
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # A fast and correct bencode serialize/deserialize library

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

## introduction

Why yet another bencode package in python?

because I need a bencode library:

### 1. Correct

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

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

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

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

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

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

### 2. Fast enough

this package is written with c++ in CPython.

### 3. still cross implement

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

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

## install

```shell
pip install bencode2
```

## basic usage

```python
import bencode2

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

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

### Decoding

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

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

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

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

### Encoding

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

## free threading

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

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

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

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

## Development

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

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

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

So you will need to run command like this:

```shell
meson setup build -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"
}
        
Elapsed time: 0.46020s