An HTTP package for metering and managing async requests.
Project description
Tempo
Asynchronous wrapper for HTTP requests.
Installation
pip install tempo-async
Usage
import tempo
url = 'https://via.placeholder.com'
num_reqs = 100
requests = [ # map in any request parameters: url, query params, HTTP method, etc.
tempo.RequestConfig(url=url) for _ in range(num_reqs)
]
if __name__ == '__main__':
tempo.run(requests, rate=10) # fetch 100 cat pictures, 10 a second
Take it a step further by collecting the responses,
import tempo
url = 'https://via.placeholder.com'
num_reqs = 100
### cat picture bucket
catpics = []
###
requests = [ # map in any request parameters: url, query params, HTTP method, etc.
tempo.RequestConfig(url=url) for _ in range(num_reqs)
]
if __name__ == '__main__':
tempo.run(requests, collector=catpics, rate=10) # indicated `catpics` should store response
print(f'Pictures stored in list: {len(catpics)}')
… and adding any number of processing functions to handle responses.
import tempo
url = 'https://via.placeholder.com'
num_reqs = 100
catpics = []
requests = [ # map in any request parameters: url, query params, HTTP method, etc.
tempo.RequestConfig(url=url) for _ in range(num_reqs)
]
### processors
def say_hi(res) -> None:
# returns None so does not affect final processed response sent to collectors
print('Hello cat!')
def get_body(res) -> str:
# since it returns a value, this processor changes the final output of `tempo.run`
body = res.text
return body
###
if __name__ == '__main__':
# process the requests in order of listed processors
tempo.run(requests, collector=catpics, rate=10, processors=[say_hi, get_body])
# processors' return values affect output sent to collectors
print(f'Type of stored result: {type(catpics[0])}') # str, not Response object
Contributing
Submit a pull request! Contributions are welcome!
Please write test coverage for your changes and run tox to test for backwards compatibility among the supported Python versions.
TODOS
Open an issue, create a branch, and submit a PR. (Tests for everything!)
- Handle collection of results as a return value of the
runfunction. - Decorator for basic async request function accepting iterator of request arguments.
- Accept plain Python dictionaries and JSON in addition to RequestConfig objects for requests mapping.
- Logging.
- Exception handling.
- GitHub Actions.
- Retries with various back-off algorithms and HTTP response header search for 429 causes.
- Generator option for
runfunction. - Allow
collectorargument to be an iterable, a function passed a response / processed response object, or a file out. Maybe even stdout. - Like processors, allow multiple collectors (eg. file, queue).
- Local database for keeping track of requests and their status, for retry and interrupts.
- Asynchronous processor support.
- Handle streaming responses.
- CLI
- Documentation page. Also, good docstrings.
- Test coverage tracking.
- …
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tempo-async-0.1.0.tar.gz.
File metadata
- Download URL: tempo-async-0.1.0.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.12 CPython/3.10.0 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
394d36bd1781fd97d8a22ede80bdffc639bd02e1a4d40c6abc7ed835ffb5a55a
|
|
| MD5 |
20464312677ec46c630996beaf0aac29
|
|
| BLAKE2b-256 |
d0f662fcdd4cfff53a9b8b9f317e44a385eceab6b573f0f2d760b865f8a861c5
|
File details
Details for the file tempo_async-0.1.0-py3-none-any.whl.
File metadata
- Download URL: tempo_async-0.1.0-py3-none-any.whl
- Upload date:
- Size: 5.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.12 CPython/3.10.0 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
170c52097c59a7f0a348d342df45d09274954c5f034514190cf93fa4cf03f5a4
|
|
| MD5 |
525cf32f380abd705363f1e5c22eb4e5
|
|
| BLAKE2b-256 |
9122c762983cf988f42cd4442f5226063c08395e503e27ec4f1969a7516c2585
|