stapel-shop
Composite preset for a catalog shop (categories + typed attributes + listings + reviews): wires stapel-categories, stapel-listings and stapel-reviews into one INSTALLED_APPS/urls/config bundle, defaults reviews' TARGET_TYPES to the catalog's listings, and owns the one piece of real cross-domain glue a composite is allowed to know both sides of: ListingReviewSummaryProjection (reviews -> listings per-listing rating aggregate, local live_query in the monolith or event-carried state transfer when reviews is split into its own service).
Part of the Stapel framework — composable Django apps that deploy as a monolith or as microservices without changing module code.
Install
pip install stapel-shop
At a glance
| Fact | Value |
|---|---|
| Version | 0.2.36 |
| Python | >=3.11 (3.11, 3.12, 3.13, 3.14) |
| Fleet dependencies | stapel-attributes · stapel-categories · stapel-listings · stapel-reviews |
Documentation
capabilities.json · llms.txt (for agents)
Likes/favourites are NOT included yet:
stapel-engagementdoes not exist. They arrive as a MINOR bump of this composite once it does.
Assemble (one line)
pip install stapel-tools
stapel-assemble myshop --libs shop
cd myshop && make test
That expands shop through the STAPEL_LIBS requires
closure and wires every member module into INSTALLED_APPS,
requirements.txt, urls.py and CONFIG.MD, then runs the verify gates.
Manual wiring (no scaffold)
# settings.py
from stapel_shop import preset
INSTALLED_APPS = [
# ... django/stapel-core baseline (incl. stapel_core.django.projections)
"stapel_categories",
"stapel_listings",
"stapel_reviews",
"stapel_shop",
]
for _k, _v in preset.SETTINGS_DEFAULTS.items():
globals().setdefault(_k, _v)
# urls.py
from django.urls import include, path
urlpatterns = [
path("categories/", include("stapel_categories.urls")),
path("listings/", include("stapel_listings.urls")),
path("reviews/", include("stapel_reviews.urls")),
]
Config checklist (fill these, in the generated project's CONFIG.MD too)
| Key | Note |
|---|---|
STAPEL_REVIEWS["TARGET_TYPES"] |
prefilled by stapel_shop.preset.SETTINGS_DEFAULTS (targets listing); add can_review/can_moderate Functions to restrict |
STAPEL_LISTINGS["BASE_CURRENCY"] |
default USD — set your currency |
STAPEL_LISTINGS["DEFAULT_LISTING_TTL_DAYS"] |
default 30 |
STAPEL_REVIEWS["RATING_MIN"/"RATING_MAX"] |
defaults 1..5 |
Glue (what this package actually contains)
stapel_shop.projections.ListingReviewSummaryProjection— reviews→listings rating aggregate. Local mode (monolith): live reads throughreviews.aggregates_by_keys. Remote mode:ListingReviewSummarytable fed fromreviews.review.published/hiddenfacts, rebuilt fromreviews.aggregates_export.- Read it ONLY through
stapel_core.comm.projections.read("shop.listing_review_summary", keys=[...])—{key: {"avg": float, "count": int}}, the same shape in both modes; a key with no published review is absent from the answer. - Requires stapel-reviews >= 0.2, the release that shipped both Functions this projection is declared against.
License
MIT — see LICENSE.
This page is assembled by stapel-readme from docs/readme.md plus the contract artifacts in docs/. Edit the prose in docs/readme.md; the badges, facts and links above and below it are generated — do not hand-edit README.md.
Metadata
Release files for stapel-shop 0.2.36
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| stapel_shop-0.2.36.tar.gz | 30.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| stapel_shop-0.2.36-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 57.4 kB
Release files / stapel_shop-0.2.36.tar.gz
| Download URL | stapel_shop-0.2.36.tar.gz |
|---|---|
| Size | 30.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1f0f4c844f55b912c20956a371d400228eef58b166c6d67c7b1f8e44d501def6
|
|
BLAKE2b-256 checksum How to use checksums |
b457a56b194b328e62a44dff8a09342ad81ae7e78d9d65e0c39e570263134a4f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.
Transparency logRelease files / stapel_shop-0.2.36-py3-none-any.whl
| Download URL | stapel_shop-0.2.36-py3-none-any.whl |
|---|---|
| Size | 27.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d9091df499198187651a2596b7789dc1b07adca0ff1b999afe8131243ffec63d
|
|
BLAKE2b-256 checksum How to use checksums |
587e51125af182f7d927b997c2497c37d92b8bba563ee509249410471189f4c1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.
Transparency log