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.5.tar.gz (6.3 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.5-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: xapian_store-0.2.5.tar.gz
  • Upload date:
  • Size: 6.3 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.5.tar.gz
Algorithm Hash digest
SHA256 2b636d5fefa42217edcf4ce200ff6cc30d1919ee73a389ef45f4df64b7898db5
MD5 a77e14383df1d4208c3d0b0e58b78868
BLAKE2b-256 1b7c29aa7ba5e0ef9a0f740d4b9b3d4204a8a2b7b5becb1f9102523f18703cdf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: xapian_store-0.2.5-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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 15aeb86693cb7395a75877103c753b6ceee5563419ff848b3150f5a9bd95799c
MD5 5074a0615b87c36d645f2dcbff3b1bb0
BLAKE2b-256 9566858d5b80ebbd05bb450142f9579b6fdc809c5f9730b6450247338c588b8e

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