<!-- markdownlint-disable -->
<p align="center">
<img src="https://github.com/litestar-org/branding/blob/473f54621e55cde9acbb6fcab7fc03036173eb3d/assets/Branding%20-%20SVG%20-%20Transparent/Logo%20-%20Banner%20-%20Inline%20-%20Light.svg#gh-light-mode-only" alt="Litestar Logo - Light" width="100%" height="auto" />
<img src="https://github.com/litestar-org/branding/blob/473f54621e55cde9acbb6fcab7fc03036173eb3d/assets/Branding%20-%20SVG%20-%20Transparent/Logo%20-%20Banner%20-%20Inline%20-%20Dark.svg#gh-dark-mode-only" alt="Litestar Logo - Dark" width="100%" height="auto" />
</p>
<!-- markdownlint-restore -->
<div align="center">
<!-- prettier-ignore-start -->
| Project | | Status |
|-----------|:----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| CI/CD | | [![Publish](https://github.com/litestar-org/fast-query-parsers/actions/workflows/publish.yaml/badge.svg)](https://github.com/litestar-org/fast-query-parsers/actions/workflows/publish.yaml) [![CI](https://github.com/litestar-org/fast-query-parsers/actions/workflows/ci.yaml/badge.svg)](https://github.com/litestar-org/fast-query-parsers/actions/workflows/ci.yaml) |
| Package | | [![PyPI - Version](https://img.shields.io/pypi/v/fast-query-parsers?labelColor=202235&color=edb641&logo=python&logoColor=edb641)](https://badge.fury.io/py/litestar) ![PyPI - Support Python Versions](https://img.shields.io/pypi/pyversions/fast-query-parsers?labelColor=202235&color=edb641&logo=python&logoColor=edb641) ![PyPI - Downloads](https://img.shields.io/pypi/dm/fast-query-parsers?logo=python&label=fast-query-parsers%20downloads&labelColor=202235&color=edb641&logoColor=edb641) |
| Community | | [![Reddit](https://img.shields.io/reddit/subreddit-subscribers/litestarapi?label=r%2FLitestar&logo=reddit&labelColor=202235&color=edb641&logoColor=edb641)](https://reddit.com/r/litestarapi) [![Discord](https://img.shields.io/discord/919193495116337154?labelColor=202235&color=edb641&label=chat%20on%20discord&logo=discord&logoColor=edb641)](https://discord.gg/X3FJqy8d2j) [![Matrix](https://img.shields.io/badge/chat%20on%20Matrix-bridged-202235?labelColor=202235&color=edb641&logo=matrix&logoColor=edb641)](https://matrix.to/#/#litestar:matrix.org) [![Medium](https://img.shields.io/badge/Medium-202235?labelColor=202235&color=edb641&logo=medium&logoColor=edb641)](https://blog.litestar.dev) [![Twitter](https://img.shields.io/twitter/follow/LitestarAPI?labelColor=202235&color=edb641&logo=twitter&logoColor=edb641&style=flat)](https://twitter.com/LitestarAPI) [![Blog](https://img.shields.io/badge/Blog-litestar.dev-202235?logo=blogger&labelColor=202235&color=edb641&logoColor=edb641)](https://blog.litestar.dev) |
| Meta | | [![Litestar Project](https://img.shields.io/badge/Litestar%20Org-%E2%AD%90%20Fast%20Query%20Parsers-202235.svg?logo=python&labelColor=202235&color=edb641&logoColor=edb641)](https://github.com/litestar-org/fast-query-parsers) [![License - MIT](https://img.shields.io/badge/license-MIT-202235.svg?logo=python&labelColor=202235&color=edb641&logoColor=edb641)](https://spdx.org/licenses/) [![Litestar Sponsors](https://img.shields.io/badge/Sponsor-%E2%9D%A4-%23edb641.svg?&logo=github&logoColor=edb641&labelColor=202235)](https://github.com/sponsors/litestar-org) [![linting - Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json&labelColor=202235)](https://github.com/astral-sh/ruff) [![code style - Black](https://img.shields.io/badge/code%20style-black-000000.svg?logo=python&labelColor=202235&logoColor=edb641)](https://github.com/psf/black) |
<!-- prettier-ignore-end -->
</div>
# Fast Query Parsers
This library includes ultra-fast Rust based query string and urlencoded parsers. These parsers are used
by [`Litestar`](https://github.com/litestar-org/litestar), but are developed separately - and can of course be used separately.
> [!IMPORTANT]\
> [**_Starlite has been renamed to Litestar_**](https://litestar.dev/about/organization.html#litestar-and-starlite)
</div>
## Installation
```shell
pip install fast-query-parsers
```
## Usage
The library exposes two function `parse_query_string` and `parse_url_encoded_dict`.
### `parse_query_string`
This function is used to parse a query string into a list of key/value tuples.
```python
from fast_query_parsers import parse_query_string
result = parse_query_string(b"value=1&value=2&type=dollar&country=US", "&")
# [("value", "1"), ("value", "2"), ("type", "dollar"), ("country", "US")]
```
The first argument to this function is a byte string that includes the query string to be parsed, the second argument is
the separator used.
#### Benchmarks
Query string parsing is more than x5 times faster than the standard library:
```text
stdlib parse_qsl parsing query string: Mean +- std dev: 2.86 us +- 0.03 us
.....................
parse_query_string parsing query string: Mean +- std dev: 916 ns +- 13 ns
.....................
stdlib parse_qsl parsing urlencoded query string: Mean +- std dev: 8.30 us +- 0.10 us
.....................
parse_query_string urlencoded query string: Mean +- std dev: 1.50 us +- 0.03 us
```
### `parse_url_encoded_dict`
This function is used to parse a url-encoded form data dictionary and parse it into the python equivalent of JSON types.
```python
from urllib.parse import urlencode
from fast_query_parsers import parse_url_encoded_dict
encoded = urlencode(
[
("value", "10"),
("value", "12"),
("veggies", '["tomato", "potato", "aubergine"]'),
("nested", '{"some_key": "some_value"}'),
("calories", "122.53"),
("healthy", "true"),
("polluting", "false"),
("json", "null"),
]
).encode()
result = parse_url_encoded_dict(encoded, parse_numbers=True)
# result == {
# "value": [10, 12],
# "veggies": ["tomato", "potato", "aubergine"],
# "nested": {"some_key": "some_value"},
# "calories": 122.53,
# "healthy": True,
# "polluting": False,
# "json": None,
# }
```
This function handles type conversions correctly - unlike the standard library function `parse_qs`. Additionally, it
does not nest all values inside lists.
Note: the second argument passed to `parse_url_encoded_dict` dictates whether numbers should be parsed. If `True`,
the value will be parsed into an int or float as appropriate, otherwise it will be kept as a string.
By default the value of this arg is `True`.
#### Benchmarks
Url Encoded parsing is more than x2 times faster than the standard library, without accounting for parsing of values:
```text
stdlib parse_qs parsing url-encoded values into dict: Mean +- std dev: 8.99 us +- 0.09 us
.....................
parse_url_encoded_dict parse url-encoded values into dict: Mean +- std dev: 3.77 us +- 0.08 us
```
To actually mimic the parsing done by `parse_url_encoded_dict` we will need a utility along these lines:
```python
from collections import defaultdict
from contextlib import suppress
from json import loads, JSONDecodeError
from typing import Any, DefaultDict, Dict, List
from urllib.parse import parse_qsl
def parse_url_encoded_form_data(encoded_data: bytes) -> Dict[str, Any]:
"""Parse an url encoded form data into dict of parsed values"""
decoded_dict: DefaultDict[str, List[Any]] = defaultdict(list)
for k, v in parse_qsl(encoded_data.decode(), keep_blank_values=True):
with suppress(JSONDecodeError):
v = loads(v) if isinstance(v, str) else v
decoded_dict[k].append(v)
return {k: v if len(v) > 1 else v[0] for k, v in decoded_dict.items()}
```
With the above, the benchmarks looks like so:
```text
python parse_url_encoded_form_data parsing url-encoded values into dict: Mean +- std dev: 19.7 us +- 0.1 us
.....................
parse_url_encoded_dict parsing url-encoded values into dict: Mean +- std dev: 3.69 us +- 0.03 us
```
## Contributing
All contributions are of course welcome!
### Repository Setup
1. Run `cargo install` to setup the rust dependencies and `poetry install` to setup the python dependencies.
2. Install the pre-commit hooks with `pre-commit install` (requires [pre-commit](https://pre-commit.com/)).
### Building
Run `poetry run maturin develop --release --strip` to install a release wheel (without debugging info). This wheel can be
used in tests and benchmarks.
### Benchmarking
There are basic benchmarks using pyperf in place. To run these execute `poetry run python benchrmarks.py`.
Raw data
{
"_id": null,
"home_page": "",
"name": "fast-query-parsers",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "",
"keywords": "query,query string,qs,query parameters,rust,asgi,starlite,litestar,parser",
"author": "Na'aman Hirschfeld <nhirschfeld@gmail.com>",
"author_email": "Na'aman Hirschfeld <nhirschfeld@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/dd/20/3a00b889a196e8dc5bede2f168d4a14edc8b5bccc3978a9f497f0f863e79/fast_query_parsers-1.0.3.tar.gz",
"platform": null,
"description": "<!-- markdownlint-disable -->\n<p align=\"center\">\n <img src=\"https://github.com/litestar-org/branding/blob/473f54621e55cde9acbb6fcab7fc03036173eb3d/assets/Branding%20-%20SVG%20-%20Transparent/Logo%20-%20Banner%20-%20Inline%20-%20Light.svg#gh-light-mode-only\" alt=\"Litestar Logo - Light\" width=\"100%\" height=\"auto\" />\n <img src=\"https://github.com/litestar-org/branding/blob/473f54621e55cde9acbb6fcab7fc03036173eb3d/assets/Branding%20-%20SVG%20-%20Transparent/Logo%20-%20Banner%20-%20Inline%20-%20Dark.svg#gh-dark-mode-only\" alt=\"Litestar Logo - Dark\" width=\"100%\" height=\"auto\" />\n</p>\n<!-- markdownlint-restore -->\n\n<div align=\"center\">\n\n<!-- prettier-ignore-start -->\n\n| Project | | Status |\n|-----------|:----|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| CI/CD | | [![Publish](https://github.com/litestar-org/fast-query-parsers/actions/workflows/publish.yaml/badge.svg)](https://github.com/litestar-org/fast-query-parsers/actions/workflows/publish.yaml) [![CI](https://github.com/litestar-org/fast-query-parsers/actions/workflows/ci.yaml/badge.svg)](https://github.com/litestar-org/fast-query-parsers/actions/workflows/ci.yaml) |\n| Package | | [![PyPI - Version](https://img.shields.io/pypi/v/fast-query-parsers?labelColor=202235&color=edb641&logo=python&logoColor=edb641)](https://badge.fury.io/py/litestar) ![PyPI - Support Python Versions](https://img.shields.io/pypi/pyversions/fast-query-parsers?labelColor=202235&color=edb641&logo=python&logoColor=edb641) ![PyPI - Downloads](https://img.shields.io/pypi/dm/fast-query-parsers?logo=python&label=fast-query-parsers%20downloads&labelColor=202235&color=edb641&logoColor=edb641) |\n| Community | | [![Reddit](https://img.shields.io/reddit/subreddit-subscribers/litestarapi?label=r%2FLitestar&logo=reddit&labelColor=202235&color=edb641&logoColor=edb641)](https://reddit.com/r/litestarapi) [![Discord](https://img.shields.io/discord/919193495116337154?labelColor=202235&color=edb641&label=chat%20on%20discord&logo=discord&logoColor=edb641)](https://discord.gg/X3FJqy8d2j) [![Matrix](https://img.shields.io/badge/chat%20on%20Matrix-bridged-202235?labelColor=202235&color=edb641&logo=matrix&logoColor=edb641)](https://matrix.to/#/#litestar:matrix.org) [![Medium](https://img.shields.io/badge/Medium-202235?labelColor=202235&color=edb641&logo=medium&logoColor=edb641)](https://blog.litestar.dev) [![Twitter](https://img.shields.io/twitter/follow/LitestarAPI?labelColor=202235&color=edb641&logo=twitter&logoColor=edb641&style=flat)](https://twitter.com/LitestarAPI) [![Blog](https://img.shields.io/badge/Blog-litestar.dev-202235?logo=blogger&labelColor=202235&color=edb641&logoColor=edb641)](https://blog.litestar.dev) |\n| Meta | | [![Litestar Project](https://img.shields.io/badge/Litestar%20Org-%E2%AD%90%20Fast%20Query%20Parsers-202235.svg?logo=python&labelColor=202235&color=edb641&logoColor=edb641)](https://github.com/litestar-org/fast-query-parsers) [![License - MIT](https://img.shields.io/badge/license-MIT-202235.svg?logo=python&labelColor=202235&color=edb641&logoColor=edb641)](https://spdx.org/licenses/) [![Litestar Sponsors](https://img.shields.io/badge/Sponsor-%E2%9D%A4-%23edb641.svg?&logo=github&logoColor=edb641&labelColor=202235)](https://github.com/sponsors/litestar-org) [![linting - Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json&labelColor=202235)](https://github.com/astral-sh/ruff) [![code style - Black](https://img.shields.io/badge/code%20style-black-000000.svg?logo=python&labelColor=202235&logoColor=edb641)](https://github.com/psf/black) |\n\n<!-- prettier-ignore-end -->\n</div>\n\n# Fast Query Parsers\n\nThis library includes ultra-fast Rust based query string and urlencoded parsers. These parsers are used\nby [`Litestar`](https://github.com/litestar-org/litestar), but are developed separately - and can of course be used separately.\n\n> [!IMPORTANT]\\\n> [**_Starlite has been renamed to Litestar_**](https://litestar.dev/about/organization.html#litestar-and-starlite)\n\n</div>\n\n## Installation\n\n```shell\npip install fast-query-parsers\n```\n\n## Usage\n\nThe library exposes two function `parse_query_string` and `parse_url_encoded_dict`.\n\n### `parse_query_string`\n\nThis function is used to parse a query string into a list of key/value tuples.\n\n```python\nfrom fast_query_parsers import parse_query_string\n\nresult = parse_query_string(b\"value=1&value=2&type=dollar&country=US\", \"&\")\n# [(\"value\", \"1\"), (\"value\", \"2\"), (\"type\", \"dollar\"), (\"country\", \"US\")]\n```\n\nThe first argument to this function is a byte string that includes the query string to be parsed, the second argument is\nthe separator used.\n\n#### Benchmarks\n\nQuery string parsing is more than x5 times faster than the standard library:\n\n```text\nstdlib parse_qsl parsing query string: Mean +- std dev: 2.86 us +- 0.03 us\n.....................\nparse_query_string parsing query string: Mean +- std dev: 916 ns +- 13 ns\n.....................\nstdlib parse_qsl parsing urlencoded query string: Mean +- std dev: 8.30 us +- 0.10 us\n.....................\nparse_query_string urlencoded query string: Mean +- std dev: 1.50 us +- 0.03 us\n```\n\n### `parse_url_encoded_dict`\n\nThis function is used to parse a url-encoded form data dictionary and parse it into the python equivalent of JSON types.\n\n```python\nfrom urllib.parse import urlencode\n\nfrom fast_query_parsers import parse_url_encoded_dict\n\nencoded = urlencode(\n [\n (\"value\", \"10\"),\n (\"value\", \"12\"),\n (\"veggies\", '[\"tomato\", \"potato\", \"aubergine\"]'),\n (\"nested\", '{\"some_key\": \"some_value\"}'),\n (\"calories\", \"122.53\"),\n (\"healthy\", \"true\"),\n (\"polluting\", \"false\"),\n (\"json\", \"null\"),\n ]\n).encode()\n\nresult = parse_url_encoded_dict(encoded, parse_numbers=True)\n\n# result == {\n# \"value\": [10, 12],\n# \"veggies\": [\"tomato\", \"potato\", \"aubergine\"],\n# \"nested\": {\"some_key\": \"some_value\"},\n# \"calories\": 122.53,\n# \"healthy\": True,\n# \"polluting\": False,\n# \"json\": None,\n# }\n```\n\nThis function handles type conversions correctly - unlike the standard library function `parse_qs`. Additionally, it\ndoes not nest all values inside lists.\n\nNote: the second argument passed to `parse_url_encoded_dict` dictates whether numbers should be parsed. If `True`,\nthe value will be parsed into an int or float as appropriate, otherwise it will be kept as a string.\nBy default the value of this arg is `True`.\n\n#### Benchmarks\n\nUrl Encoded parsing is more than x2 times faster than the standard library, without accounting for parsing of values:\n\n```text\nstdlib parse_qs parsing url-encoded values into dict: Mean +- std dev: 8.99 us +- 0.09 us\n.....................\nparse_url_encoded_dict parse url-encoded values into dict: Mean +- std dev: 3.77 us +- 0.08 us\n```\n\nTo actually mimic the parsing done by `parse_url_encoded_dict` we will need a utility along these lines:\n\n```python\nfrom collections import defaultdict\nfrom contextlib import suppress\nfrom json import loads, JSONDecodeError\nfrom typing import Any, DefaultDict, Dict, List\nfrom urllib.parse import parse_qsl\n\n\ndef parse_url_encoded_form_data(encoded_data: bytes) -> Dict[str, Any]:\n \"\"\"Parse an url encoded form data into dict of parsed values\"\"\"\n decoded_dict: DefaultDict[str, List[Any]] = defaultdict(list)\n for k, v in parse_qsl(encoded_data.decode(), keep_blank_values=True):\n with suppress(JSONDecodeError):\n v = loads(v) if isinstance(v, str) else v\n decoded_dict[k].append(v)\n return {k: v if len(v) > 1 else v[0] for k, v in decoded_dict.items()}\n```\n\nWith the above, the benchmarks looks like so:\n\n```text\npython parse_url_encoded_form_data parsing url-encoded values into dict: Mean +- std dev: 19.7 us +- 0.1 us\n.....................\nparse_url_encoded_dict parsing url-encoded values into dict: Mean +- std dev: 3.69 us +- 0.03 us\n```\n\n## Contributing\n\nAll contributions are of course welcome!\n\n### Repository Setup\n\n1. Run `cargo install` to setup the rust dependencies and `poetry install` to setup the python dependencies.\n2. Install the pre-commit hooks with `pre-commit install` (requires [pre-commit](https://pre-commit.com/)).\n\n### Building\n\nRun `poetry run maturin develop --release --strip` to install a release wheel (without debugging info). This wheel can be\nused in tests and benchmarks.\n\n### Benchmarking\n\nThere are basic benchmarks using pyperf in place. To run these execute `poetry run python benchrmarks.py`.\n\n",
"bugtrack_url": null,
"license": "",
"summary": "Ultra-fast query string and url-encoded form-data parsers",
"version": "1.0.3",
"project_urls": {
"Source Code": "https://github.com/starlite-api/fast-query-parsers"
},
"split_keywords": [
"query",
"query string",
"qs",
"query parameters",
"rust",
"asgi",
"starlite",
"litestar",
"parser"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "43184179ac7064b4216ca42f2ed6f74e71254454acf2ec25ce6bb3ffbfda4aa6",
"md5": "6dd4cdb26328738f7750800d44ad0a27",
"sha256": "afbf71c1b4398dacfb9d84755eb026f8e759f68a066f1f3cc19e471fc342e74f"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-macosx_10_7_x86_64.whl",
"has_sig": false,
"md5_digest": "6dd4cdb26328738f7750800d44ad0a27",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 766210,
"upload_time": "2023-08-25T13:18:48",
"upload_time_iso_8601": "2023-08-25T13:18:48.415671Z",
"url": "https://files.pythonhosted.org/packages/43/18/4179ac7064b4216ca42f2ed6f74e71254454acf2ec25ce6bb3ffbfda4aa6/fast_query_parsers-1.0.3-cp38-abi3-macosx_10_7_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c521c8c160f61a740efc4577079eb5747a6b2cb8d1168a84a0bfda6044113768",
"md5": "0c46642d34535b6fc2f58b96304b724a",
"sha256": "42f26875311d1b151c3406adfa39ec2db98df111a369d75f6fa243ec8462f147"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "0c46642d34535b6fc2f58b96304b724a",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 1466147,
"upload_time": "2023-08-25T13:18:50",
"upload_time_iso_8601": "2023-08-25T13:18:50.290393Z",
"url": "https://files.pythonhosted.org/packages/c5/21/c8c160f61a740efc4577079eb5747a6b2cb8d1168a84a0bfda6044113768/fast_query_parsers-1.0.3-cp38-abi3-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "515bb10719598dbd14201271efd0b950c6a09efa0a3f6246fec3c192c6b7a8d2",
"md5": "129d2abc2f938c802290204b94e7373f",
"sha256": "66630ad423b5b1f5709f82a4d8482cd6aa2f3fa73d2c779ff1877f25dee08d55"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "129d2abc2f938c802290204b94e7373f",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 764016,
"upload_time": "2023-08-25T13:18:52",
"upload_time_iso_8601": "2023-08-25T13:18:52.295795Z",
"url": "https://files.pythonhosted.org/packages/51/5b/b10719598dbd14201271efd0b950c6a09efa0a3f6246fec3c192c6b7a8d2/fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "75068861197982909bec00b180527df1e0e9791715271bfb84c8be389b6bf077",
"md5": "48b551b0d4bde10f28fd687662e1acbd",
"sha256": "a6e3d816c572a6fad1ae9b93713b2db0d3db6e8f594e035ad52361d668dd94a8"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"has_sig": false,
"md5_digest": "48b551b0d4bde10f28fd687662e1acbd",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 729912,
"upload_time": "2023-08-25T13:18:54",
"upload_time_iso_8601": "2023-08-25T13:18:54.515896Z",
"url": "https://files.pythonhosted.org/packages/75/06/8861197982909bec00b180527df1e0e9791715271bfb84c8be389b6bf077/fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "419b5a42ddd23b85357be6764e14daa607d9b16bc6a395aae2c1cc2077e0a11d",
"md5": "36ae3c2e97932caf0bd78412c1e14c69",
"sha256": "6720505f2d2a764c76bcc4f3730a9dff69d9871740e46264f6605d73f9ce3794"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"has_sig": false,
"md5_digest": "36ae3c2e97932caf0bd78412c1e14c69",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 969496,
"upload_time": "2023-08-25T13:18:59",
"upload_time_iso_8601": "2023-08-25T13:18:59.048081Z",
"url": "https://files.pythonhosted.org/packages/41/9b/5a42ddd23b85357be6764e14daa607d9b16bc6a395aae2c1cc2077e0a11d/fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f0357a9a0c50588033edd9efba48f21e251dfcf77eaec2aff470988f622fbd3a",
"md5": "59e1727961d4b93bd5185b2b0a868ca5",
"sha256": "0bdcc0ddb4cc69d823c2c0dedd8f5affc71042db39908ad2ca06261bf388cac6"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl",
"has_sig": false,
"md5_digest": "59e1727961d4b93bd5185b2b0a868ca5",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 1003340,
"upload_time": "2023-08-25T13:18:56",
"upload_time_iso_8601": "2023-08-25T13:18:56.521283Z",
"url": "https://files.pythonhosted.org/packages/f0/35/7a9a0c50588033edd9efba48f21e251dfcf77eaec2aff470988f622fbd3a/fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c39f4dfa29d74276fa07c40689bfaa3b21d057249314aeb20150f0f41373d16d",
"md5": "cbef8c37368a7f9e21269112311cb956",
"sha256": "e947e7251769593da93832a10861f59565a46149fa117ebdf25377e7b2853936"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"has_sig": false,
"md5_digest": "cbef8c37368a7f9e21269112311cb956",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 939972,
"upload_time": "2023-08-25T13:19:00",
"upload_time_iso_8601": "2023-08-25T13:19:00.704288Z",
"url": "https://files.pythonhosted.org/packages/c3/9f/4dfa29d74276fa07c40689bfaa3b21d057249314aeb20150f0f41373d16d/fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7434950b6d799839c11e93566aef426b67f0a446c4906e45e592026fde894459",
"md5": "bd10eb28ba9f7f66c8a36da75e776f70",
"sha256": "55a30b7cee0a53cddf9016b86fdad87221980d5a02a6126c491bd309755e6de9"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "bd10eb28ba9f7f66c8a36da75e776f70",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 828557,
"upload_time": "2023-08-25T13:19:02",
"upload_time_iso_8601": "2023-08-25T13:19:02.264050Z",
"url": "https://files.pythonhosted.org/packages/74/34/950b6d799839c11e93566aef426b67f0a446c4906e45e592026fde894459/fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "81a8ee95263abc9806c81d77be8a3420d1f4dde467a10030dde8b0fa0e63f700",
"md5": "1cc98d830ea1d9c1daa3ca6dce9ebcf8",
"sha256": "9bc2b457caa38371df1a30cfdfc57bd9bfdf348367abdaf6f36533416a0b0e93"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl",
"has_sig": false,
"md5_digest": "1cc98d830ea1d9c1daa3ca6dce9ebcf8",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 863119,
"upload_time": "2023-08-25T13:19:03",
"upload_time_iso_8601": "2023-08-25T13:19:03.941793Z",
"url": "https://files.pythonhosted.org/packages/81/a8/ee95263abc9806c81d77be8a3420d1f4dde467a10030dde8b0fa0e63f700/fast_query_parsers-1.0.3-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "05d45eb8c9d400230b9a45a0ce47a443e9fe37b0902729f9440adef677af1f0d",
"md5": "a94b6e4b5fa5f5427007ad635f1ba1b2",
"sha256": "5736d3c32d6ba23995fa569fe572feabcfcfc30ac9e4709e94cff6f2c456a3d1"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-musllinux_1_2_aarch64.whl",
"has_sig": false,
"md5_digest": "a94b6e4b5fa5f5427007ad635f1ba1b2",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 911046,
"upload_time": "2023-08-25T13:19:05",
"upload_time_iso_8601": "2023-08-25T13:19:05.596855Z",
"url": "https://files.pythonhosted.org/packages/05/d4/5eb8c9d400230b9a45a0ce47a443e9fe37b0902729f9440adef677af1f0d/fast_query_parsers-1.0.3-cp38-abi3-musllinux_1_2_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "f8b8bf5e44588f6ebd81d0c53ba49c79999dc54cb0fe81ad6dde6fed2cd45b56",
"md5": "9167cd76ad14c82075aa1082985ce8b4",
"sha256": "3a6377eb0c5b172fbc77c3f96deaf1e51708b4b96d27ce173658bf11c1c00b20"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-musllinux_1_2_armv7l.whl",
"has_sig": false,
"md5_digest": "9167cd76ad14c82075aa1082985ce8b4",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 962966,
"upload_time": "2023-08-25T13:19:07",
"upload_time_iso_8601": "2023-08-25T13:19:07.355555Z",
"url": "https://files.pythonhosted.org/packages/f8/b8/bf5e44588f6ebd81d0c53ba49c79999dc54cb0fe81ad6dde6fed2cd45b56/fast_query_parsers-1.0.3-cp38-abi3-musllinux_1_2_armv7l.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6fa9132572b9f40c2635fdedb7a1cb6cedd9c880f8ffbbfdd6215ee493bb6936",
"md5": "e883b622e3fc6e5e3944560ed4cb300f",
"sha256": "7ca6be04f443a1b055e910ccad01b1d72212f269a530415df99a87c5f1e9c927"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-musllinux_1_2_i686.whl",
"has_sig": false,
"md5_digest": "e883b622e3fc6e5e3944560ed4cb300f",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 965422,
"upload_time": "2023-08-25T13:19:09",
"upload_time_iso_8601": "2023-08-25T13:19:09.003490Z",
"url": "https://files.pythonhosted.org/packages/6f/a9/132572b9f40c2635fdedb7a1cb6cedd9c880f8ffbbfdd6215ee493bb6936/fast_query_parsers-1.0.3-cp38-abi3-musllinux_1_2_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ea58942327d3f2694b8f1a2fffaaaef1cc3147571852473a80070ebd6156a62e",
"md5": "0482edf0735f6243a843e073aa358429",
"sha256": "a70d4d8852606f2dd5b798ab628b9d8dc6970ddfdd9e96f4543eb0cc89a74fb5"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-musllinux_1_2_x86_64.whl",
"has_sig": false,
"md5_digest": "0482edf0735f6243a843e073aa358429",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 967734,
"upload_time": "2023-08-25T13:19:10",
"upload_time_iso_8601": "2023-08-25T13:19:10.654445Z",
"url": "https://files.pythonhosted.org/packages/ea/58/942327d3f2694b8f1a2fffaaaef1cc3147571852473a80070ebd6156a62e/fast_query_parsers-1.0.3-cp38-abi3-musllinux_1_2_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0ae321bc18edc003b54a2069eb854b9f92cacb5acc99e03c609487a23a673755",
"md5": "51fc7f0fc5553da35d1f34140573adfa",
"sha256": "14b3fab7e9a6ac1c1efaf66c3fd2a3fd1e25ede03ed14118035e530433830a11"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-win32.whl",
"has_sig": false,
"md5_digest": "51fc7f0fc5553da35d1f34140573adfa",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 646366,
"upload_time": "2023-08-25T13:19:12",
"upload_time_iso_8601": "2023-08-25T13:19:12.079951Z",
"url": "https://files.pythonhosted.org/packages/0a/e3/21bc18edc003b54a2069eb854b9f92cacb5acc99e03c609487a23a673755/fast_query_parsers-1.0.3-cp38-abi3-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "ae4b07fe4d7b5c458bdde9b0bfd8e8cb5762341af6c9727b43c2331c0cb0dbc3",
"md5": "4227a62ca39b2f24853031aba9cd8f8c",
"sha256": "21ae5f3a209aee7d3b84bdcdb33dd79f39fc8cb608b3ae8cfcb78123758c1a16"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3-cp38-abi3-win_amd64.whl",
"has_sig": false,
"md5_digest": "4227a62ca39b2f24853031aba9cd8f8c",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": ">=3.8",
"size": 689717,
"upload_time": "2023-08-25T13:19:14",
"upload_time_iso_8601": "2023-08-25T13:19:14.051471Z",
"url": "https://files.pythonhosted.org/packages/ae/4b/07fe4d7b5c458bdde9b0bfd8e8cb5762341af6c9727b43c2331c0cb0dbc3/fast_query_parsers-1.0.3-cp38-abi3-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "dd203a00b889a196e8dc5bede2f168d4a14edc8b5bccc3978a9f497f0f863e79",
"md5": "07433cb8c524c3248082d6ca58056bb0",
"sha256": "5200a9e02997ad51d4d76a60ea1b256a68a184b04359540eb6310a15013df68f"
},
"downloads": -1,
"filename": "fast_query_parsers-1.0.3.tar.gz",
"has_sig": false,
"md5_digest": "07433cb8c524c3248082d6ca58056bb0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 25275,
"upload_time": "2023-08-25T13:19:15",
"upload_time_iso_8601": "2023-08-25T13:19:15.790336Z",
"url": "https://files.pythonhosted.org/packages/dd/20/3a00b889a196e8dc5bede2f168d4a14edc8b5bccc3978a9f497f0f863e79/fast_query_parsers-1.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-08-25 13:19:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "starlite-api",
"github_project": "fast-query-parsers",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "fast-query-parsers"
}