Skip to main content

Composable commerce core for products, order items, and payments.

Project description

commercexl

commercexl is a reusable commerce core for:

  • product catalog records
  • checkout orders
  • order items
  • payment systems
  • FastAPI router assembly

It does not create your DB engine, session factory, auth, or project-specific payment callbacks.

Installation

pip install commercexl

For tests and local development:

pip install "commercexl[test]"
pip install "commercexl[dev]"

What the library gives you

  • SQLAlchemy models via CommerceBase
  • explicit module wiring via CommerceModule
  • abstract services for products, order items, and payments
  • built-in balance and handmade payments
  • FastAPI router factory via create_router(...)

Quick start

from decimal import Decimal

from commercexl import (
    BaseConfig,
    CommerceModule,
    DefaultOrderItemService,
    HandMadePaymentService,
    PaymentConfigBuilder,
    ProductOrderConfig,
    ProductOrderConfigBuilder,
)


class ProjectCommerceConfig(BaseConfig):
    PAYMENT_SYSTEMS = {"USD": ("handmade",)}
    MIN_TOP_UP_AMOUNTS = {"USD": Decimal("1")}
    CREDITS_CONVERTERS = {"USD": Decimal("10000")}


commerce = CommerceModule(
    config_class=ProjectCommerceConfig,
    product_orders=ProductOrderConfigBuilder(
        ProductOrderConfig(MyProductService, DefaultOrderItemService),
    ),
    payments=PaymentConfigBuilder(HandMadePaymentService),
)

FastAPI integration

from commercexl import CommerceHTTPConfig, CommerceUserActorDTO, create_router

app.include_router(
    create_router(
        CommerceHTTPConfig(
            get_db_session_dependency=get_db_session,
            get_current_user_dependency=get_current_user,
            get_commerce_module=lambda: commerce,
            build_actor=lambda user: CommerceUserActorDTO(id=user.id),
            get_user_id=lambda user: int(user.id),
            is_staff=lambda user: bool(user.is_staff),
        ),
    ),
    prefix="/api/v1",
)

Alembic

commercexl does not ship migrations. The host project owns migrations.

Add library metadata to your Alembic target_metadata:

from commercexl import CommerceBase
from my_project.db import Base

target_metadata = [
    Base.metadata,
    CommerceBase.metadata,
]

Docs

Testing

pytest

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

commercexl-0.1.0.tar.gz (40.3 kB view details)

Uploaded Source

Built Distribution

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

commercexl-0.1.0-py3-none-any.whl (61.9 kB view details)

Uploaded Python 3

File details

Details for the file commercexl-0.1.0.tar.gz.

File metadata

  • Download URL: commercexl-0.1.0.tar.gz
  • Upload date:
  • Size: 40.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for commercexl-0.1.0.tar.gz
Algorithm Hash digest
SHA256 110cab2cf42a6f330214dd0f5626b56544083c74d259d60c64071b2f352bd45b
MD5 3e4688fa6ea33b2addd87bd3f462f1c8
BLAKE2b-256 a22309846f05304d8e8512a171a4465c1bd64bc970d79ae2dd9512539affcc93

See more details on using hashes here.

File details

Details for the file commercexl-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: commercexl-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 61.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for commercexl-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9acf4387475755363ac0f492c24b0eb04293ab649a3cb0ffcaf1bfe8f12bd3b6
MD5 27b6974b73ba3e5f8f85cc21ac260d65
BLAKE2b-256 f11f9e27da53076c70e6c64fcaac3d9680bb70af8d631ecb91bb00f3baf44500

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