Skip to main content

keble-keepa

The source line requires keble-helpers>=1.52.2 so exact Keepa token/call usage uses the same public contract in development and registry installs. Provider pricing remains outside this package.

Side effects if changes:

  • Amazon provider services and Data Infra transport these usage events.
  • Changing the helper floor requires lock and downstream raw API verification.

keble-keepa is Keble's Keepa API and cache package. It owns Keepa object schemas, sync/async API access, Mongo cache CRUD, batch loading, time conversion helpers, and pytest fixtures/fakes for downstream packages.

Verified State

Checked on 2026-06-30 against pyproject.toml, package exports, keble_keepa/, and tests.

  • Package: keble-keepa 1.4.0
  • Python: >=3.13,<3.14
  • Critical deps: aiohttp, requests, keble-db, keble-helpers, keble-exceptions, python-dateutil
  • Source roots: api/, crud/, schemas/, testing/, utils/
  • Public exports: Keepa API objects, batch loader, cache helpers, time conversion helpers, and the keble_keepa.testing pytest plugin.

Install the current public release with pip install "keble-keepa>=1.4.0,<2". Version 1.4.0 requires the shared keble-db>=1.9.0 persistence contract and the shared upstream-failure vocabulary in keble-helpers>=1.52.2.

Runtime Contract

  • Sync Keepa calls use requests; async Keepa calls use aiohttp and should respect standard proxy environment variables when configured by callers.
  • Bestseller boards expose both request_best_sellers and genuine-aiohttp arequest_best_sellers; the async method uses the same typed Redis/Mongo cache key and emits usage only after real upstream I/O.
  • Every typed response retains Keepa's tokensConsumed field. Async cache misses emit that exact provider token count through UsageAccountingRecorderProtocol; missing or zero reports remain USAGE_ONLY and therefore billing-unknown rather than being inferred free.
  • Cache hits emit no usage event even though cached response metadata is retained for traceability.
  • Every physical Keepa request is attempted once. The package does not sleep, retry, recursively split failed batches, or silently drop failed ASINs; provider exceptions reach Data Infra intact and durable retry belongs to the Platform worker.
  • Rejections retain HTTP status, request ID, typed Keepa error data, and exact capacity evidence. refillIn is milliseconds, negative tokensLeft remains valid evidence, and gross refill is distinct from token-flow reduction.
  • Failed async HTTP responses emit provider-reported tokensConsumed usage before the typed exception is raised; non-JSON failures remain usage-unknown rather than being inferred free.
  • Cache reads and writes must stay explicit about key, marketplace, and freshness behavior. Do not hide broad cache scans behind convenience APIs.
  • Downstream tests should use keble_keepa.testing fixtures/fakes before inventing package-local Keepa mocks.

Testing

uv sync --group test
RUN_INTEGRATION=1 RUN_REAL_DB=1 RUN_LOCAL_STACK=1 RUN_DB_STACK=1 \
  uv run pytest -q -m "not live and not container"
uv run pytest -q -m "not live and not slow and not eval and not local_stack and not db_stack and not container"
uv run pytest -q -m eval
uv run npx --yes pyright .

The first command is the local-full Keble development proof and runs Mongo-backed integration tests with isolated cache collections. The second is the portable-offline fallback for no-DB machines. Selecting -m eval is the eval opt-in; there is no generic RUN_EVALS gate.

Real Keepa calls belong only in marked/env-gated live tests. Package-owned test helpers live under keble_keepa.testing; do not recreate root-level tests/config.py, root test packages, or legacy tests/test_* source folders.

Mongo/Redis/Keepa live settings load explicit process env first, then tests/.env, then the umbrella keble.backend/.env through keble_db.testing.resolve_test_env. Set KEBLE_BACKEND_ENV_FILE=/path/to/.env from unusual worktree or CI layouts. Do not copy backend secrets into this repo.

Live Keepa canaries should make one real provider call against an isolated cache collection. Do not add Keepa response-cache replay to live tests for speed; cache correctness belongs in integration tests with fake/shared fixtures.

Async cache tests receive a process-unique namespaced ExtendedAsyncRedis and delete all owned keys after every test. Keep this isolation when adding new cache consumers; an un-namespaced wrapper is a test and production leak risk.

Change Logs

Historical release notes and long AI change history live under logs/.

Side Effect If Changes

  • Backend report generation, product discovery, keble-keepa-analysis, and AMZ product-report workflows depend on this package for Keepa access.
  • Cache query/index changes can affect production cache repair and live report correctness; verify query shape and cleanup.

Download files

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

Source Distribution

keble_keepa-1.4.0.tar.gz (332.7 kB view details)

Uploaded Source

Built Distribution

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

keble_keepa-1.4.0-py3-none-any.whl (131.8 kB view details)

Uploaded Python 3

File details

Details for the file keble_keepa-1.4.0.tar.gz.

File metadata

  • Download URL: keble_keepa-1.4.0.tar.gz
  • Upload date:
  • Size: 332.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for keble_keepa-1.4.0.tar.gz
Algorithm Hash digest
SHA256 3721ad1e79338b9b4f13d5b9fb3d5a968f14499f726846098d856a2eca92eed8
MD5 b35e04b833e22df6b077baeb0cdb62be
BLAKE2b-256 602a94d6d8ee1b1da4d47fb58496ab53846f6fef77eec6472d144ad9ccf5d1d5

See more details on using hashes here.

File details

Details for the file keble_keepa-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: keble_keepa-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 131.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for keble_keepa-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 51f2bdd5f50a7cd9e1da7723be57b555bc10304db554daa138ac9672682fcb4d
MD5 7898f05ce821e03c6d42beeba8288867
BLAKE2b-256 281986b3c8035e7917458ece65846a189e416c2ca1ee12a0ac68eb6e5269fbc7

See more details on using hashes here.

Release history Release notifications | RSS feed

1.4.5

2 files

1.4.4

2 files

1.4.3

2 files

1.4.2

2 files

1.4.1

2 files

This release

1.4.0 This release

2 files

1.3.0

2 files

1.2.3

2 files

1.2.2

2 files

1.2.1

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