Skip to main content

Python package that provides the XStore model class, built on top of xapian_model.base.BaseXapianModel

Project description

xapian-store

A Python package providing the XStore model class for managing store data using Xapian as the underlying storage engine.

Features

  • Built on top of xapian_model.base.BaseXapianModel
  • Comprehensive store schema with support for multiple store types
  • Type-safe field definitions with validation
  • Support for soft deletes and timestamps
  • Configurable store attributes (slug, domain, name, owner, type, etc.)
  • Visual customization fields (photo, header, color)

Requirements

  • Python 3.12 or higher
  • xapian-model >= 0.4.0
  • pyxapiand >= 2.1.0

Installation

pip install xapian-store

Quick Start

from xstore import XStore, STORE_TYPE_AFFILIATE, get_store_schema

# XStore comes with a default INDEX_TEMPLATE and SCHEMA;
# override them in a subclass if your application requires it.
class MyStore(XStore):
    INDEX_TEMPLATE = "my_stores"

# Create a store instance
store = MyStore()

# Access the schema directly
schema = get_store_schema(foreign_schema='.schema/store')

Store Types

The package supports the following store types:

  • STORE_TYPE_NONE - No specific type
  • STORE_TYPE_AFFILIATE - Affiliate store
  • STORE_TYPE_AFFINITY - Affinity store
  • STORE_TYPE_FRANCHISE - Franchise store
  • STORE_TYPE_SUPPLIER - Supplier store
  • STORE_TYPE_MASHUP - Mashup store

Schema Configuration

The store schema includes the following main fields:

  • Identification: id, slug, domain, canonical_url
  • Metadata: name, owner, supplier, store_type
  • Visual: photo, header, color, base_color
  • Status: is_published, hidden, is_deleted, is_root_affinity_store
  • Timestamps: created_at, updated_at, deleted_at
  • Contact: from_email, address

Security Note

For security reasons, the following values should be reviewed and overridden per application:

  • INDEX_TEMPLATE — defaults to 'stores'; override in a subclass if needed
  • foreign_schema — passed as a parameter to get_store_schema()

Configuration Example

from xstore import XStore, get_store_schema

# Override INDEX_TEMPLATE and SCHEMA for your application
class MyStore(XStore):
    INDEX_TEMPLATE = "my_stores"
    SCHEMA = get_store_schema(foreign_schema='.schema/my_store')

# Use your store
store = MyStore()

Development

Setup

The project uses direnv to automatically create and activate a virtual environment:

# With direnv installed, simply cd into the project
cd xstore

# Or manually create the environment
python3 -m venv .venv
source .venv/bin/activate

Running Tests

The integration tests require a running Xapiand server at localhost:8880. They skip gracefully when the server is unavailable.

# Install test dependencies
pip install -e ".[test]"

# Run integration tests (requires xapiand at localhost:8880)
pytest tests/ -v

# Tests skip automatically if the server is not running

All test indices are namespaced under the tests/ prefix so they don't interfere with production data and can be cleaned up manually.

Project Structure

xstore/
├── src/
│   └── xstore/
│       ├── __init__.py     # Public API exports
│       ├── models.py       # XStore model class
│       └── schemas.py      # Schema definitions
├── tests/
│   ├── conftest.py         # Shared fixtures and server check
│   └── test_integration.py # Integration test suite
├── pyproject.toml          # Project configuration
└── README.md               # This file

License

MIT License - see LICENSE file for details.

Links

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Authors

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

xapian_store-0.2.3.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

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

xapian_store-0.2.3-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

Details for the file xapian_store-0.2.3.tar.gz.

File metadata

  • Download URL: xapian_store-0.2.3.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for xapian_store-0.2.3.tar.gz
Algorithm Hash digest
SHA256 8df0d4d9284f8356b3f543e7905b2cc9d40950ec0c1520b34a7ddc9d6c412977
MD5 05b40daa5d8f78754e282c082a4b6cb1
BLAKE2b-256 3ff10a6900435d986d241da302201d20370a74fdd3e7b60fdb48295496fc442e

See more details on using hashes here.

File details

Details for the file xapian_store-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: xapian_store-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 6.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for xapian_store-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 46ae88dfca5b49dbdb3c6219f7be9f07c32d9ae82f581904be1968bdbe12df8c
MD5 4b2bbf2cf796cff78cd62c38eddeb63c
BLAKE2b-256 1229b52a453d11906571496b8f0d44337e3faa4f294bb758678b9bca736eb569

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