Skip to main content

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 run function.
  • 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 run function.
  • Allow collector argument 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.

Release files for tempo-async 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tempo-async 0.1.1
File Size Uploaded
tempo-async-0.1.1.tar.gz 5.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tempo-async 0.1.1
File Interpreter ABI Platform
tempo_async-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 10.2 kB

Release files / tempo-async-0.1.1.tar.gz

Download URL tempo-async-0.1.1.tar.gz
Size 5.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d355c6c7a18f7818d4aa598e5e9656641aff710c50669355e60b2e799cb7e66d
BLAKE2b-256 checksum
How to use checksums
5f2031bd36e35f49adeaf55dc182f411ddca0d86883019b87d94477ad5309839
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.12 CPython/3.10.0 Windows/10

Release files / tempo_async-0.1.1-py3-none-any.whl

Download URL tempo_async-0.1.1-py3-none-any.whl
Size 5.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9b2c943f9da81bb0fa24a12e734623bc39afd4f104680b6a6d62230cc966bd25
BLAKE2b-256 checksum
How to use checksums
c74df7b5f6c5745e116048e661f305914873b1c36beeb3e6110978a2811b9106
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.12 CPython/3.10.0 Windows/10

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page