Cut 5 (Python). stores_by_type maps each type to one store and generic_stores becomes a single generic_store. add_backing_store raises on a type already claimed and add_generic_store on a second generic store; a refused registration claims nothing. _stores_for_type and _all_specific_stores are deleted. _store_for_type returns the home store and raises when stores are attached but none is home to the type. It returns None only for a cache with no stores, which the contract keeps as an in-memory cache. put, put_envelope, put_envelopes and delete each write one store; pull_all_backing_stores pulls each distinct store once. Tests: test_second_generic_store_rejected, test_type_claimed_twice_rejected, test_types_route_to_home_store. No bytes change. Version 0.2.0 -> 0.3.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
27 lines
702 B
TOML
27 lines
702 B
TOML
[build-system]
|
|
requires = ["setuptools>=68"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "cultcache-py"
|
|
version = "0.3.0"
|
|
description = "Python CultCache runtime for GameCult typed state."
|
|
readme = "README.md"
|
|
requires-python = ">=3.10"
|
|
license = "MIT"
|
|
authors = [{ name = "GameCult" }]
|
|
classifiers = [
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.10",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
]
|
|
dependencies = ["msgpack>=1.0"]
|
|
[project.scripts]
|
|
cultcache-py-interop = "cultcache_py.interop:main"
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["src"]
|
|
|
|
[tool.setuptools.package-data]
|
|
cultcache_py = ["py.typed"]
|