Metadata-Version: 2.1
Name: many-requests
Version: 0.2.1
Summary: Dead easy interface for executing many HTTP requests asynchronously. Also provides helper functions for executing embarrassingly parallel async coroutines.
Home-page: https://github.com/joshlk/many_requests
Author: Josh Levy-Kramer
License: MIT License
Project-URL: Documentation, https://joshlk.github.io/many_requests
Project-URL: Code, https://github.com/joshlk/many_requests
Project-URL: Issue tracker, https://github.com/joshlk/many_requests/issues
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Requires-Dist: trio
Requires-Dist: asks
Requires-Dist: tqdm
Provides-Extra: dev
Requires-Dist: pytest ; extra == 'dev'
Requires-Dist: wheel ; extra == 'dev'
Requires-Dist: setuptools ; extra == 'dev'
Requires-Dist: twine ; extra == 'dev'
Requires-Dist: sphinx (>=3.2.1) ; extra == 'dev'
Requires-Dist: codecov ; extra == 'dev'
Requires-Dist: recommonmark ; extra == 'dev'
Requires-Dist: sphinx-rtd-theme ; extra == 'dev'
Requires-Dist: bump2version ; extra == 'dev'
Requires-Dist: aiohttp ; extra == 'dev'
Requires-Dist: requests ; extra == 'dev'
Requires-Dist: aiohttp-basicauth-middleware ; extra == 'dev'
Provides-Extra: docs
Requires-Dist: sphinx ; extra == 'docs'
Requires-Dist: sphinx-rtd-theme ; extra == 'docs'

[![PyPI](https://img.shields.io/pypi/v/dataclassframe)](https://pypi.org/project/many_requests/)
![Python](https://img.shields.io/badge/python-3.6%20%7C%203.7%20%7C%203.8%20%7C%203.9-blue)
[![Build Status](https://travis-ci.com/joshlk/many_requests.svg?branch=main)](https://travis-ci.com/joshlk/many_requests)
[![Documentation](https://readthedocs.org/projects/pip/badge/?version=latest&style=flat)](https://joshlk.github.io/many_requests)

# many_requests

Dead easy interface for executing many HTTP requests asynchronously.
It has been tested in the wild with over 10 million requests.
Automatically handles errors and executes retries.

Built on-top of [Trio](https://github.com/python-trio/trio) and [asks](https://github.com/theelous3/asks). Interface heavily inspired by [Requests](https://github.com/psf/requests) and [joblib](https://github.com/joblib/joblib).

Also provides helper functions for executing [embarrassingly parallel](https://en.wikipedia.org/wiki/Embarrassingly_parallel) async coroutines.

To install:

```bash
pip install many-requests
```

## Example Usage

Execute 10 GET requests for example.org:

```python
from many_requests import ManyRequests
responses = ManyRequests(n_workers=5, n_connections=5)(
                method='GET',
                url=['https://example.org' for i in range(10)])
```

Query HackNews API for 10 items and parse JSON output:

```python
responses = ManyRequests(n_workers=5, n_connections=5, json=True)(
                method='GET',
                url=[f'https://hacker-news.firebaseio.com/v0/item/{i}.json?print=pretty' for i in range(10)])
```

To use basic authentication with all requests:

```python
from asks import BasicAuth
username = 'user'
password = 'pw'
responses = ManyRequests(n_workers=5, n_connections=5)(
                method='GET',
                url=['https://example.org' for i in range(10)],
                auth=BasicAuth((username, password)))
```

To execute embarrassingly parallel async coroutines, for example 10 `trio.sleep` calls:

```python
from many_requests import EasyAsync, delayed
import trio
outputs = EasyAsync(n_workers = 4)(delayed(trio.sleep)(i) for i in range(10))
```


