v0.0.9¶
New: Cached Method Wrappers (lythonic.compose.cached)¶
YAML-configured caching layer for sync and async download methods. Wraps
methods that return dict or Pydantic BaseModel with SQLite-backed caching
and probabilistic stale refresh.
CacheRegistry— loads YAML config, validates method signatures, creates per-method SQLite tables, builds sync/async wrappers, and installs them on a nested namespace object for attribute-based access.CacheConfig/CacheRule— Pydantic models for cache configuration withmin_ttl/max_ttl(in days) per method.- Probabilistic stale refresh — between
min_ttlandmax_ttl, refresh probability increases linearly. Avoids thundering herd on expiry. - Namespace — dot-separated paths in config create nested attribute access
(e.g.,
cached.market.fetch_prices(ticker="AAPL")). - Dynamic DDL — cache tables are generated from method signatures with typed parameter columns and composite primary keys.
New: simple_type Flag on KnownType¶
KnownTypeArgs and KnownType now have a simple_type: bool field. Types
whose string representation is a plain, URL-safe scalar are marked True.
Auto-detected for primitives (int, float, bool, str), date,
datetime, and Path. Used by the cache layer to validate that method
parameters can serve as cache key columns.
New: Method.validate_simple_type_args()¶
Validates that all parameters of a method have type annotations registered as
simple_type in KNOWN_TYPES. Raises ValueError with a clear message if
any parameter fails. Used at config load time by CacheRegistry.
Fixes¶
- Minor SQL formatting fix in
DbModelselect/delete query construction (string concatenation replaced with f-string interpolation).
Dependencies¶
- Added
pyyamlas a project dependency.
Documentation¶
- Module docstring for
lythonic.compose.cachedwith configuration, usage, TTL behavior, and validation sections. - Added "Simple Types" section to
lythonic.typesmodule docstring. - Added
lythonic.compose.cachedAPI reference page. - Added documentation guidelines section to
CLAUDE.md. - Updated
documenting.mdwith "What Goes Where" rules.