Skip to main content

TikTok Channel Domain layer for the Keble unified e-commerce data platform.

Project description

keble-tiktok

The source line requires keble-helpers>=1.52.2 and keble-data-infra-contract>=0.4.0 so FastMoss/EchoTik usage and failure evidence use the same public contracts in development and registry installs. Provider prices and durable retry policy remain outside this package.

Side effects if changes:

  • Data Infra transports these usage events through the TikTok manifest.
  • Changing the helper floor requires lock and raw API source-graph verification.

TikTok provider package for the Keble raw-data API. It owns FastMoss and EchoTik native clients, DTOs, channel-domain mappings, framework-free service classes, and explicit provider manifests.

FastMossServices and EchoTikServices accept data-infra contract requests and return normalized contract models. They do not construct FastAPI routers. keble-data-infra-api imports their manifests and owns all HTTP paths, exception handlers, settings, and lifecycle wiring.

Install the current public provider line with pip install "keble-tiktok>=0.7.0,<1". Version 0.7.0 requires the released data-infra contract and keble-db>=1.9.0; provider credentials remain runtime configuration and are never included in the distribution.

Provider failure boundary

Each FastMoss or EchoTik public client call performs at most one physical HTTP request. The package never sleeps or retries internally: the centralized Data Infra runtime owns durable delay, retry budgets, circuit state, and replay. Native exceptions retain only typed and bounded evidence: HTTP status, reviewed business code, provider request ID, parsed Retry-After, and a sanitized message. Numeric and HTTP-date Retry-After values share the contract parser.

Provider manifests export FastMossFailureAdapter or EchoTikFailureAdapter. Known rate, quota, authentication, permission, invalid-request, invalid-response, transport, timeout, and availability failures map to the universal contract. Unknown business codes and HTTP 402 remain unknown; this package never infers a payment problem without provider-documented billing evidence. Every real provider attempt emits one API_CALL usage event on success or failure, while cache hits emit none.

Side effects if changes:

  • Data Infra HTTP responses and Platform durable recovery consume these exact manifest adapters and retry hints.
  • Moving retry into a provider client would multiply physical calls, usage, cost, and attempt counts behind the central scheduler's back.
  • Broadening payment classification would create false operator billing gates.

Provider-native detail models stay inside this package. Public results expose only normalized fields; shared monetary values use keble_helpers.Money. Production docstrings follow the split keble_data_infra_contract plus concrete FastMossServices/EchoTikServices composition; retired monolith and ApplicationService terminology remains only in explicitly historical records.

Distinct trending resources

Version 0.6 exposes native TRENDING operations rather than adapting search:

  • FastMoss: products and creators through its dated product/creator boards;
  • EchoTik: products, creators, sellers, and channel-wide videos through four distinct ranking endpoints and schemas.

The shared adapter maps lookbackDays to the latest completed day, ISO week, or month. Provider cursors are page-local and remain hidden behind Data Infra's opaque central session. Bare-list EchoTik responses are definitively exhausted only after an empty page (or a documented reachable product-page cap); a sparse non-empty page remains UNKNOWN, so filtering or dedupe cannot create false source exhaustion.

Every item retains its genuine resource model and a neutral summary plus typed metric/board-position evidence explaining why it stands out. Products use CommerceListing, creators use CommerceCreator, sellers use CommerceStore, and channel-wide videos use ShortVideo. The video board has its own typed /api/v3/echotik/video/ranklist DTO/source and is not the product-linked video list. Its embedded product references are parsed with typed Pydantic Json; transient playback URLs may cross the raw response but are never stable identity and the platform does not persist them.

Provider packages emit all source occurrences and usage events. Query-selected entity/family dedupe, buffered pagination, and fixed-time session invalidation remain owned by the central Data Infra coordinator.

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"
uv run npx --yes pyright .
uv build

HTTP transports and environment-proxy behavior are constructor-injected. Direct clients default to trust_env=False for deterministic library tests; the service builders explicitly enable production environment proxies. The runtime dependency includes HTTPX's SOCKS transport so a configured SOCKS4/5 proxy is supported rather than failing during client construction.

Durable provider cache and batches

The API may inject one ProviderOperationCache into each service builder. The cache stores validated contract JSON in an API-owned Mongo collection keyed by provider, operation, contract version, and the hash of the complete canonical request. Empty successful responses use a shorter TTL. Redis owner-token leases ensure concurrent identical misses call upstream once, then all contenders recheck Mongo before provider I/O.

ProviderResponseCacheRepository.ensure_indexes() must run during API startup. It creates the exact unique compound read index plus expires_at TTL index; drop_obsolete_indexes() removes indexes whose query shapes no longer exist.

FastMoss search and EchoTik video services expose service-only aload_many_* methods. They deduplicate exact requests, bound concurrency where no native batch exists, and reconstruct the caller's original order. No HTTP batch route is generated.

When the API initializes Sentry, exact cache reads, Redis lease acquisition, real provider work, and service-only batches emit nested spans. Span data is limited to stable provider/operation/outcome/count metadata; request keywords, response payloads, and credentials are never attached.

Each service builder also accepts the package-neutral UsageAccountingRecorderProtocol. One real FastMoss/EchoTik upstream interaction emits one API_CALL event with provider, operation, and duration whether the physical request succeeds or fails. The recorder is deliberately invoked inside cache-miss handlers, so cache hits never replay old billable usage. Prices and currencies remain owned by the consuming platform.

Real cache tests require isolated Mongo/Redis and use:

KEBLE_BACKEND_ENV_FILE=/path/to/keble.backend/.env \
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"

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_tiktok-0.7.0.tar.gz (403.8 kB view details)

Uploaded Source

Built Distribution

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

keble_tiktok-0.7.0-py3-none-any.whl (135.9 kB view details)

Uploaded Python 3

File details

Details for the file keble_tiktok-0.7.0.tar.gz.

File metadata

  • Download URL: keble_tiktok-0.7.0.tar.gz
  • Upload date:
  • Size: 403.8 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_tiktok-0.7.0.tar.gz
Algorithm Hash digest
SHA256 7e885d1912045edef55ff78e990ff644dcec885c5022c098cd6824c81a2153d5
MD5 52ceffd63514700c57474cde0443f93b
BLAKE2b-256 554b92e7f098a98df6d1676fcbd916c0bcdf1a3d63ddf1666e2659935fd68d02

See more details on using hashes here.

File details

Details for the file keble_tiktok-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: keble_tiktok-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 135.9 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_tiktok-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 640cc543611096e982ef6c47cef789efa7afb147a8b0b91d00bac4e60a298d8f
MD5 9b3ed7c40bff0056fe2f2dee53c67d8a
BLAKE2b-256 5cdd1b4a8aa9db9b38dd087b330b0684dab67f0a7860eb2bb12a57b59ed98c4a

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