Skip to main content

poet-api

Requests with Limiter.

Uses pyrate_limiter.SQLiteBucket with use_file_lock=True.

It has a default RATE_LIMIT_SITES setting and waits for settings.DJANGO_RATE_LIMIT_SITES:

Configuration:

DJANGO_RATE_LIMIT_SITES = {
    "payment_gateway": {
        "domain_keyword": "adomain.com",
        "rates": [Rate(25, Duration.MINUTE)],
        "max_wait_seconds": 5,  # Custom timeout in seconds
    },
    "analytics_service": {
        "domain_keyword": "anotherdomain.com",
        "rates": [Rate(50, Duration.MINUTE)],
        # No timeout here: default = -1
    },
    # The following line, already exists as default setting:
    # "default": {"rates": [Rate(59, Duration.MINUTE)], "max_wait_seconds": -1},
}
  • DJANGO_RATE_LIMIT_SITES.keys()[0]: str -> Unique identity keyword
  • DJANGO_RATE_LIMIT_SITES.values()[0]: dict ->
    • domain_keyword: str -> urlparse(url).netlock or "default". A new autonomous limiter is based on this keyword.
    • rates: list -> List of Rate objects for the domain_keyword
    • max_wait_seconds: int -> Max seconds the limiter can wait before failing.
      • -1: Wait until the bucket allows a request, the request never fails.
      • positive int: If the bucket needs more than positive int seconds to allow a request, the request fails.
        • A mocked HTTP 429 ("Too Many Requests") response object is returned without making an actual request.
        • requests().raise_for_status() raises requests.exceptions.HTTPError.

Example

Bare metal use

import requests

from api.rate_limiter import send_request

try:
    # 1. Send request
    response = send_request("https://example.com", method="POST", json={"amount": 10})
    
    # 2. Raise for error
    # If:
    #   - max_wait_seconds != -1 (-1 is the default) 
    #   - the bucket cannot afford it
    # -> a mocked HTTP 429 ("Too Many Requests") response is returned

    response.raise_for_status()
    
    # 3. Continue if everything is OK
    data = response.json()
    print("Success:", data)

except requests.exceptions.HTTPError as e:
    print(f"HTTP Error occurred: {e}")
    if e.response and e.response.status_code == 429:
        print("Reason: The application queue was too full and exceeded max_wait_seconds!")
        
except Exception as e:
    print(f"An unexpected error occurred: {e}")
  ```

### `api.api_call.call_them`
This method provides a mechanism to retry up to 10 times with backoff strategy. 

```python
from api import api_call

try:
  response: ApiResponse = api_call.call_them(
          url="https://www.example.com",
          action="GET",
          **kwargs,
      )
  return response

except api_call.RETRIABLE_ERRORS as e:
  print(f"HTTP Error occurred: {e}")

except Exception as e:
  print(f"An unexpected error occurred: {e}")

Download files

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

Source Distribution

poet_api-4.1.1.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

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

poet_api-4.1.1-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file poet_api-4.1.1.tar.gz.

File metadata

  • Download URL: poet_api-4.1.1.tar.gz
  • Upload date:
  • Size: 5.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.13.13 Linux/6.12.96+deb13-amd64

File hashes

Hashes for poet_api-4.1.1.tar.gz
Algorithm Hash digest
SHA256 aef5b3c6364c31c9005a95c5f9b5dcd6600898bdd79b1e729b0dfbd41e5fa523
MD5 8e2d169a3c77889cbe351ef18b42ec5e
BLAKE2b-256 b5506139e1b7230b44d248e4fc201e6461b171f96a0ca91ef0c2735cd536027f

See more details on using hashes here.

File details

Details for the file poet_api-4.1.1-py3-none-any.whl.

File metadata

  • Download URL: poet_api-4.1.1-py3-none-any.whl
  • Upload date:
  • Size: 6.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.4.1 CPython/3.13.13 Linux/6.12.96+deb13-amd64

File hashes

Hashes for poet_api-4.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1d2f3a03bb7311d80ce1a95c2ade85edb062eef1912d1effa73a8fea229f4c4f
MD5 e93697f2e7641b83cab77ce38f92a2f8
BLAKE2b-256 ecd5e23c65d9966cdfd8c7bbedf629ee793c3767eeadf171e14e0e1d57523c5e

See more details on using hashes here.

Release history Release notifications | RSS feed

4.2.2

2 files

4.2.1

2 files

4.2.0

2 files

4.1.2

2 files

This release

4.1.1 This release

2 files

4.1.0

2 files

4.0.1

2 files

3.0.4

2 files

3.0.3

2 files

3.0.2

2 files

3.0.0

2 files

2.0.3

2 files

2.0.1

2 files

1.2.18

2 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