Skip to main content

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 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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tempo-async-0.1.0.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tempo_async-0.1.0-py3-none-any.whl (5.1 kB view details)

Uploaded Python 3

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

Hashes for tempo-async-0.1.0.tar.gz
Algorithm Hash digest
SHA256 394d36bd1781fd97d8a22ede80bdffc639bd02e1a4d40c6abc7ed835ffb5a55a
MD5 20464312677ec46c630996beaf0aac29
BLAKE2b-256 d0f662fcdd4cfff53a9b8b9f317e44a385eceab6b573f0f2d760b865f8a861c5

See more details on using hashes here.

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

Hashes for tempo_async-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 170c52097c59a7f0a348d342df45d09274954c5f034514190cf93fa4cf03f5a4
MD5 525cf32f380abd705363f1e5c22eb4e5
BLAKE2b-256 9122c762983cf988f42cd4442f5226063c08395e503e27ec4f1969a7516c2585

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page