Skip to main content

Typed Amazon raw-data provider services for Keble.

Project description

keble-amz

The source line requires keble-helpers>=1.51.0 so exact Keepa/media/storage usage quantities resolve identically from Git development pins and public registry installs. Pricing remains the consuming platform's responsibility.

Side effects if changes:

  • Data Infra imports these provider usage events through the Amazon manifest.
  • Changing the helper floor requires lock, package-contract, and raw API source graph verification together.

keble-amz 2.x is the framework-free Amazon raw-data provider package. The legacy 1.x monolith remains preserved on maintenance branch 1.0.28; current source no longer embeds Keepa, cost analysis, ScraperAPI, or bundled wheels. Version 2.1 composes the independently released keble-amz-shuffle traversal through a narrow protocol for native trending discovery.

Install the current public provider line with pip install "keble-amz>=2.1.0,<3". Its public dependency bounds require the released data-infra contract, keble-db>=1.9.0, and keble-keepa>=1.3.0.

Architecture

keble-data-infra-contract
          ↑
keble-amz: AmazonServices ──> keble-keepa
          │        │              │
          │        └──> Amazon-owned typed LLM planner
          │                    └──> keble-amz-shuffle traversal
          └── RedisLeaseManager <-┘ Mongo/Redis cache

AmazonServices exports three baseline operations and conditionally exposes a fourth when the API composes Shuffle plus the typed model:

  • lookup_products(ProductLookupQuery) — exact batched ASIN lookup;
  • search_products(ProductSearchQuery) — Keepa title finder plus product load;
  • rank_products(ProductRankingQuery) — current official Amazon category bestseller board.
  • trending_products(ProductTrendingQuery) — category-first, evidence-bearing recent products with native source continuation; never a search/query fallback.

For initial nonblank intent, Amazon selects only real root/child category IDs through typed Pydantic-AI output. Category and discovery words are removed from the residual before Product Finder: trending clothing produces a category plan with no title keyword, while red clothing keeps only red. Blank intent browses roots without an LLM call. Shuffle reads raw non-deduped pages, expands wrapper-collapsed children only after definitive source exhaustion, and stops at true logical depth three. Data Infra alone owns cross-page entity/family dedupe.

Every returned product carries structured metrics/timestamps plus a neutral summary explaining why it stands out. Root/child model calls and Keepa finder/ product loads all emit exact usage events; Amazon never attaches prices.

Provider methods return only keble-data-infra-contract values. Keepa DTOs, cache policy, and usage accounting remain owned by keble-keepa. Shared Money, AmazonMarketplace, hashing, and Redis owner-token leases are reused from Keble packages rather than redeclared.

AmazonServices accepts one package-neutral usage recorder and forwards it to finder, board, and partial-cache product loading. Each real Keepa cache miss therefore contributes its provider-reported tokensConsumed event; Amazon does not infer tokens, attach prices, or replay usage for cache hits. The raw API captures these events and returns them on the shared page contract.

The package exports no FastAPI app or router. keble-data-infra-api consumes the manifest and owns all paths, OpenAPI, error handlers, and runtime clients.

Cache and concurrency

Keepa remains the only normalized provider cache. Amazon wraps complete operation requests in RedisLeaseManager single-flight keys. Every contender re-enters the Keepa handler after acquiring ownership, so it rechecks Mongo and spends no upstream call after the first owner persists the result.

Redis lease acquisition and the cache-recheck-or-upstream critical section emit Sentry child spans when the API initializes telemetry. Span names contain only the stable Keepa operation and never ASINs, keywords, request JSON, responses, or credentials.

Lookup delegates to KeepaApiBatchLoader, preserving exact per-ASIN cache keys, caller order, duplicates, partial hits, negative hits, newest-write-wins repair, request batching, and usage accounting.

Verification

Python 3.13 and uv are required:

uv lock --check
uv run pytest -q \
  -m "not live and not slow and not eval and not local_stack and not db_stack and not container"
KEBLE_BACKEND_ENV_FILE=/path/to/keble.backend/.env \
RUN_INTEGRATION=1 RUN_REAL_DB=1 RUN_LOCAL_STACK=1 \
  uv run pytest -q tests/integration
KEBLE_BACKEND_ENV_FILE=/path/to/keble.backend/.env RUN_KEEPA_LIVE=1 \
  uv run pytest -q tests/live -m "live and keepa_live"
uv run npx --yes pyright .
uv build

Integration/live tests use unique Redis namespaces and Mongo collections and clean them after each run. Secrets resolve by explicit name through the shared backend-env test helper and are never copied into this repository.

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

keble_amz-2.1.0.tar.gz (95.2 kB view details)

Uploaded Source

Built Distribution

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

keble_amz-2.1.0-py3-none-any.whl (17.4 kB view details)

Uploaded Python 3

File details

Details for the file keble_amz-2.1.0.tar.gz.

File metadata

  • Download URL: keble_amz-2.1.0.tar.gz
  • Upload date:
  • Size: 95.2 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_amz-2.1.0.tar.gz
Algorithm Hash digest
SHA256 c367303c67cb8db39376c5fe6de734870063e62e607929a6d74aaa9b976b5b32
MD5 53f16ed424955f073ecc352ba718005d
BLAKE2b-256 0daa6d24b3740481c9f8be0671eee4309982c356eba052faaf58f419a2d18419

See more details on using hashes here.

File details

Details for the file keble_amz-2.1.0-py3-none-any.whl.

File metadata

  • Download URL: keble_amz-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.4 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_amz-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 eff86a359e5f470e9748d6fb5bf29a14b637b00a70e65db948ec68d31b7e5a23
MD5 ae07ec92e8d34c7e7fd818102c96dc35
BLAKE2b-256 090c295f48bb8fda4d66a75dfae421c4fa12bbb2b705875882391c47df271fb1

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