Skip to main content

NoSQL document store support for the Lexigram Framework (MongoDB, DynamoDB, Firestore)

Project description

lexigram-nosql

NoSQL document store support for the Lexigram Framework (MongoDB, DynamoDB, Firestore).


Overview

lexigram-nosql provides async document-store backends behind a clean protocol interface. It ships with a MongoDB driver (Motor-based), a fluent query builder, aggregation pipelines, the repository pattern with specifications, a migration manager, and Named DI multi-backend support. All backends are resolved through the container.


Install

uv add lexigram lexigram-nosql

# With MongoDB support
uv add "lexigram-nosql[mongodb]"
# With DynamoDB support
uv add "lexigram-nosql[dynamodb]"
# With Firestore support
uv add "lexigram-nosql[firestore]"

Quick Start

from lexigram import Application
from lexigram.di.module import Module, module
from lexigram.nosql import NoSQLModule
from lexigram.nosql.config import MongoDBConfig, NoSQLConfig
from lexigram.contracts.data.nosql.nosql import DocumentStoreProtocol


@module(
    imports=[
        NoSQLModule.configure(
            NoSQLConfig(
                driver="mongodb",
                mongodb=MongoDBConfig(
                    uri="mongodb://localhost:27017",
                    database="myapp",
                ),
            )
        )
    ]
)
class AppModule(Module):
    pass


async def main() -> None:
    async with Application.boot(modules=[AppModule]) as app:
        store = await app.container.resolve(DocumentStoreProtocol)
        collection = await store.get_collection("users")

        doc_id = await collection.insert_one({"name": "Alice", "age": 30})
        users = await collection.find({"age": {"$gte": 25}})
        print(users)


if __name__ == "__main__":
    import asyncio
    asyncio.run(main())

Configuration

Zero-config usage: Call NoSQLModule.configure() with no arguments to use all defaults.

Option 1 — YAML file

# application.yaml
nosql:
  driver: "mongodb"
  mongodb:
    uri: "mongodb://localhost:27017"
    database: "myapp"
    max_pool_size: 100

Option 2 — Profiles + Environment Variables (recommended)

export LEX_NOSQL__DRIVER=mongodb
export LEX_NOSQL__MONGODB__URI=mongodb://localhost:27017
export LEX_NOSQL__MONGODB__DATABASE=myapp

Option 3 — Python

from lexigram.nosql import NoSQLModule
from lexigram.nosql.config import NoSQLConfig, MongoDBConfig

NoSQLModule.configure(
    NoSQLConfig(
        driver="mongodb",
        mongodb=MongoDBConfig(uri="mongodb://localhost:27017", database="myapp"),
    )
)

Config reference

NoSQLConfig

Field Default Env var Description
enabled true LEX_NOSQL__ENABLED Enable NoSQL support
driver "mongodb" LEX_NOSQL__DRIVER NoSQL driver ("mongodb", "dynamodb", "firestore")
mongodb MongoDBConfig() MongoDB-specific connection configuration
backends [] Named backend entries for multi-backend DI registration

MongoDBConfig

Field Default Env var Description
uri "mongodb://localhost:27017" LEX_NOSQL__MONGODB__URI MongoDB connection URI
database "lexigram" LEX_NOSQL__MONGODB__DATABASE Database name
max_pool_size 100 LEX_NOSQL__MONGODB__MAX_POOL_SIZE Maximum connection pool size
min_pool_size 10 LEX_NOSQL__MONGODB__MIN_POOL_SIZE Minimum connection pool size
retry_writes true LEX_NOSQL__MONGODB__RETRY_WRITES Enable write retries
retry_reads true LEX_NOSQL__MONGODB__RETRY_READS Enable read retries
read_preference "primaryPreferred" LEX_NOSQL__MONGODB__READ_PREFERENCE Read preference mode
write_concern_w "majority" LEX_NOSQL__MONGODB__WRITE_CONCERN_W Write concern level
auth_source "admin" LEX_NOSQL__MONGODB__AUTH_SOURCE Authentication database

Module Factory Methods

Method Description
NoSQLModule.configure(config, enable_ttl=True) Configure with explicit config
NoSQLModule.scope(*repositories) Scope repository classes into a feature module
NoSQLModule.stub() Minimal config for testing

Key Features

  • MongoDB backend — async Motor-based with connection pooling and retry logic
  • Query builder — type-safe fluent API for MongoDB queries and projections
  • Aggregation pipelines — composable pipeline stages for complex aggregations
  • Repositories — base DocumentRepository pattern with specification support
  • Migration manager — index creation, field operations, and collection management
  • Named DI multi-backend — multiple backends registered via Annotated[DocumentStoreProtocol, Named("analytics")]
  • TTL index support — automatic time-to-live index creation for document expiration
  • Session and transaction context managersmongodb_session() and mongodb_transaction() for ACID operations

Testing

async with Application.boot(modules=[NoSQLModule.stub()]) as app:
    store = await app.container.resolve(DocumentStoreProtocol)
    # Test with in-memory backend

Key Source Files

File What it contains
src/lexigram/nosql/module.py NoSQLModule.configure(), .scope(), .stub()
src/lexigram/nosql/config.py NoSQLConfig, MongoDBConfig, NamedNoSQLConfig
src/lexigram/nosql/di/provider.py NoSQLProvider boot and registration
src/lexigram/nosql/backends/mongodb/backend.py MongoDBDocumentStore implementation
src/lexigram/nosql/query/builder.py DocumentQueryBuilder
src/lexigram/nosql/query/pipeline.py AggregationPipeline
src/lexigram/nosql/repository/base.py DocumentRepository base class
src/lexigram/nosql/migration/manager.py MigrationManager

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

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

lexigram_nosql-0.1.1-py3-none-any.whl (55.9 kB view details)

Uploaded Python 3

File details

Details for the file lexigram_nosql-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for lexigram_nosql-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f930eff178e5c5ea18ae9876aba0421f2995d5350089aa629cde424e6cb2b49e
MD5 da1af9ed0742487706cd1cfca3c58524
BLAKE2b-256 4a29073719558067421c9c795510f51dfc07a701717b4a2a40312ad5f386ea20

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