import os
import time
import requests

BASE = "https://api.bay.example/v1/apibay"
KEY = os.environ["APIBAY_KEY"]


def get(table, **params):
    """One request. Waits and retries when the plan's rate limit answers 429."""
    while True:
        r = requests.get(f"{BASE}/{table}", params=params, headers={"LB-Access-Token": KEY}, timeout=30)
        if r.status_code == 429 and "Retry-After" in r.headers:
            time.sleep(int(r.headers["Retry-After"]))
            continue
        r.raise_for_status()
        return r.json()


def rows(table, **params):
    """Every row that matches, a page of 100 at a time."""
    pg = 0
    while True:
        page = get(table, ps=100, pg=pg, **params)
        if not page:
            return
        yield from page
        pg += 1
