P0: fix doc:// -> docs:// across standards src/server/registry and regenerate stale mongo-ops bundle. P1: build recipe + spec-first routing now document the openapi-first codegen fast path (models/routes with --inject-request/--package). P4: CRUD template documents the model-vs-document id rule (BaseDocument owns id). P5: authless guidance (omit security keys). P6: template gains generic infra (http_cache, keyed SSE bus, KV port+in-memory+Redis), interfaces/openapi.py + .dockerignore + generic build test registered as components, and a get_app_template tool; genericity matrix marks LLM pool + human-in-loop as reference-app patterns. P7: intake/build/start_app/trial prompts. P8: template ships tests/integration/test_openapi_app_builds.py. Rebuilt standards + openapi-first bundles and re-collected.
2790 lines
167 KiB
JSON
2790 lines
167 KiB
JSON
{
|
|
"module": "mongo_ops",
|
|
"content": {
|
|
"path": "mongo_ops",
|
|
"docstring": "# Summary\n\nmongo-ops: A modular MongoDB operations layer for FastAPI microservices.\n\nThis package provide a standardized way to interact with MongoDB in async\nPython applications, particularly optimized for FastAPI. It includes:\n\n- **Connection Management**: Async lifecycle management for Motor clients.\n- **Base Models**: Pydantic v2 models for MongoDB documents.\n- **Repository Pattern**: Generic CRUD operations and base repository classes.\n- **Caching**: In-memory and Redis cache backends with ID-based caching.\n- **Population**: Recursive document populating with cycle detection.\n- **Transactions**: Helpers for multi-document ACID transactions.\n- **Registry**: Centralized model, index, and cache lifecycle management.\n\nExample:\n ```python\n from mongo_ops import BaseDocument, BaseRepository, CachedBaseRepository\n from mongo_ops.cache import InMemoryCacheBackend, CacheConfig\n\n class User(BaseDocument):\n username: str\n\n class UserRepository(BaseRepository[User]):\n def __init__(self):\n super().__init__(\"users\", User)\n\n # With caching:\n cache = InMemoryCacheBackend()\n class CachedUserRepo(CachedBaseRepository[User]):\n def __init__(self):\n super().__init__(\"users\", User, cache)\n ```",
|
|
"objects": {
|
|
"CachedBaseRepository": {
|
|
"name": "CachedBaseRepository",
|
|
"kind": "class",
|
|
"path": "mongo_ops.CachedBaseRepository",
|
|
"signature": "CachedBaseRepository(collection_name: str, model: type[T], cache_backend: CacheBackend, config: CacheConfig | None = None)",
|
|
"docstring": "Repository that reads and writes through a cache backend.\n\nWraps an existing BaseRepository with an ID-keyed cache. Reads consult\nthe backend first and fall through to MongoDB on a miss, populating the\ncache on success. Writes invalidate or refresh the affected key.\n\nNotes:\n **Guarantees:**\n\n - The cache holds the raw document shape (``model_dump``), so FK\n references round-trip as hex strings, not populated models.\n - When ``config.enabled`` is False the repository behaves exactly\n like its parent with no cache access.",
|
|
"members": {
|
|
"get_by_id": {
|
|
"name": "get_by_id",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CachedBaseRepository.get_by_id",
|
|
"signature": "get_by_id(id: str | ObjectId)",
|
|
"docstring": "Fetch a document, reading through the cache when enabled.\n\nArgs:\n id (Union[str, ObjectId]):\n The document ID.\n\nReturns:\n Optional[T]: The model instance, or None when not found."
|
|
},
|
|
"create": {
|
|
"name": "create",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CachedBaseRepository.create",
|
|
"signature": "create(data: T)",
|
|
"docstring": "Insert a document and cache the raw snapshot.\n\nArgs:\n data (T):\n The model instance to insert.\n\nReturns:\n T: The created model instance, including its ID."
|
|
},
|
|
"update": {
|
|
"name": "update",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CachedBaseRepository.update",
|
|
"signature": "update(id: str | ObjectId, data: dict)",
|
|
"docstring": "Update a document and refresh its cache entry.\n\nArgs:\n id (Union[str, ObjectId]):\n The document ID.\n data (dict):\n Fields to set via $set.\n\nReturns:\n Optional[T]: The updated model instance, or None when not found."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CachedBaseRepository.delete",
|
|
"signature": "delete(id: str | ObjectId)",
|
|
"docstring": "Delete a document and remove its cache entry.\n\nArgs:\n id (Union[str, ObjectId]):\n The document ID.\n\nReturns:\n bool: True if a document was deleted, False otherwise."
|
|
},
|
|
"warm_cache": {
|
|
"name": "warm_cache",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CachedBaseRepository.warm_cache",
|
|
"signature": "warm_cache(ids: list[str | ObjectId])",
|
|
"docstring": "Pre-populate the cache for a set of document IDs.\n\nDocs already present in the cache are skipped.\n\nArgs:\n ids (list[Union[str, ObjectId]]):\n Document IDs to warm.\n\nReturns:\n int: Number of entries added to the cache."
|
|
},
|
|
"invalidate_cache": {
|
|
"name": "invalidate_cache",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CachedBaseRepository.invalidate_cache",
|
|
"signature": "invalidate_cache(id: str | ObjectId)",
|
|
"docstring": "Remove a single document's cache entry.\n\nArgs:\n id (Union[str, ObjectId]):\n The document ID to invalidate."
|
|
}
|
|
}
|
|
},
|
|
"MongoConnectionManager": {
|
|
"name": "MongoConnectionManager",
|
|
"kind": "class",
|
|
"path": "mongo_ops.MongoConnectionManager",
|
|
"signature": null,
|
|
"docstring": "Manages MongoDB connections with async lifecycle.\n\nThis class provides a singleton-like manager for the MongoDB client and\ndatabase instances, ensuring they are properly initialized and closed\nacross the application lifecycle.",
|
|
"members": {
|
|
"connect": {
|
|
"name": "connect",
|
|
"kind": "function",
|
|
"path": "mongo_ops.MongoConnectionManager.connect",
|
|
"signature": "connect(uri: str, db_name: str, **kwargs: Any)",
|
|
"docstring": "Connect to MongoDB and initialize the shared client.\n\nArgs:\n uri (str): MongoDB connection URI (e.g., \"mongodb://localhost:27017\").\n db_name (str): Name of the database to use.\n **kwargs: Additional Motor client options (e.g., maxPoolSize).\n\nReturns:\n AsyncIOMotorDatabase: The initialized database instance."
|
|
},
|
|
"disconnect": {
|
|
"name": "disconnect",
|
|
"kind": "function",
|
|
"path": "mongo_ops.MongoConnectionManager.disconnect",
|
|
"signature": "disconnect()",
|
|
"docstring": "Close the active MongoDB connection and cleanup resources."
|
|
},
|
|
"get_database": {
|
|
"name": "get_database",
|
|
"kind": "function",
|
|
"path": "mongo_ops.MongoConnectionManager.get_database",
|
|
"signature": "get_database()",
|
|
"docstring": "Retrieve the current database instance.\n\nReturns:\n AsyncIOMotorDatabase: The active database instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
|
|
},
|
|
"get_client": {
|
|
"name": "get_client",
|
|
"kind": "function",
|
|
"path": "mongo_ops.MongoConnectionManager.get_client",
|
|
"signature": "get_client()",
|
|
"docstring": "Retrieve the current client instance.\n\nReturns:\n AsyncIOMotorClient: The active Motor client instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
|
|
},
|
|
"lifespan": {
|
|
"name": "lifespan",
|
|
"kind": "function",
|
|
"path": "mongo_ops.MongoConnectionManager.lifespan",
|
|
"signature": "lifespan(uri: str, db_name: str, **kwargs: Any)",
|
|
"docstring": "Async context manager for managing connection lifecycle.\n\nDesigned for use with FastAPI or other frameworks supporting\nlifespan management.\n\nNotes:\n Connects to MongoDB on entry, yields the active database instance\n to the context body, and disconnects on exit.\n\nUsage:\n @asynccontextmanager\n async def lifespan(app: FastAPI):\n async with MongoConnectionManager.lifespan(uri, db_name):\n yield"
|
|
}
|
|
}
|
|
},
|
|
"BaseDocument": {
|
|
"name": "BaseDocument",
|
|
"kind": "class",
|
|
"path": "mongo_ops.BaseDocument",
|
|
"signature": null,
|
|
"docstring": "Base document class with common MongoDB fields.\n\nInherit from this class to create Pydantic models that represent\nMongoDB documents. It includes automatic handling of the `_id` field\nand timestamps.\n\nAttributes:\n id: The MongoDB document ID (aliased to `_id`).\n created_at: Timestamp when the document was created.\n updated_at: Timestamp when the document was last updated.",
|
|
"members": {
|
|
"id": {
|
|
"name": "id",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.BaseDocument.id",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"created_at": {
|
|
"name": "created_at",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.BaseDocument.created_at",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"updated_at": {
|
|
"name": "updated_at",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.BaseDocument.updated_at",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"Config": {
|
|
"name": "Config",
|
|
"kind": "class",
|
|
"path": "mongo_ops.BaseDocument.Config",
|
|
"signature": null,
|
|
"docstring": null,
|
|
"members": {
|
|
"populate_by_name": {
|
|
"name": "populate_by_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.BaseDocument.Config.populate_by_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"arbitrary_types_allowed": {
|
|
"name": "arbitrary_types_allowed",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.BaseDocument.Config.arbitrary_types_allowed",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"json_encoders": {
|
|
"name": "json_encoders",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.BaseDocument.Config.json_encoders",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"json_schema_extra": {
|
|
"name": "json_schema_extra",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.BaseDocument.Config.json_schema_extra",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"ModelRegistry": {
|
|
"name": "ModelRegistry",
|
|
"kind": "class",
|
|
"path": "mongo_ops.ModelRegistry",
|
|
"signature": null,
|
|
"docstring": "Registry for managing multiple models and their collections.\n\nThis registry allows central management of collections and their\nassociated indexes, making it easier to perform mass initialization\nat application startup.",
|
|
"members": {
|
|
"register": {
|
|
"name": "register",
|
|
"kind": "function",
|
|
"path": "mongo_ops.ModelRegistry.register",
|
|
"signature": "register(collection_name: str, model: type[BaseDocument], indexes: list[tuple] | None = None)",
|
|
"docstring": "Register a model with its collection and indexes.\n\nArgs:\n collection_name (str): Name of the MongoDB collection.\n model (type[BaseDocument]): Document model class (subclass of BaseDocument).\n indexes (list[Any]): List of index specifications. Each spec is passed\n directly to pymongo's create_index. Supported forms:\n - single field: (\"email\", 1)\n - compound: [(\"author_id\", 1), (\"created_at\", -1)]\n - with options: {\"keys\": [(\"username\", 1)], \"options\": {\"unique\": True}}\n\nExample:\n ModelRegistry.register(\"users\", UserDocument, indexes=[(\"email\", 1)])\n ModelRegistry.register(\n \"posts\",\n PostDocument,\n indexes=[[(\"author_id\", 1), (\"created_at\", -1)]],\n )"
|
|
},
|
|
"initialize_all": {
|
|
"name": "initialize_all",
|
|
"kind": "function",
|
|
"path": "mongo_ops.ModelRegistry.initialize_all",
|
|
"signature": "initialize_all(db: AsyncIOMotorDatabase | None = None)",
|
|
"docstring": "Initialize all registered collections and create indexes.\n\nThis method should be called during application startup to ensure\nall necessary indexes exist in the database.\n\nArgs:\n db (Optional[AsyncIOMotorDatabase]): Database instance. If not provided,\n uses the global database from MongoConnectionManager."
|
|
},
|
|
"get_model": {
|
|
"name": "get_model",
|
|
"kind": "function",
|
|
"path": "mongo_ops.ModelRegistry.get_model",
|
|
"signature": "get_model(collection_name: str)",
|
|
"docstring": "Retrieve a registered model by its collection name.\n\nArgs:\n collection_name (str): The name of the collection.\n\nReturns:\n type[BaseDocument]: The registered model class.\n\nRaises:\n KeyError: If the model for the given collection is not registered."
|
|
},
|
|
"list_collections": {
|
|
"name": "list_collections",
|
|
"kind": "function",
|
|
"path": "mongo_ops.ModelRegistry.list_collections",
|
|
"signature": "list_collections()",
|
|
"docstring": "List all registered collection names.\n\nReturns:\n list[str]: A list of collection names."
|
|
},
|
|
"get_cache_backend": {
|
|
"name": "get_cache_backend",
|
|
"kind": "function",
|
|
"path": "mongo_ops.ModelRegistry.get_cache_backend",
|
|
"signature": "get_cache_backend()",
|
|
"docstring": "Get the registered cache backend instance.\n\nReturns:\n Optional[CacheBackend]: The cache backend, if registered."
|
|
},
|
|
"set_cache_backend": {
|
|
"name": "set_cache_backend",
|
|
"kind": "function",
|
|
"path": "mongo_ops.ModelRegistry.set_cache_backend",
|
|
"signature": "set_cache_backend(backend: CacheBackend)",
|
|
"docstring": "Register a cache backend for all cache-enabled repositories.\n\nShould be called after MongoDB connection is established,\nbefore cache-backed repositories are used.\n\nArgs:\n backend (CacheBackend): A CacheBackend instance (InMemoryCacheBackend\n or RedisCacheBackend)."
|
|
},
|
|
"initialize_cache": {
|
|
"name": "initialize_cache",
|
|
"kind": "function",
|
|
"path": "mongo_ops.ModelRegistry.initialize_cache",
|
|
"signature": "initialize_cache()",
|
|
"docstring": "Initialize the registered cache backend.\n\nMust be called after set_cache_backend() and before any\ncache-backed repository operations. Typically called right\nafter MongoDB connection is established.\n\nRaises:\n RuntimeError: If no cache backend has been registered."
|
|
},
|
|
"shutdown_cache": {
|
|
"name": "shutdown_cache",
|
|
"kind": "function",
|
|
"path": "mongo_ops.ModelRegistry.shutdown_cache",
|
|
"signature": "shutdown_cache()",
|
|
"docstring": "Shutdown the registered cache backend gracefully.\n\nShould be called during application shutdown to clean up\nbackground tasks (e.g., in-memory TTL cleanup)."
|
|
}
|
|
}
|
|
},
|
|
"BaseRepository": {
|
|
"name": "BaseRepository",
|
|
"kind": "class",
|
|
"path": "mongo_ops.BaseRepository",
|
|
"signature": "BaseRepository(collection_name: str, model: type[T])",
|
|
"docstring": "Base repository class combining CRUD operations and collection management.\n\nThis class simplifies repository creation by automatically obtaining the\ndatabase connection and collection instance.\n\nAttributes:\n collection_name: The name of the collection managed by this repository.",
|
|
"members": {
|
|
"collection_name": {
|
|
"name": "collection_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.BaseRepository.collection_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"CRUDMixin": {
|
|
"name": "CRUDMixin",
|
|
"kind": "class",
|
|
"path": "mongo_ops.CRUDMixin",
|
|
"signature": "CRUDMixin(collection: AsyncIOMotorCollection, model: type[T])",
|
|
"docstring": "Generic CRUD operations mixin for MongoDB collections.\n\nThis mixin provides standard Create, Read, Update, and Delete operations\nthat work with Pydantic models.\n\nAttributes:\n collection: The Motor collection instance.\n model: The Pydantic model class representing the document.",
|
|
"members": {
|
|
"collection": {
|
|
"name": "collection",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.CRUDMixin.collection",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"model": {
|
|
"name": "model",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.CRUDMixin.model",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"data_to_model": {
|
|
"name": "data_to_model",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CRUDMixin.data_to_model",
|
|
"signature": "data_to_model(data: dict)",
|
|
"docstring": null
|
|
},
|
|
"create": {
|
|
"name": "create",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CRUDMixin.create",
|
|
"signature": "create(data: T)",
|
|
"docstring": "Create a new document in the collection.\n\nArgs:\n data (T): The Pydantic model instance to insert.\n\nReturns:\n T: The created Pydantic model instance, including the assigned ID."
|
|
},
|
|
"get_by_id": {
|
|
"name": "get_by_id",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CRUDMixin.get_by_id",
|
|
"signature": "get_by_id(id: str | ObjectId)",
|
|
"docstring": "Retrieve a document by its ID.\n\nArgs:\n id (Union[str, ObjectId]): The document ID (string or ObjectId).\n\nReturns:\n Optional[T]: The Pydantic model instance if found, else None."
|
|
},
|
|
"get_many": {
|
|
"name": "get_many",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CRUDMixin.get_many",
|
|
"signature": "get_many(filter: dict[str, Any] | None = None, skip: int = 0, limit: int = 100, sort: list[tuple] | None = None)",
|
|
"docstring": "Retrieve multiple documents with filtering, pagination, and sorting.\n\nArgs:\n filter (Optional[Dict[str, Any]]): MongoDB filter dictionary (e.g., {\"is_active\": True}).\n skip (int): Number of documents to skip for pagination.\n limit (int): Maximum number of documents to return (default 100).\n sort (Optional[List[tuple]]): List of sort specifications [(field, direction), ...].\n E.g., [(\"created_at\", -1)] for descending.\n\nReturns:\n List[T]: A list of Pydantic model instances.\n\nExample:\n ```python\n users = await repo.get_many(\n filter={\"role\": \"admin\"},\n limit=10,\n sort=[(\"username\", 1)]\n )\n ```"
|
|
},
|
|
"update": {
|
|
"name": "update",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CRUDMixin.update",
|
|
"signature": "update(id: str | ObjectId, data: dict[str, Any])",
|
|
"docstring": "Update a document by its ID using the $set operator.\n\nArgs:\n id (Union[str, ObjectId]): The document ID (string or ObjectId).\n data (Dict[str, Any]): A dictionary of fields and values to update.\n\nReturns:\n Optional[T]: The updated Pydantic model instance if found, else None.\n\nExample:\n ```python\n updated_user = await repo.update(user_id, {\"email\": \"new@example.com\"})\n ```"
|
|
},
|
|
"patch": {
|
|
"name": "patch",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CRUDMixin.patch",
|
|
"signature": "patch(id: str | ObjectId, data: dict[str, Any])",
|
|
"docstring": "Partially update a document using $set (REST PATCH semantics).\n\nUnlike update(), patch() takes a partial dict and applies only those\nfields. PopulatingRepository overrides this to prevent patching FK fields.\n\nArgs:\n id (Union[str, ObjectId]): The document ID (string or ObjectId).\n data (Dict[str, Any]): A partial dictionary of fields and values to update.\n\nReturns:\n Optional[T]: The updated Pydantic model instance if found, else None."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CRUDMixin.delete",
|
|
"signature": "delete(id: str | ObjectId)",
|
|
"docstring": "Delete a document by its ID.\n\nArgs:\n id (Union[str, ObjectId]): The document ID (string or ObjectId).\n\nReturns:\n bool: True if a document was deleted, False otherwise."
|
|
},
|
|
"count": {
|
|
"name": "count",
|
|
"kind": "function",
|
|
"path": "mongo_ops.CRUDMixin.count",
|
|
"signature": "count(filter: dict[str, Any] | None = None)",
|
|
"docstring": "Count documents matching a filter.\n\nArgs:\n filter (Optional[Dict[str, Any]]): MongoDB filter dictionary.\n\nReturns:\n int: The number of matching documents."
|
|
}
|
|
}
|
|
},
|
|
"PopulatingRepository": {
|
|
"name": "PopulatingRepository",
|
|
"kind": "class",
|
|
"path": "mongo_ops.PopulatingRepository",
|
|
"signature": "PopulatingRepository(collection_name: str, model: type[T], population_engine: PopulationEngine | None = None, populate_rules: list[PopulateRule] | None = None)",
|
|
"docstring": "Repository that auto-populates and depopulates FK references.\n\nOn read, ObjectId FK fields are resolved to model instances according to\nthe configured PopulateRules. On write, populated model references are\ncollapsed back to ObjectIds before hitting MongoDB.\n\nNotes:\n **Guarantees:**\n\n - Populate rules apply on both read (data_to_model) and write\n (create/update) paths.\n - Patching FK fields via patch() is rejected.\n - Class attributes `population_engine` and `_populate_rules` must\n be set (see set_population_engine/set_populate_rules) for any\n population to occur.",
|
|
"members": {
|
|
"population_engine": {
|
|
"name": "population_engine",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.PopulatingRepository.population_engine",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"set_population_engine": {
|
|
"name": "set_population_engine",
|
|
"kind": "function",
|
|
"path": "mongo_ops.PopulatingRepository.set_population_engine",
|
|
"signature": "set_population_engine(engine: PopulationEngine)",
|
|
"docstring": "Attach (or replace) the population engine.\n\nArgs:\n engine (PopulationEngine):\n Engine used to resolve references."
|
|
},
|
|
"set_populate_rules": {
|
|
"name": "set_populate_rules",
|
|
"kind": "function",
|
|
"path": "mongo_ops.PopulatingRepository.set_populate_rules",
|
|
"signature": "set_populate_rules(rules: list[PopulateRule])",
|
|
"docstring": "Set the FK resolution rules.\n\nArgs:\n rules (list[PopulateRule]):\n Rules describing which fields resolve and how deep."
|
|
},
|
|
"data_to_model": {
|
|
"name": "data_to_model",
|
|
"kind": "function",
|
|
"path": "mongo_ops.PopulatingRepository.data_to_model",
|
|
"signature": "data_to_model(data: dict)",
|
|
"docstring": "Convert a raw dict to a model, resolving FK references first.\n\nArgs:\n data (dict):\n Raw document dictionary.\n\nReturns:\n T: The populated model instance.\n\nRaises:\n ValueError: If a FK field holds an embedded dict instead of an\n ObjectId."
|
|
},
|
|
"create": {
|
|
"name": "create",
|
|
"kind": "function",
|
|
"path": "mongo_ops.PopulatingRepository.create",
|
|
"signature": "create(data: T)",
|
|
"docstring": "Depopulate, insert, and re-populate a new document.\n\nArgs:\n data (T):\n The model instance to insert (FK fields may hold models).\n\nReturns:\n T: The created model instance, including its ID."
|
|
},
|
|
"update": {
|
|
"name": "update",
|
|
"kind": "function",
|
|
"path": "mongo_ops.PopulatingRepository.update",
|
|
"signature": "update(id: str | ObjectId, data: T)",
|
|
"docstring": "Depopulate and update a document by ID.\n\nArgs:\n id (Union[str, ObjectId]):\n The document ID.\n data (T):\n The model instance holding the updated fields.\n\nReturns:\n Optional[T]: The updated model instance, or None when not found."
|
|
},
|
|
"patch": {
|
|
"name": "patch",
|
|
"kind": "function",
|
|
"path": "mongo_ops.PopulatingRepository.patch",
|
|
"signature": "patch(id: str | ObjectId, data: dict[str, Any])",
|
|
"docstring": "Partially update a document, rejecting FK field changes.\n\nArgs:\n id (Union[str, ObjectId]):\n The document ID.\n data (dict[str, Any]):\n Partial dictionary of fields to update.\n\nReturns:\n Optional[T]: The updated model instance, or None when not found.\n\nRaises:\n ValueError: If any FK field is present in the patch payload."
|
|
}
|
|
}
|
|
},
|
|
"TransactionManager": {
|
|
"name": "TransactionManager",
|
|
"kind": "class",
|
|
"path": "mongo_ops.TransactionManager",
|
|
"signature": null,
|
|
"docstring": "Simplified multi-document transaction handling.\n\nThis class provides helpers for executing operations within a MongoDB\ntransaction, ensuring ACID compliance for multi-document updates.",
|
|
"members": {
|
|
"start_session": {
|
|
"name": "start_session",
|
|
"kind": "function",
|
|
"path": "mongo_ops.TransactionManager.start_session",
|
|
"signature": "start_session(**kwargs: Any)",
|
|
"docstring": "Start a transaction session as an async context manager.\n\nNotes:\n Yields the active session with a started transaction; callers\n run their operations against the session inside the with-block.\n\nUsage:\n async with TransactionManager.start_session() as session:\n await collection.insert_one(doc, session=session)\n await other_collection.update_one(filter, update, session=session)"
|
|
},
|
|
"execute_transaction": {
|
|
"name": "execute_transaction",
|
|
"kind": "function",
|
|
"path": "mongo_ops.TransactionManager.execute_transaction",
|
|
"signature": "execute_transaction(operations: list[Callable[[AsyncIOMotorClientSession], Awaitable[Any]]], **kwargs: Any)",
|
|
"docstring": "Execute multiple operations within a single transaction.\n\nArgs:\n operations (List[Callable[[AsyncIOMotorClientSession], Awaitable[Any]]]): A list of async\n callables that accept a session parameter and return a result.\n **kwargs: Transaction options.\n\nReturns:\n List[Any]: A list containing the results of each operation.\n\nExample:\n results = await TransactionManager.execute_transaction([\n lambda s: repo1.create(data1, session=s),\n lambda s: repo2.update(id, data2, session=s),\n ])"
|
|
}
|
|
}
|
|
},
|
|
"connection": {
|
|
"name": "connection",
|
|
"kind": "module",
|
|
"path": "mongo_ops.connection",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nMongoDB connection management.",
|
|
"members": {
|
|
"MongoConnectionManager": {
|
|
"name": "MongoConnectionManager",
|
|
"kind": "class",
|
|
"path": "mongo_ops.connection.MongoConnectionManager",
|
|
"signature": null,
|
|
"docstring": "Manages MongoDB connections with async lifecycle.\n\nThis class provides a singleton-like manager for the MongoDB client and\ndatabase instances, ensuring they are properly initialized and closed\nacross the application lifecycle.",
|
|
"members": {
|
|
"connect": {
|
|
"name": "connect",
|
|
"kind": "function",
|
|
"path": "mongo_ops.connection.MongoConnectionManager.connect",
|
|
"signature": "connect(uri: str, db_name: str, **kwargs: Any) -> AsyncIOMotorDatabase",
|
|
"docstring": "Connect to MongoDB and initialize the shared client.\n\nArgs:\n uri (str): MongoDB connection URI (e.g., \"mongodb://localhost:27017\").\n db_name (str): Name of the database to use.\n **kwargs: Additional Motor client options (e.g., maxPoolSize).\n\nReturns:\n AsyncIOMotorDatabase: The initialized database instance."
|
|
},
|
|
"disconnect": {
|
|
"name": "disconnect",
|
|
"kind": "function",
|
|
"path": "mongo_ops.connection.MongoConnectionManager.disconnect",
|
|
"signature": "disconnect() -> None",
|
|
"docstring": "Close the active MongoDB connection and cleanup resources."
|
|
},
|
|
"get_database": {
|
|
"name": "get_database",
|
|
"kind": "function",
|
|
"path": "mongo_ops.connection.MongoConnectionManager.get_database",
|
|
"signature": "get_database() -> AsyncIOMotorDatabase",
|
|
"docstring": "Retrieve the current database instance.\n\nReturns:\n AsyncIOMotorDatabase: The active database instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
|
|
},
|
|
"get_client": {
|
|
"name": "get_client",
|
|
"kind": "function",
|
|
"path": "mongo_ops.connection.MongoConnectionManager.get_client",
|
|
"signature": "get_client() -> AsyncIOMotorClient",
|
|
"docstring": "Retrieve the current client instance.\n\nReturns:\n AsyncIOMotorClient: The active Motor client instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
|
|
},
|
|
"lifespan": {
|
|
"name": "lifespan",
|
|
"kind": "function",
|
|
"path": "mongo_ops.connection.MongoConnectionManager.lifespan",
|
|
"signature": "lifespan(uri: str, db_name: str, **kwargs: Any) -> AbstractAsyncContextManager[AsyncIOMotorDatabase]",
|
|
"docstring": "Async context manager for managing connection lifecycle.\n\nDesigned for use with FastAPI or other frameworks supporting\nlifespan management.\n\nNotes:\n Connects to MongoDB on entry, yields the active database instance\n to the context body, and disconnects on exit.\n\nUsage:\n @asynccontextmanager\n async def lifespan(app: FastAPI):\n async with MongoConnectionManager.lifespan(uri, db_name):\n yield"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"models": {
|
|
"name": "models",
|
|
"kind": "module",
|
|
"path": "mongo_ops.models",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nBase document models for MongoDB.",
|
|
"members": {
|
|
"PyObjectId": {
|
|
"name": "PyObjectId",
|
|
"kind": "class",
|
|
"path": "mongo_ops.models.PyObjectId",
|
|
"signature": null,
|
|
"docstring": "Custom ObjectId type compatible with Pydantic v2.\n\nThis class extends the standard BSON ObjectId to provide validation and\nserialization support within Pydantic models.",
|
|
"members": {
|
|
"validate": {
|
|
"name": "validate",
|
|
"kind": "function",
|
|
"path": "mongo_ops.models.PyObjectId.validate",
|
|
"signature": "validate(v: Any) -> ObjectId",
|
|
"docstring": "Validate the input value and convert it to an ObjectId if possible.\n\nArgs:\n v (Any): The value to validate (can be str or ObjectId).\n\nReturns:\n ObjectId: The validated ObjectId instance.\n\nRaises:\n ValueError: If the value is not a valid ObjectId."
|
|
}
|
|
}
|
|
},
|
|
"BaseDocument": {
|
|
"name": "BaseDocument",
|
|
"kind": "class",
|
|
"path": "mongo_ops.models.BaseDocument",
|
|
"signature": null,
|
|
"docstring": "Base document class with common MongoDB fields.\n\nInherit from this class to create Pydantic models that represent\nMongoDB documents. It includes automatic handling of the `_id` field\nand timestamps.\n\nAttributes:\n id: The MongoDB document ID (aliased to `_id`).\n created_at: Timestamp when the document was created.\n updated_at: Timestamp when the document was last updated.",
|
|
"members": {
|
|
"id": {
|
|
"name": "id",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.models.BaseDocument.id",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"created_at": {
|
|
"name": "created_at",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.models.BaseDocument.created_at",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"updated_at": {
|
|
"name": "updated_at",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.models.BaseDocument.updated_at",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"Config": {
|
|
"name": "Config",
|
|
"kind": "class",
|
|
"path": "mongo_ops.models.BaseDocument.Config",
|
|
"signature": null,
|
|
"docstring": null,
|
|
"members": {
|
|
"populate_by_name": {
|
|
"name": "populate_by_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.models.BaseDocument.Config.populate_by_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"arbitrary_types_allowed": {
|
|
"name": "arbitrary_types_allowed",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.models.BaseDocument.Config.arbitrary_types_allowed",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"json_encoders": {
|
|
"name": "json_encoders",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.models.BaseDocument.Config.json_encoders",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"json_schema_extra": {
|
|
"name": "json_schema_extra",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.models.BaseDocument.Config.json_schema_extra",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"registry": {
|
|
"name": "registry",
|
|
"kind": "module",
|
|
"path": "mongo_ops.registry",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nModel registration for multi-service initialization.",
|
|
"members": {
|
|
"CacheBackend": {
|
|
"name": "CacheBackend",
|
|
"kind": "class",
|
|
"path": "mongo_ops.registry.CacheBackend",
|
|
"signature": null,
|
|
"docstring": "Abstract interface for cache backends.\n\nImplementations store byte-encoded values keyed by string, track usage\nstatistics, and manage their own lifecycle. The in-memory and Redis\nbackends both implement this contract.",
|
|
"members": {
|
|
"get": {
|
|
"name": "get",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.CacheBackend.get",
|
|
"signature": "get(key: str)",
|
|
"docstring": "Fetch a value from the cache.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n Optional[bytes]: The cached bytes, or None on a miss."
|
|
},
|
|
"set": {
|
|
"name": "set",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.CacheBackend.set",
|
|
"signature": "set(key: str, value: bytes, ttl: int | None = None)",
|
|
"docstring": "Store a value in the cache.\n\nArgs:\n key (str):\n The cache key.\n value (bytes):\n The byte-encoded value to store.\n ttl (Optional[int]):\n Time-to-live in seconds. When None, the backend default\n applies."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.CacheBackend.delete",
|
|
"signature": "delete(key: str)",
|
|
"docstring": "Remove a key from the cache.\n\nArgs:\n key (str):\n The cache key."
|
|
},
|
|
"exists": {
|
|
"name": "exists",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.CacheBackend.exists",
|
|
"signature": "exists(key: str)",
|
|
"docstring": "Check whether a key is present.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n bool: True if the key exists, False otherwise."
|
|
},
|
|
"clear_pattern": {
|
|
"name": "clear_pattern",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.CacheBackend.clear_pattern",
|
|
"signature": "clear_pattern(pattern: str)",
|
|
"docstring": "Remove all keys matching a glob pattern.\n\nArgs:\n pattern (str):\n Glob-style pattern; a trailing `*` matches prefixes."
|
|
},
|
|
"get_stats": {
|
|
"name": "get_stats",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.CacheBackend.get_stats",
|
|
"signature": "get_stats()",
|
|
"docstring": "Return a snapshot of cache statistics.\n\nReturns:\n CacheStats: A copy of the current stats counters."
|
|
},
|
|
"initialize": {
|
|
"name": "initialize",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.CacheBackend.initialize",
|
|
"signature": "initialize()",
|
|
"docstring": "Start background resources owned by the backend.\n\nShould be called once during application startup, after the\nrepositories are connected."
|
|
},
|
|
"shutdown": {
|
|
"name": "shutdown",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.CacheBackend.shutdown",
|
|
"signature": "shutdown()",
|
|
"docstring": "Stop and release background resources.\n\nShould be called once during application shutdown."
|
|
}
|
|
}
|
|
},
|
|
"MongoConnectionManager": {
|
|
"name": "MongoConnectionManager",
|
|
"kind": "class",
|
|
"path": "mongo_ops.registry.MongoConnectionManager",
|
|
"signature": null,
|
|
"docstring": "Manages MongoDB connections with async lifecycle.\n\nThis class provides a singleton-like manager for the MongoDB client and\ndatabase instances, ensuring they are properly initialized and closed\nacross the application lifecycle.",
|
|
"members": {
|
|
"connect": {
|
|
"name": "connect",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.MongoConnectionManager.connect",
|
|
"signature": "connect(uri: str, db_name: str, **kwargs: Any)",
|
|
"docstring": "Connect to MongoDB and initialize the shared client.\n\nArgs:\n uri (str): MongoDB connection URI (e.g., \"mongodb://localhost:27017\").\n db_name (str): Name of the database to use.\n **kwargs: Additional Motor client options (e.g., maxPoolSize).\n\nReturns:\n AsyncIOMotorDatabase: The initialized database instance."
|
|
},
|
|
"disconnect": {
|
|
"name": "disconnect",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.MongoConnectionManager.disconnect",
|
|
"signature": "disconnect()",
|
|
"docstring": "Close the active MongoDB connection and cleanup resources."
|
|
},
|
|
"get_database": {
|
|
"name": "get_database",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.MongoConnectionManager.get_database",
|
|
"signature": "get_database()",
|
|
"docstring": "Retrieve the current database instance.\n\nReturns:\n AsyncIOMotorDatabase: The active database instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
|
|
},
|
|
"get_client": {
|
|
"name": "get_client",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.MongoConnectionManager.get_client",
|
|
"signature": "get_client()",
|
|
"docstring": "Retrieve the current client instance.\n\nReturns:\n AsyncIOMotorClient: The active Motor client instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
|
|
},
|
|
"lifespan": {
|
|
"name": "lifespan",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.MongoConnectionManager.lifespan",
|
|
"signature": "lifespan(uri: str, db_name: str, **kwargs: Any)",
|
|
"docstring": "Async context manager for managing connection lifecycle.\n\nDesigned for use with FastAPI or other frameworks supporting\nlifespan management.\n\nNotes:\n Connects to MongoDB on entry, yields the active database instance\n to the context body, and disconnects on exit.\n\nUsage:\n @asynccontextmanager\n async def lifespan(app: FastAPI):\n async with MongoConnectionManager.lifespan(uri, db_name):\n yield"
|
|
}
|
|
}
|
|
},
|
|
"BaseDocument": {
|
|
"name": "BaseDocument",
|
|
"kind": "class",
|
|
"path": "mongo_ops.registry.BaseDocument",
|
|
"signature": null,
|
|
"docstring": "Base document class with common MongoDB fields.\n\nInherit from this class to create Pydantic models that represent\nMongoDB documents. It includes automatic handling of the `_id` field\nand timestamps.\n\nAttributes:\n id: The MongoDB document ID (aliased to `_id`).\n created_at: Timestamp when the document was created.\n updated_at: Timestamp when the document was last updated.",
|
|
"members": {
|
|
"id": {
|
|
"name": "id",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.registry.BaseDocument.id",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"created_at": {
|
|
"name": "created_at",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.registry.BaseDocument.created_at",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"updated_at": {
|
|
"name": "updated_at",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.registry.BaseDocument.updated_at",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"Config": {
|
|
"name": "Config",
|
|
"kind": "class",
|
|
"path": "mongo_ops.registry.BaseDocument.Config",
|
|
"signature": null,
|
|
"docstring": null,
|
|
"members": {
|
|
"populate_by_name": {
|
|
"name": "populate_by_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.registry.BaseDocument.Config.populate_by_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"arbitrary_types_allowed": {
|
|
"name": "arbitrary_types_allowed",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.registry.BaseDocument.Config.arbitrary_types_allowed",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"json_encoders": {
|
|
"name": "json_encoders",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.registry.BaseDocument.Config.json_encoders",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"json_schema_extra": {
|
|
"name": "json_schema_extra",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.registry.BaseDocument.Config.json_schema_extra",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"ModelRegistry": {
|
|
"name": "ModelRegistry",
|
|
"kind": "class",
|
|
"path": "mongo_ops.registry.ModelRegistry",
|
|
"signature": null,
|
|
"docstring": "Registry for managing multiple models and their collections.\n\nThis registry allows central management of collections and their\nassociated indexes, making it easier to perform mass initialization\nat application startup.",
|
|
"members": {
|
|
"register": {
|
|
"name": "register",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.ModelRegistry.register",
|
|
"signature": "register(collection_name: str, model: type[BaseDocument], indexes: list[tuple] | None = None) -> None",
|
|
"docstring": "Register a model with its collection and indexes.\n\nArgs:\n collection_name (str): Name of the MongoDB collection.\n model (type[BaseDocument]): Document model class (subclass of BaseDocument).\n indexes (list[Any]): List of index specifications. Each spec is passed\n directly to pymongo's create_index. Supported forms:\n - single field: (\"email\", 1)\n - compound: [(\"author_id\", 1), (\"created_at\", -1)]\n - with options: {\"keys\": [(\"username\", 1)], \"options\": {\"unique\": True}}\n\nExample:\n ModelRegistry.register(\"users\", UserDocument, indexes=[(\"email\", 1)])\n ModelRegistry.register(\n \"posts\",\n PostDocument,\n indexes=[[(\"author_id\", 1), (\"created_at\", -1)]],\n )"
|
|
},
|
|
"initialize_all": {
|
|
"name": "initialize_all",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.ModelRegistry.initialize_all",
|
|
"signature": "initialize_all(db: AsyncIOMotorDatabase | None = None) -> None",
|
|
"docstring": "Initialize all registered collections and create indexes.\n\nThis method should be called during application startup to ensure\nall necessary indexes exist in the database.\n\nArgs:\n db (Optional[AsyncIOMotorDatabase]): Database instance. If not provided,\n uses the global database from MongoConnectionManager."
|
|
},
|
|
"get_model": {
|
|
"name": "get_model",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.ModelRegistry.get_model",
|
|
"signature": "get_model(collection_name: str) -> type[BaseDocument]",
|
|
"docstring": "Retrieve a registered model by its collection name.\n\nArgs:\n collection_name (str): The name of the collection.\n\nReturns:\n type[BaseDocument]: The registered model class.\n\nRaises:\n KeyError: If the model for the given collection is not registered."
|
|
},
|
|
"list_collections": {
|
|
"name": "list_collections",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.ModelRegistry.list_collections",
|
|
"signature": "list_collections() -> list[str]",
|
|
"docstring": "List all registered collection names.\n\nReturns:\n list[str]: A list of collection names."
|
|
},
|
|
"get_cache_backend": {
|
|
"name": "get_cache_backend",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.ModelRegistry.get_cache_backend",
|
|
"signature": "get_cache_backend() -> CacheBackend | None",
|
|
"docstring": "Get the registered cache backend instance.\n\nReturns:\n Optional[CacheBackend]: The cache backend, if registered."
|
|
},
|
|
"set_cache_backend": {
|
|
"name": "set_cache_backend",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.ModelRegistry.set_cache_backend",
|
|
"signature": "set_cache_backend(backend: CacheBackend) -> None",
|
|
"docstring": "Register a cache backend for all cache-enabled repositories.\n\nShould be called after MongoDB connection is established,\nbefore cache-backed repositories are used.\n\nArgs:\n backend (CacheBackend): A CacheBackend instance (InMemoryCacheBackend\n or RedisCacheBackend)."
|
|
},
|
|
"initialize_cache": {
|
|
"name": "initialize_cache",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.ModelRegistry.initialize_cache",
|
|
"signature": "initialize_cache() -> None",
|
|
"docstring": "Initialize the registered cache backend.\n\nMust be called after set_cache_backend() and before any\ncache-backed repository operations. Typically called right\nafter MongoDB connection is established.\n\nRaises:\n RuntimeError: If no cache backend has been registered."
|
|
},
|
|
"shutdown_cache": {
|
|
"name": "shutdown_cache",
|
|
"kind": "function",
|
|
"path": "mongo_ops.registry.ModelRegistry.shutdown_cache",
|
|
"signature": "shutdown_cache() -> None",
|
|
"docstring": "Shutdown the registered cache backend gracefully.\n\nShould be called during application shutdown to clean up\nbackground tasks (e.g., in-memory TTL cleanup)."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"repository": {
|
|
"name": "repository",
|
|
"kind": "module",
|
|
"path": "mongo_ops.repository",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nRepository patterns and CRUD mixins for MongoDB.",
|
|
"members": {
|
|
"MongoConnectionManager": {
|
|
"name": "MongoConnectionManager",
|
|
"kind": "class",
|
|
"path": "mongo_ops.repository.MongoConnectionManager",
|
|
"signature": null,
|
|
"docstring": "Manages MongoDB connections with async lifecycle.\n\nThis class provides a singleton-like manager for the MongoDB client and\ndatabase instances, ensuring they are properly initialized and closed\nacross the application lifecycle.",
|
|
"members": {
|
|
"connect": {
|
|
"name": "connect",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.MongoConnectionManager.connect",
|
|
"signature": "connect(uri: str, db_name: str, **kwargs: Any)",
|
|
"docstring": "Connect to MongoDB and initialize the shared client.\n\nArgs:\n uri (str): MongoDB connection URI (e.g., \"mongodb://localhost:27017\").\n db_name (str): Name of the database to use.\n **kwargs: Additional Motor client options (e.g., maxPoolSize).\n\nReturns:\n AsyncIOMotorDatabase: The initialized database instance."
|
|
},
|
|
"disconnect": {
|
|
"name": "disconnect",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.MongoConnectionManager.disconnect",
|
|
"signature": "disconnect()",
|
|
"docstring": "Close the active MongoDB connection and cleanup resources."
|
|
},
|
|
"get_database": {
|
|
"name": "get_database",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.MongoConnectionManager.get_database",
|
|
"signature": "get_database()",
|
|
"docstring": "Retrieve the current database instance.\n\nReturns:\n AsyncIOMotorDatabase: The active database instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
|
|
},
|
|
"get_client": {
|
|
"name": "get_client",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.MongoConnectionManager.get_client",
|
|
"signature": "get_client()",
|
|
"docstring": "Retrieve the current client instance.\n\nReturns:\n AsyncIOMotorClient: The active Motor client instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
|
|
},
|
|
"lifespan": {
|
|
"name": "lifespan",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.MongoConnectionManager.lifespan",
|
|
"signature": "lifespan(uri: str, db_name: str, **kwargs: Any)",
|
|
"docstring": "Async context manager for managing connection lifecycle.\n\nDesigned for use with FastAPI or other frameworks supporting\nlifespan management.\n\nNotes:\n Connects to MongoDB on entry, yields the active database instance\n to the context body, and disconnects on exit.\n\nUsage:\n @asynccontextmanager\n async def lifespan(app: FastAPI):\n async with MongoConnectionManager.lifespan(uri, db_name):\n yield"
|
|
}
|
|
}
|
|
},
|
|
"BaseDocument": {
|
|
"name": "BaseDocument",
|
|
"kind": "class",
|
|
"path": "mongo_ops.repository.BaseDocument",
|
|
"signature": null,
|
|
"docstring": "Base document class with common MongoDB fields.\n\nInherit from this class to create Pydantic models that represent\nMongoDB documents. It includes automatic handling of the `_id` field\nand timestamps.\n\nAttributes:\n id: The MongoDB document ID (aliased to `_id`).\n created_at: Timestamp when the document was created.\n updated_at: Timestamp when the document was last updated.",
|
|
"members": {
|
|
"id": {
|
|
"name": "id",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.BaseDocument.id",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"created_at": {
|
|
"name": "created_at",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.BaseDocument.created_at",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"updated_at": {
|
|
"name": "updated_at",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.BaseDocument.updated_at",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"Config": {
|
|
"name": "Config",
|
|
"kind": "class",
|
|
"path": "mongo_ops.repository.BaseDocument.Config",
|
|
"signature": null,
|
|
"docstring": null,
|
|
"members": {
|
|
"populate_by_name": {
|
|
"name": "populate_by_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.BaseDocument.Config.populate_by_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"arbitrary_types_allowed": {
|
|
"name": "arbitrary_types_allowed",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.BaseDocument.Config.arbitrary_types_allowed",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"json_encoders": {
|
|
"name": "json_encoders",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.BaseDocument.Config.json_encoders",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"json_schema_extra": {
|
|
"name": "json_schema_extra",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.BaseDocument.Config.json_schema_extra",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"PopulationEngine": {
|
|
"name": "PopulationEngine",
|
|
"kind": "class",
|
|
"path": "mongo_ops.repository.PopulationEngine",
|
|
"signature": "PopulationEngine(repos: dict[str, Any], global_max_depth: int = 10)",
|
|
"docstring": "Resolves FK references across collections with cycle detection.\n\nThe engine holds a registry of repositories keyed by collection name and\nwalks documents according to PopulateRules, resolving ObjectId references\ninto model instances. A visited-path set guards against circular graphs.\n\nNotes:\n **Guarantees:**\n\n - A reference that cannot be resolved becomes None (scalar) or a\n None entry (list) rather than raising.\n - Depth is capped by both per-rule max_depth and a global\n global_max_depth.",
|
|
"members": {
|
|
"register_repo": {
|
|
"name": "register_repo",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.PopulationEngine.register_repo",
|
|
"signature": "register_repo(collection_name: str, repo: Any)",
|
|
"docstring": "Register or replace the repository for a collection.\n\nArgs:\n collection_name (str):\n Collection the repository manages.\n repo (Any):\n Repository exposing get_by_id() used to resolve references."
|
|
},
|
|
"populate": {
|
|
"name": "populate",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.PopulationEngine.populate",
|
|
"signature": "populate(document: T, rules: list[PopulateRule], depth: int = 0, _visited: set[tuple[str, str]] | None = None, _path: list[str] | None = None)",
|
|
"docstring": "Resolve FK fields on a document according to the given rules.\n\nArgs:\n document (T):\n The document to populate in place.\n rules (list[PopulateRule]):\n Rules describing which fields to resolve and how deep.\n depth (int):\n Current recursion depth. Defaults to 0.\n _visited (Optional[set[tuple[str, str]]]):\n Internal set of (class, id) pairs on the active path.\n _path (Optional[list[str]]):\n Internal path labels used for cycle reporting.\n\nReturns:\n T: The populated document.\n\nRaises:\n CircularReferenceError: If a cycle is detected on the active path."
|
|
},
|
|
"depopulate": {
|
|
"name": "depopulate",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.PopulationEngine.depopulate",
|
|
"signature": "depopulate(document: T, rules: list[PopulateRule])",
|
|
"docstring": "Collapse populated model references back to their ObjectIds.\n\nThis is the inverse of populate(): model-valued FK fields are reduced\nto stored identifiers before the document is written to MongoDB.\n\nArgs:\n document (T):\n The document to depopulate in place.\n rules (list[PopulateRule]):\n Rules describing which fields to collapse.\n\nReturns:\n T: The depopulated document.\n\nRaises:\n AttributeError: If a list entry is not a BaseDocument where\n expected."
|
|
}
|
|
}
|
|
},
|
|
"PopulateRule": {
|
|
"name": "PopulateRule",
|
|
"kind": "class",
|
|
"path": "mongo_ops.repository.PopulateRule",
|
|
"signature": "PopulateRule(field_name: str, collection_name: str, nested_rules: list[PopulateRule] | None = None, max_depth: int = 1, filter: dict[str, Any] | None = None, projection: dict[str, Any] | None = None)",
|
|
"docstring": "Describes how a foreign-key field resolves to another collection.\n\nA rule declares the field to resolve, the collection its references\npoint at, and optional nested rules applied to the referenced document\nitself. It also bounds how deep the resolution may recurse.\n\nAttributes:\n field_name (str):\n Name of the FK field on the source document.\n collection_name (str):\n Collection the reference points into.\n nested_rules (Optional[list[PopulateRule]]):\n Sub-rules applied to the referenced document. Defaults to None.\n max_depth (int):\n Maximum recursion depth for this rule. Defaults to 1.\n filter (Optional[dict[str, Any]]):\n Optional Mongo filter applied when fetching the reference.\n Defaults to None.\n projection (Optional[dict[str, Any]]):\n Optional Mongo projection applied when fetching the reference.\n Defaults to None.",
|
|
"members": {
|
|
"field_name": {
|
|
"name": "field_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.PopulateRule.field_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"collection_name": {
|
|
"name": "collection_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.PopulateRule.collection_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"nested_rules": {
|
|
"name": "nested_rules",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.PopulateRule.nested_rules",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"max_depth": {
|
|
"name": "max_depth",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.PopulateRule.max_depth",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"filter": {
|
|
"name": "filter",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.PopulateRule.filter",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"projection": {
|
|
"name": "projection",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.PopulateRule.projection",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"T": {
|
|
"name": "T",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.T",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"CRUDMixin": {
|
|
"name": "CRUDMixin",
|
|
"kind": "class",
|
|
"path": "mongo_ops.repository.CRUDMixin",
|
|
"signature": "CRUDMixin(collection: AsyncIOMotorCollection, model: type[T])",
|
|
"docstring": "Generic CRUD operations mixin for MongoDB collections.\n\nThis mixin provides standard Create, Read, Update, and Delete operations\nthat work with Pydantic models.\n\nAttributes:\n collection: The Motor collection instance.\n model: The Pydantic model class representing the document.",
|
|
"members": {
|
|
"collection": {
|
|
"name": "collection",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.CRUDMixin.collection",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"model": {
|
|
"name": "model",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.CRUDMixin.model",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"data_to_model": {
|
|
"name": "data_to_model",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.CRUDMixin.data_to_model",
|
|
"signature": "data_to_model(data: dict) -> T",
|
|
"docstring": null
|
|
},
|
|
"create": {
|
|
"name": "create",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.CRUDMixin.create",
|
|
"signature": "create(data: T) -> T",
|
|
"docstring": "Create a new document in the collection.\n\nArgs:\n data (T): The Pydantic model instance to insert.\n\nReturns:\n T: The created Pydantic model instance, including the assigned ID."
|
|
},
|
|
"get_by_id": {
|
|
"name": "get_by_id",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.CRUDMixin.get_by_id",
|
|
"signature": "get_by_id(id: str | ObjectId) -> T | None",
|
|
"docstring": "Retrieve a document by its ID.\n\nArgs:\n id (Union[str, ObjectId]): The document ID (string or ObjectId).\n\nReturns:\n Optional[T]: The Pydantic model instance if found, else None."
|
|
},
|
|
"get_many": {
|
|
"name": "get_many",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.CRUDMixin.get_many",
|
|
"signature": "get_many(filter: dict[str, Any] | None = None, skip: int = 0, limit: int = 100, sort: list[tuple] | None = None) -> list[T]",
|
|
"docstring": "Retrieve multiple documents with filtering, pagination, and sorting.\n\nArgs:\n filter (Optional[Dict[str, Any]]): MongoDB filter dictionary (e.g., {\"is_active\": True}).\n skip (int): Number of documents to skip for pagination.\n limit (int): Maximum number of documents to return (default 100).\n sort (Optional[List[tuple]]): List of sort specifications [(field, direction), ...].\n E.g., [(\"created_at\", -1)] for descending.\n\nReturns:\n List[T]: A list of Pydantic model instances.\n\nExample:\n ```python\n users = await repo.get_many(\n filter={\"role\": \"admin\"},\n limit=10,\n sort=[(\"username\", 1)]\n )\n ```"
|
|
},
|
|
"update": {
|
|
"name": "update",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.CRUDMixin.update",
|
|
"signature": "update(id: str | ObjectId, data: dict[str, Any]) -> T | None",
|
|
"docstring": "Update a document by its ID using the $set operator.\n\nArgs:\n id (Union[str, ObjectId]): The document ID (string or ObjectId).\n data (Dict[str, Any]): A dictionary of fields and values to update.\n\nReturns:\n Optional[T]: The updated Pydantic model instance if found, else None.\n\nExample:\n ```python\n updated_user = await repo.update(user_id, {\"email\": \"new@example.com\"})\n ```"
|
|
},
|
|
"patch": {
|
|
"name": "patch",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.CRUDMixin.patch",
|
|
"signature": "patch(id: str | ObjectId, data: dict[str, Any]) -> T | None",
|
|
"docstring": "Partially update a document using $set (REST PATCH semantics).\n\nUnlike update(), patch() takes a partial dict and applies only those\nfields. PopulatingRepository overrides this to prevent patching FK fields.\n\nArgs:\n id (Union[str, ObjectId]): The document ID (string or ObjectId).\n data (Dict[str, Any]): A partial dictionary of fields and values to update.\n\nReturns:\n Optional[T]: The updated Pydantic model instance if found, else None."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.CRUDMixin.delete",
|
|
"signature": "delete(id: str | ObjectId) -> bool",
|
|
"docstring": "Delete a document by its ID.\n\nArgs:\n id (Union[str, ObjectId]): The document ID (string or ObjectId).\n\nReturns:\n bool: True if a document was deleted, False otherwise."
|
|
},
|
|
"count": {
|
|
"name": "count",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.CRUDMixin.count",
|
|
"signature": "count(filter: dict[str, Any] | None = None) -> int",
|
|
"docstring": "Count documents matching a filter.\n\nArgs:\n filter (Optional[Dict[str, Any]]): MongoDB filter dictionary.\n\nReturns:\n int: The number of matching documents."
|
|
}
|
|
}
|
|
},
|
|
"BaseRepository": {
|
|
"name": "BaseRepository",
|
|
"kind": "class",
|
|
"path": "mongo_ops.repository.BaseRepository",
|
|
"signature": "BaseRepository(collection_name: str, model: type[T])",
|
|
"docstring": "Base repository class combining CRUD operations and collection management.\n\nThis class simplifies repository creation by automatically obtaining the\ndatabase connection and collection instance.\n\nAttributes:\n collection_name: The name of the collection managed by this repository.",
|
|
"members": {
|
|
"collection_name": {
|
|
"name": "collection_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.BaseRepository.collection_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"PopulatingRepository": {
|
|
"name": "PopulatingRepository",
|
|
"kind": "class",
|
|
"path": "mongo_ops.repository.PopulatingRepository",
|
|
"signature": "PopulatingRepository(collection_name: str, model: type[T], population_engine: PopulationEngine | None = None, populate_rules: list[PopulateRule] | None = None)",
|
|
"docstring": "Repository that auto-populates and depopulates FK references.\n\nOn read, ObjectId FK fields are resolved to model instances according to\nthe configured PopulateRules. On write, populated model references are\ncollapsed back to ObjectIds before hitting MongoDB.\n\nNotes:\n **Guarantees:**\n\n - Populate rules apply on both read (data_to_model) and write\n (create/update) paths.\n - Patching FK fields via patch() is rejected.\n - Class attributes `population_engine` and `_populate_rules` must\n be set (see set_population_engine/set_populate_rules) for any\n population to occur.",
|
|
"members": {
|
|
"population_engine": {
|
|
"name": "population_engine",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.repository.PopulatingRepository.population_engine",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"set_population_engine": {
|
|
"name": "set_population_engine",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.PopulatingRepository.set_population_engine",
|
|
"signature": "set_population_engine(engine: PopulationEngine) -> None",
|
|
"docstring": "Attach (or replace) the population engine.\n\nArgs:\n engine (PopulationEngine):\n Engine used to resolve references."
|
|
},
|
|
"set_populate_rules": {
|
|
"name": "set_populate_rules",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.PopulatingRepository.set_populate_rules",
|
|
"signature": "set_populate_rules(rules: list[PopulateRule]) -> None",
|
|
"docstring": "Set the FK resolution rules.\n\nArgs:\n rules (list[PopulateRule]):\n Rules describing which fields resolve and how deep."
|
|
},
|
|
"data_to_model": {
|
|
"name": "data_to_model",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.PopulatingRepository.data_to_model",
|
|
"signature": "data_to_model(data: dict) -> T",
|
|
"docstring": "Convert a raw dict to a model, resolving FK references first.\n\nArgs:\n data (dict):\n Raw document dictionary.\n\nReturns:\n T: The populated model instance.\n\nRaises:\n ValueError: If a FK field holds an embedded dict instead of an\n ObjectId."
|
|
},
|
|
"create": {
|
|
"name": "create",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.PopulatingRepository.create",
|
|
"signature": "create(data: T) -> T",
|
|
"docstring": "Depopulate, insert, and re-populate a new document.\n\nArgs:\n data (T):\n The model instance to insert (FK fields may hold models).\n\nReturns:\n T: The created model instance, including its ID."
|
|
},
|
|
"update": {
|
|
"name": "update",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.PopulatingRepository.update",
|
|
"signature": "update(id: str | ObjectId, data: T) -> T | None",
|
|
"docstring": "Depopulate and update a document by ID.\n\nArgs:\n id (Union[str, ObjectId]):\n The document ID.\n data (T):\n The model instance holding the updated fields.\n\nReturns:\n Optional[T]: The updated model instance, or None when not found."
|
|
},
|
|
"patch": {
|
|
"name": "patch",
|
|
"kind": "function",
|
|
"path": "mongo_ops.repository.PopulatingRepository.patch",
|
|
"signature": "patch(id: str | ObjectId, data: dict[str, Any]) -> T | None",
|
|
"docstring": "Partially update a document, rejecting FK field changes.\n\nArgs:\n id (Union[str, ObjectId]):\n The document ID.\n data (dict[str, Any]):\n Partial dictionary of fields to update.\n\nReturns:\n Optional[T]: The updated model instance, or None when not found.\n\nRaises:\n ValueError: If any FK field is present in the patch payload."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"transactions": {
|
|
"name": "transactions",
|
|
"kind": "module",
|
|
"path": "mongo_ops.transactions",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nTransaction management helpers for MongoDB.",
|
|
"members": {
|
|
"MongoConnectionManager": {
|
|
"name": "MongoConnectionManager",
|
|
"kind": "class",
|
|
"path": "mongo_ops.transactions.MongoConnectionManager",
|
|
"signature": null,
|
|
"docstring": "Manages MongoDB connections with async lifecycle.\n\nThis class provides a singleton-like manager for the MongoDB client and\ndatabase instances, ensuring they are properly initialized and closed\nacross the application lifecycle.",
|
|
"members": {
|
|
"connect": {
|
|
"name": "connect",
|
|
"kind": "function",
|
|
"path": "mongo_ops.transactions.MongoConnectionManager.connect",
|
|
"signature": "connect(uri: str, db_name: str, **kwargs: Any)",
|
|
"docstring": "Connect to MongoDB and initialize the shared client.\n\nArgs:\n uri (str): MongoDB connection URI (e.g., \"mongodb://localhost:27017\").\n db_name (str): Name of the database to use.\n **kwargs: Additional Motor client options (e.g., maxPoolSize).\n\nReturns:\n AsyncIOMotorDatabase: The initialized database instance."
|
|
},
|
|
"disconnect": {
|
|
"name": "disconnect",
|
|
"kind": "function",
|
|
"path": "mongo_ops.transactions.MongoConnectionManager.disconnect",
|
|
"signature": "disconnect()",
|
|
"docstring": "Close the active MongoDB connection and cleanup resources."
|
|
},
|
|
"get_database": {
|
|
"name": "get_database",
|
|
"kind": "function",
|
|
"path": "mongo_ops.transactions.MongoConnectionManager.get_database",
|
|
"signature": "get_database()",
|
|
"docstring": "Retrieve the current database instance.\n\nReturns:\n AsyncIOMotorDatabase: The active database instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
|
|
},
|
|
"get_client": {
|
|
"name": "get_client",
|
|
"kind": "function",
|
|
"path": "mongo_ops.transactions.MongoConnectionManager.get_client",
|
|
"signature": "get_client()",
|
|
"docstring": "Retrieve the current client instance.\n\nReturns:\n AsyncIOMotorClient: The active Motor client instance.\n\nRaises:\n RuntimeError: If connect() has not been called yet."
|
|
},
|
|
"lifespan": {
|
|
"name": "lifespan",
|
|
"kind": "function",
|
|
"path": "mongo_ops.transactions.MongoConnectionManager.lifespan",
|
|
"signature": "lifespan(uri: str, db_name: str, **kwargs: Any)",
|
|
"docstring": "Async context manager for managing connection lifecycle.\n\nDesigned for use with FastAPI or other frameworks supporting\nlifespan management.\n\nNotes:\n Connects to MongoDB on entry, yields the active database instance\n to the context body, and disconnects on exit.\n\nUsage:\n @asynccontextmanager\n async def lifespan(app: FastAPI):\n async with MongoConnectionManager.lifespan(uri, db_name):\n yield"
|
|
}
|
|
}
|
|
},
|
|
"TransactionManager": {
|
|
"name": "TransactionManager",
|
|
"kind": "class",
|
|
"path": "mongo_ops.transactions.TransactionManager",
|
|
"signature": null,
|
|
"docstring": "Simplified multi-document transaction handling.\n\nThis class provides helpers for executing operations within a MongoDB\ntransaction, ensuring ACID compliance for multi-document updates.",
|
|
"members": {
|
|
"start_session": {
|
|
"name": "start_session",
|
|
"kind": "function",
|
|
"path": "mongo_ops.transactions.TransactionManager.start_session",
|
|
"signature": "start_session(**kwargs: Any) -> AbstractAsyncContextManager[AsyncIOMotorClientSession]",
|
|
"docstring": "Start a transaction session as an async context manager.\n\nNotes:\n Yields the active session with a started transaction; callers\n run their operations against the session inside the with-block.\n\nUsage:\n async with TransactionManager.start_session() as session:\n await collection.insert_one(doc, session=session)\n await other_collection.update_one(filter, update, session=session)"
|
|
},
|
|
"execute_transaction": {
|
|
"name": "execute_transaction",
|
|
"kind": "function",
|
|
"path": "mongo_ops.transactions.TransactionManager.execute_transaction",
|
|
"signature": "execute_transaction(operations: list[Callable[[AsyncIOMotorClientSession], Awaitable[Any]]], **kwargs: Any) -> list[Any]",
|
|
"docstring": "Execute multiple operations within a single transaction.\n\nArgs:\n operations (List[Callable[[AsyncIOMotorClientSession], Awaitable[Any]]]): A list of async\n callables that accept a session parameter and return a result.\n **kwargs: Transaction options.\n\nReturns:\n List[Any]: A list containing the results of each operation.\n\nExample:\n results = await TransactionManager.execute_transaction([\n lambda s: repo1.create(data1, session=s),\n lambda s: repo2.update(id, data2, session=s),\n ])"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"cache": {
|
|
"name": "cache",
|
|
"kind": "module",
|
|
"path": "mongo_ops.cache",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nCache backends and configuration for mongo-ops.",
|
|
"members": {
|
|
"CacheBackend": {
|
|
"name": "CacheBackend",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.CacheBackend",
|
|
"signature": null,
|
|
"docstring": "Abstract interface for cache backends.\n\nImplementations store byte-encoded values keyed by string, track usage\nstatistics, and manage their own lifecycle. The in-memory and Redis\nbackends both implement this contract.",
|
|
"members": {
|
|
"get": {
|
|
"name": "get",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.CacheBackend.get",
|
|
"signature": "get(key: str)",
|
|
"docstring": "Fetch a value from the cache.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n Optional[bytes]: The cached bytes, or None on a miss."
|
|
},
|
|
"set": {
|
|
"name": "set",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.CacheBackend.set",
|
|
"signature": "set(key: str, value: bytes, ttl: int | None = None)",
|
|
"docstring": "Store a value in the cache.\n\nArgs:\n key (str):\n The cache key.\n value (bytes):\n The byte-encoded value to store.\n ttl (Optional[int]):\n Time-to-live in seconds. When None, the backend default\n applies."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.CacheBackend.delete",
|
|
"signature": "delete(key: str)",
|
|
"docstring": "Remove a key from the cache.\n\nArgs:\n key (str):\n The cache key."
|
|
},
|
|
"exists": {
|
|
"name": "exists",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.CacheBackend.exists",
|
|
"signature": "exists(key: str)",
|
|
"docstring": "Check whether a key is present.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n bool: True if the key exists, False otherwise."
|
|
},
|
|
"clear_pattern": {
|
|
"name": "clear_pattern",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.CacheBackend.clear_pattern",
|
|
"signature": "clear_pattern(pattern: str)",
|
|
"docstring": "Remove all keys matching a glob pattern.\n\nArgs:\n pattern (str):\n Glob-style pattern; a trailing `*` matches prefixes."
|
|
},
|
|
"get_stats": {
|
|
"name": "get_stats",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.CacheBackend.get_stats",
|
|
"signature": "get_stats()",
|
|
"docstring": "Return a snapshot of cache statistics.\n\nReturns:\n CacheStats: A copy of the current stats counters."
|
|
},
|
|
"initialize": {
|
|
"name": "initialize",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.CacheBackend.initialize",
|
|
"signature": "initialize()",
|
|
"docstring": "Start background resources owned by the backend.\n\nShould be called once during application startup, after the\nrepositories are connected."
|
|
},
|
|
"shutdown": {
|
|
"name": "shutdown",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.CacheBackend.shutdown",
|
|
"signature": "shutdown()",
|
|
"docstring": "Stop and release background resources.\n\nShould be called once during application shutdown."
|
|
}
|
|
}
|
|
},
|
|
"CacheStats": {
|
|
"name": "CacheStats",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.CacheStats",
|
|
"signature": "CacheStats(hits: int = 0, misses: int = 0, sets: int = 0, deletes: int = 0, current_size: int = 0, max_size: int = 0)",
|
|
"docstring": "Snapshot of cache usage and activity counters.\n\nAttributes:\n hits (int):\n Number of get() calls that found a value.\n misses (int):\n Number of get() calls that returned None.\n sets (int):\n Number of values written to the cache.\n deletes (int):\n Number of keys removed.\n current_size (int):\n Number of entries currently held.\n max_size (int):\n Maximum number of entries the cache allows (0 = unbounded).",
|
|
"members": {
|
|
"hits": {
|
|
"name": "hits",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheStats.hits",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"misses": {
|
|
"name": "misses",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheStats.misses",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"sets": {
|
|
"name": "sets",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheStats.sets",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"deletes": {
|
|
"name": "deletes",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheStats.deletes",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"current_size": {
|
|
"name": "current_size",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheStats.current_size",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"max_size": {
|
|
"name": "max_size",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheStats.max_size",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"CircularReferenceError": {
|
|
"name": "CircularReferenceError",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.CircularReferenceError",
|
|
"signature": "CircularReferenceError(collection: str, doc_id: ObjectId, path: list[str])",
|
|
"docstring": "Raised when population detects a cycle in the reference graph.\n\nAttributes:\n collection (str):\n Collection where the cycle was detected.\n doc_id (ObjectId):\n Document ID where the cycle was detected.\n path (list[str]):\n Ordered labels describing the visited reference path.",
|
|
"members": {
|
|
"collection": {
|
|
"name": "collection",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CircularReferenceError.collection",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"doc_id": {
|
|
"name": "doc_id",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CircularReferenceError.doc_id",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"path": {
|
|
"name": "path",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CircularReferenceError.path",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"CacheConfig": {
|
|
"name": "CacheConfig",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.CacheConfig",
|
|
"signature": "CacheConfig(enabled: bool = True, backend: Literal['memory', 'redis'] = 'memory', redis_client: Redis | None = None, default_ttl: int = 300, max_entries: int = 10000, key_prefix: str = '', cleanup_interval: int = 60)",
|
|
"docstring": "Configuration for the cached repository layer.\n\nAttributes:\n enabled (bool):\n Whether caching is active for the repository.\n backend (Literal[\"memory\", \"redis\"]):\n Which backend to use. Defaults to \"memory\".\n redis_client (Optional[Redis]):\n Redis client required when backend is \"redis\".\n default_ttl (int):\n Default time-to-live for cached entries, in seconds.\n max_entries (int):\n Maximum entries for the in-memory backend.\n key_prefix (str):\n Prefix applied to cache keys; defaults to the collection name\n when empty.\n cleanup_interval (int):\n Interval (seconds) for the in-memory expiry sweep.",
|
|
"members": {
|
|
"enabled": {
|
|
"name": "enabled",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheConfig.enabled",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"backend": {
|
|
"name": "backend",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheConfig.backend",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"redis_client": {
|
|
"name": "redis_client",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheConfig.redis_client",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"default_ttl": {
|
|
"name": "default_ttl",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheConfig.default_ttl",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"max_entries": {
|
|
"name": "max_entries",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheConfig.max_entries",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"key_prefix": {
|
|
"name": "key_prefix",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheConfig.key_prefix",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"cleanup_interval": {
|
|
"name": "cleanup_interval",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.CacheConfig.cleanup_interval",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"InMemoryCacheBackend": {
|
|
"name": "InMemoryCacheBackend",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.InMemoryCacheBackend",
|
|
"signature": "InMemoryCacheBackend(max_entries: int = 10000, default_ttl: int = 300, cleanup_interval: int = 60)",
|
|
"docstring": "Cache backend backed by an in-memory dict with TTL expiry.\n\nEntries are stored in an OrderedDict for LRU-compatible eviction and a\nmin-heap of expiry timestamps drives periodic removal of stale entries.\n\nNotes:\n **Thread safety:**\n\n All operations take an asyncio lock; the backend is safe for\n concurrent use within a single event loop.",
|
|
"members": {
|
|
"initialize": {
|
|
"name": "initialize",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.InMemoryCacheBackend.initialize",
|
|
"signature": "initialize()",
|
|
"docstring": "Start the periodic expired-entry cleanup task."
|
|
},
|
|
"shutdown": {
|
|
"name": "shutdown",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.InMemoryCacheBackend.shutdown",
|
|
"signature": "shutdown()",
|
|
"docstring": "Cancel and await the cleanup task."
|
|
},
|
|
"get": {
|
|
"name": "get",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.InMemoryCacheBackend.get",
|
|
"signature": "get(key: str)",
|
|
"docstring": "Fetch a value from the cache.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n Optional[bytes]: The cached bytes, or None on a miss."
|
|
},
|
|
"set": {
|
|
"name": "set",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.InMemoryCacheBackend.set",
|
|
"signature": "set(key: str, value: bytes, ttl: int | None = None)",
|
|
"docstring": "Store a value in the cache.\n\nArgs:\n key (str):\n The cache key.\n value (bytes):\n The byte-encoded value to store.\n ttl (Optional[int]):\n Time-to-live in seconds; defaults to the backend default."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.InMemoryCacheBackend.delete",
|
|
"signature": "delete(key: str)",
|
|
"docstring": "Remove a key from the cache.\n\nArgs:\n key (str):\n The cache key."
|
|
},
|
|
"exists": {
|
|
"name": "exists",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.InMemoryCacheBackend.exists",
|
|
"signature": "exists(key: str)",
|
|
"docstring": "Check whether a key is present.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n bool: True if the key exists, False otherwise."
|
|
},
|
|
"clear_pattern": {
|
|
"name": "clear_pattern",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.InMemoryCacheBackend.clear_pattern",
|
|
"signature": "clear_pattern(pattern: str)",
|
|
"docstring": "Remove all keys matching a glob pattern.\n\nArgs:\n pattern (str):\n Glob-style pattern; a trailing `*` matches prefixes."
|
|
},
|
|
"get_stats": {
|
|
"name": "get_stats",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.InMemoryCacheBackend.get_stats",
|
|
"signature": "get_stats()",
|
|
"docstring": "Return a snapshot of cache statistics.\n\nReturns:\n CacheStats: A copy of the current stats counters."
|
|
}
|
|
}
|
|
},
|
|
"backend": {
|
|
"name": "backend",
|
|
"kind": "module",
|
|
"path": "mongo_ops.cache.backend",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nCache backend abstraction.",
|
|
"members": {
|
|
"CacheStats": {
|
|
"name": "CacheStats",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.backend.CacheStats",
|
|
"signature": "CacheStats(hits: int = 0, misses: int = 0, sets: int = 0, deletes: int = 0, current_size: int = 0, max_size: int = 0)",
|
|
"docstring": "Snapshot of cache usage and activity counters.\n\nAttributes:\n hits (int):\n Number of get() calls that found a value.\n misses (int):\n Number of get() calls that returned None.\n sets (int):\n Number of values written to the cache.\n deletes (int):\n Number of keys removed.\n current_size (int):\n Number of entries currently held.\n max_size (int):\n Maximum number of entries the cache allows (0 = unbounded).",
|
|
"members": {
|
|
"hits": {
|
|
"name": "hits",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.backend.CacheStats.hits",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"misses": {
|
|
"name": "misses",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.backend.CacheStats.misses",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"sets": {
|
|
"name": "sets",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.backend.CacheStats.sets",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"deletes": {
|
|
"name": "deletes",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.backend.CacheStats.deletes",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"current_size": {
|
|
"name": "current_size",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.backend.CacheStats.current_size",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"max_size": {
|
|
"name": "max_size",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.backend.CacheStats.max_size",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"CircularReferenceError": {
|
|
"name": "CircularReferenceError",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.backend.CircularReferenceError",
|
|
"signature": "CircularReferenceError(collection: str, doc_id: ObjectId, path: list[str])",
|
|
"docstring": "Raised when population detects a cycle in the reference graph.\n\nAttributes:\n collection (str):\n Collection where the cycle was detected.\n doc_id (ObjectId):\n Document ID where the cycle was detected.\n path (list[str]):\n Ordered labels describing the visited reference path.",
|
|
"members": {
|
|
"collection": {
|
|
"name": "collection",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.backend.CircularReferenceError.collection",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"doc_id": {
|
|
"name": "doc_id",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.backend.CircularReferenceError.doc_id",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"path": {
|
|
"name": "path",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.backend.CircularReferenceError.path",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"CacheBackend": {
|
|
"name": "CacheBackend",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.backend.CacheBackend",
|
|
"signature": null,
|
|
"docstring": "Abstract interface for cache backends.\n\nImplementations store byte-encoded values keyed by string, track usage\nstatistics, and manage their own lifecycle. The in-memory and Redis\nbackends both implement this contract.",
|
|
"members": {
|
|
"get": {
|
|
"name": "get",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.backend.CacheBackend.get",
|
|
"signature": "get(key: str) -> bytes | None",
|
|
"docstring": "Fetch a value from the cache.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n Optional[bytes]: The cached bytes, or None on a miss."
|
|
},
|
|
"set": {
|
|
"name": "set",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.backend.CacheBackend.set",
|
|
"signature": "set(key: str, value: bytes, ttl: int | None = None) -> None",
|
|
"docstring": "Store a value in the cache.\n\nArgs:\n key (str):\n The cache key.\n value (bytes):\n The byte-encoded value to store.\n ttl (Optional[int]):\n Time-to-live in seconds. When None, the backend default\n applies."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.backend.CacheBackend.delete",
|
|
"signature": "delete(key: str) -> None",
|
|
"docstring": "Remove a key from the cache.\n\nArgs:\n key (str):\n The cache key."
|
|
},
|
|
"exists": {
|
|
"name": "exists",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.backend.CacheBackend.exists",
|
|
"signature": "exists(key: str) -> bool",
|
|
"docstring": "Check whether a key is present.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n bool: True if the key exists, False otherwise."
|
|
},
|
|
"clear_pattern": {
|
|
"name": "clear_pattern",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.backend.CacheBackend.clear_pattern",
|
|
"signature": "clear_pattern(pattern: str) -> None",
|
|
"docstring": "Remove all keys matching a glob pattern.\n\nArgs:\n pattern (str):\n Glob-style pattern; a trailing `*` matches prefixes."
|
|
},
|
|
"get_stats": {
|
|
"name": "get_stats",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.backend.CacheBackend.get_stats",
|
|
"signature": "get_stats() -> CacheStats",
|
|
"docstring": "Return a snapshot of cache statistics.\n\nReturns:\n CacheStats: A copy of the current stats counters."
|
|
},
|
|
"initialize": {
|
|
"name": "initialize",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.backend.CacheBackend.initialize",
|
|
"signature": "initialize() -> None",
|
|
"docstring": "Start background resources owned by the backend.\n\nShould be called once during application startup, after the\nrepositories are connected."
|
|
},
|
|
"shutdown": {
|
|
"name": "shutdown",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.backend.CacheBackend.shutdown",
|
|
"signature": "shutdown() -> None",
|
|
"docstring": "Stop and release background resources.\n\nShould be called once during application shutdown."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"config": {
|
|
"name": "config",
|
|
"kind": "module",
|
|
"path": "mongo_ops.cache.config",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nCache configuration.",
|
|
"members": {
|
|
"CacheConfig": {
|
|
"name": "CacheConfig",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.config.CacheConfig",
|
|
"signature": "CacheConfig(enabled: bool = True, backend: Literal['memory', 'redis'] = 'memory', redis_client: Redis | None = None, default_ttl: int = 300, max_entries: int = 10000, key_prefix: str = '', cleanup_interval: int = 60)",
|
|
"docstring": "Configuration for the cached repository layer.\n\nAttributes:\n enabled (bool):\n Whether caching is active for the repository.\n backend (Literal[\"memory\", \"redis\"]):\n Which backend to use. Defaults to \"memory\".\n redis_client (Optional[Redis]):\n Redis client required when backend is \"redis\".\n default_ttl (int):\n Default time-to-live for cached entries, in seconds.\n max_entries (int):\n Maximum entries for the in-memory backend.\n key_prefix (str):\n Prefix applied to cache keys; defaults to the collection name\n when empty.\n cleanup_interval (int):\n Interval (seconds) for the in-memory expiry sweep.",
|
|
"members": {
|
|
"enabled": {
|
|
"name": "enabled",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.config.CacheConfig.enabled",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"backend": {
|
|
"name": "backend",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.config.CacheConfig.backend",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"redis_client": {
|
|
"name": "redis_client",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.config.CacheConfig.redis_client",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"default_ttl": {
|
|
"name": "default_ttl",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.config.CacheConfig.default_ttl",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"max_entries": {
|
|
"name": "max_entries",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.config.CacheConfig.max_entries",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"key_prefix": {
|
|
"name": "key_prefix",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.config.CacheConfig.key_prefix",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"cleanup_interval": {
|
|
"name": "cleanup_interval",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.config.CacheConfig.cleanup_interval",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"in_memory": {
|
|
"name": "in_memory",
|
|
"kind": "module",
|
|
"path": "mongo_ops.cache.in_memory",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nIn-memory cache backend with TTL-based eviction and encode/decode helpers.",
|
|
"members": {
|
|
"CacheBackend": {
|
|
"name": "CacheBackend",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.in_memory.CacheBackend",
|
|
"signature": null,
|
|
"docstring": "Abstract interface for cache backends.\n\nImplementations store byte-encoded values keyed by string, track usage\nstatistics, and manage their own lifecycle. The in-memory and Redis\nbackends both implement this contract.",
|
|
"members": {
|
|
"get": {
|
|
"name": "get",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.CacheBackend.get",
|
|
"signature": "get(key: str)",
|
|
"docstring": "Fetch a value from the cache.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n Optional[bytes]: The cached bytes, or None on a miss."
|
|
},
|
|
"set": {
|
|
"name": "set",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.CacheBackend.set",
|
|
"signature": "set(key: str, value: bytes, ttl: int | None = None)",
|
|
"docstring": "Store a value in the cache.\n\nArgs:\n key (str):\n The cache key.\n value (bytes):\n The byte-encoded value to store.\n ttl (Optional[int]):\n Time-to-live in seconds. When None, the backend default\n applies."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.CacheBackend.delete",
|
|
"signature": "delete(key: str)",
|
|
"docstring": "Remove a key from the cache.\n\nArgs:\n key (str):\n The cache key."
|
|
},
|
|
"exists": {
|
|
"name": "exists",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.CacheBackend.exists",
|
|
"signature": "exists(key: str)",
|
|
"docstring": "Check whether a key is present.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n bool: True if the key exists, False otherwise."
|
|
},
|
|
"clear_pattern": {
|
|
"name": "clear_pattern",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.CacheBackend.clear_pattern",
|
|
"signature": "clear_pattern(pattern: str)",
|
|
"docstring": "Remove all keys matching a glob pattern.\n\nArgs:\n pattern (str):\n Glob-style pattern; a trailing `*` matches prefixes."
|
|
},
|
|
"get_stats": {
|
|
"name": "get_stats",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.CacheBackend.get_stats",
|
|
"signature": "get_stats()",
|
|
"docstring": "Return a snapshot of cache statistics.\n\nReturns:\n CacheStats: A copy of the current stats counters."
|
|
},
|
|
"initialize": {
|
|
"name": "initialize",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.CacheBackend.initialize",
|
|
"signature": "initialize()",
|
|
"docstring": "Start background resources owned by the backend.\n\nShould be called once during application startup, after the\nrepositories are connected."
|
|
},
|
|
"shutdown": {
|
|
"name": "shutdown",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.CacheBackend.shutdown",
|
|
"signature": "shutdown()",
|
|
"docstring": "Stop and release background resources.\n\nShould be called once during application shutdown."
|
|
}
|
|
}
|
|
},
|
|
"CacheStats": {
|
|
"name": "CacheStats",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.in_memory.CacheStats",
|
|
"signature": "CacheStats(hits: int = 0, misses: int = 0, sets: int = 0, deletes: int = 0, current_size: int = 0, max_size: int = 0)",
|
|
"docstring": "Snapshot of cache usage and activity counters.\n\nAttributes:\n hits (int):\n Number of get() calls that found a value.\n misses (int):\n Number of get() calls that returned None.\n sets (int):\n Number of values written to the cache.\n deletes (int):\n Number of keys removed.\n current_size (int):\n Number of entries currently held.\n max_size (int):\n Maximum number of entries the cache allows (0 = unbounded).",
|
|
"members": {
|
|
"hits": {
|
|
"name": "hits",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.in_memory.CacheStats.hits",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"misses": {
|
|
"name": "misses",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.in_memory.CacheStats.misses",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"sets": {
|
|
"name": "sets",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.in_memory.CacheStats.sets",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"deletes": {
|
|
"name": "deletes",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.in_memory.CacheStats.deletes",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"current_size": {
|
|
"name": "current_size",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.in_memory.CacheStats.current_size",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"max_size": {
|
|
"name": "max_size",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.in_memory.CacheStats.max_size",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"InMemoryCacheBackend": {
|
|
"name": "InMemoryCacheBackend",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend",
|
|
"signature": "InMemoryCacheBackend(max_entries: int = 10000, default_ttl: int = 300, cleanup_interval: int = 60)",
|
|
"docstring": "Cache backend backed by an in-memory dict with TTL expiry.\n\nEntries are stored in an OrderedDict for LRU-compatible eviction and a\nmin-heap of expiry timestamps drives periodic removal of stale entries.\n\nNotes:\n **Thread safety:**\n\n All operations take an asyncio lock; the backend is safe for\n concurrent use within a single event loop.",
|
|
"members": {
|
|
"initialize": {
|
|
"name": "initialize",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.initialize",
|
|
"signature": "initialize() -> None",
|
|
"docstring": "Start the periodic expired-entry cleanup task."
|
|
},
|
|
"shutdown": {
|
|
"name": "shutdown",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.shutdown",
|
|
"signature": "shutdown() -> None",
|
|
"docstring": "Cancel and await the cleanup task."
|
|
},
|
|
"get": {
|
|
"name": "get",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.get",
|
|
"signature": "get(key: str) -> bytes | None",
|
|
"docstring": "Fetch a value from the cache.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n Optional[bytes]: The cached bytes, or None on a miss."
|
|
},
|
|
"set": {
|
|
"name": "set",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.set",
|
|
"signature": "set(key: str, value: bytes, ttl: int | None = None) -> None",
|
|
"docstring": "Store a value in the cache.\n\nArgs:\n key (str):\n The cache key.\n value (bytes):\n The byte-encoded value to store.\n ttl (Optional[int]):\n Time-to-live in seconds; defaults to the backend default."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.delete",
|
|
"signature": "delete(key: str) -> None",
|
|
"docstring": "Remove a key from the cache.\n\nArgs:\n key (str):\n The cache key."
|
|
},
|
|
"exists": {
|
|
"name": "exists",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.exists",
|
|
"signature": "exists(key: str) -> bool",
|
|
"docstring": "Check whether a key is present.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n bool: True if the key exists, False otherwise."
|
|
},
|
|
"clear_pattern": {
|
|
"name": "clear_pattern",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.clear_pattern",
|
|
"signature": "clear_pattern(pattern: str) -> None",
|
|
"docstring": "Remove all keys matching a glob pattern.\n\nArgs:\n pattern (str):\n Glob-style pattern; a trailing `*` matches prefixes."
|
|
},
|
|
"get_stats": {
|
|
"name": "get_stats",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.InMemoryCacheBackend.get_stats",
|
|
"signature": "get_stats() -> CacheStats",
|
|
"docstring": "Return a snapshot of cache statistics.\n\nReturns:\n CacheStats: A copy of the current stats counters."
|
|
}
|
|
}
|
|
},
|
|
"encode_value": {
|
|
"name": "encode_value",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.encode_value",
|
|
"signature": "encode_value(value: dict) -> bytes",
|
|
"docstring": "Encode a dict into cache-ready bytes.\n\nNon-serializable values (e.g., ObjectId) are coerced with str().\n\nArgs:\n value (dict):\n The dictionary to encode.\n\nReturns:\n bytes: UTF-8 JSON bytes."
|
|
},
|
|
"decode_value": {
|
|
"name": "decode_value",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.in_memory.decode_value",
|
|
"signature": "decode_value(data: bytes) -> dict",
|
|
"docstring": "Decode cache bytes back into a dict.\n\nArgs:\n data (bytes):\n UTF-8 JSON bytes produced by encode_value().\n\nReturns:\n dict: The decoded dictionary."
|
|
}
|
|
}
|
|
},
|
|
"redis_backend": {
|
|
"name": "redis_backend",
|
|
"kind": "module",
|
|
"path": "mongo_ops.cache.redis_backend",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nRedis cache backend with key prefixing and pub/sub invalidation.",
|
|
"members": {
|
|
"CacheBackend": {
|
|
"name": "CacheBackend",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.redis_backend.CacheBackend",
|
|
"signature": null,
|
|
"docstring": "Abstract interface for cache backends.\n\nImplementations store byte-encoded values keyed by string, track usage\nstatistics, and manage their own lifecycle. The in-memory and Redis\nbackends both implement this contract.",
|
|
"members": {
|
|
"get": {
|
|
"name": "get",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.CacheBackend.get",
|
|
"signature": "get(key: str)",
|
|
"docstring": "Fetch a value from the cache.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n Optional[bytes]: The cached bytes, or None on a miss."
|
|
},
|
|
"set": {
|
|
"name": "set",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.CacheBackend.set",
|
|
"signature": "set(key: str, value: bytes, ttl: int | None = None)",
|
|
"docstring": "Store a value in the cache.\n\nArgs:\n key (str):\n The cache key.\n value (bytes):\n The byte-encoded value to store.\n ttl (Optional[int]):\n Time-to-live in seconds. When None, the backend default\n applies."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.CacheBackend.delete",
|
|
"signature": "delete(key: str)",
|
|
"docstring": "Remove a key from the cache.\n\nArgs:\n key (str):\n The cache key."
|
|
},
|
|
"exists": {
|
|
"name": "exists",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.CacheBackend.exists",
|
|
"signature": "exists(key: str)",
|
|
"docstring": "Check whether a key is present.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n bool: True if the key exists, False otherwise."
|
|
},
|
|
"clear_pattern": {
|
|
"name": "clear_pattern",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.CacheBackend.clear_pattern",
|
|
"signature": "clear_pattern(pattern: str)",
|
|
"docstring": "Remove all keys matching a glob pattern.\n\nArgs:\n pattern (str):\n Glob-style pattern; a trailing `*` matches prefixes."
|
|
},
|
|
"get_stats": {
|
|
"name": "get_stats",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.CacheBackend.get_stats",
|
|
"signature": "get_stats()",
|
|
"docstring": "Return a snapshot of cache statistics.\n\nReturns:\n CacheStats: A copy of the current stats counters."
|
|
},
|
|
"initialize": {
|
|
"name": "initialize",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.CacheBackend.initialize",
|
|
"signature": "initialize()",
|
|
"docstring": "Start background resources owned by the backend.\n\nShould be called once during application startup, after the\nrepositories are connected."
|
|
},
|
|
"shutdown": {
|
|
"name": "shutdown",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.CacheBackend.shutdown",
|
|
"signature": "shutdown()",
|
|
"docstring": "Stop and release background resources.\n\nShould be called once during application shutdown."
|
|
}
|
|
}
|
|
},
|
|
"CacheStats": {
|
|
"name": "CacheStats",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.redis_backend.CacheStats",
|
|
"signature": "CacheStats(hits: int = 0, misses: int = 0, sets: int = 0, deletes: int = 0, current_size: int = 0, max_size: int = 0)",
|
|
"docstring": "Snapshot of cache usage and activity counters.\n\nAttributes:\n hits (int):\n Number of get() calls that found a value.\n misses (int):\n Number of get() calls that returned None.\n sets (int):\n Number of values written to the cache.\n deletes (int):\n Number of keys removed.\n current_size (int):\n Number of entries currently held.\n max_size (int):\n Maximum number of entries the cache allows (0 = unbounded).",
|
|
"members": {
|
|
"hits": {
|
|
"name": "hits",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.redis_backend.CacheStats.hits",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"misses": {
|
|
"name": "misses",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.redis_backend.CacheStats.misses",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"sets": {
|
|
"name": "sets",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.redis_backend.CacheStats.sets",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"deletes": {
|
|
"name": "deletes",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.redis_backend.CacheStats.deletes",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"current_size": {
|
|
"name": "current_size",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.redis_backend.CacheStats.current_size",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"max_size": {
|
|
"name": "max_size",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.redis_backend.CacheStats.max_size",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"RedisCacheBackend": {
|
|
"name": "RedisCacheBackend",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend",
|
|
"signature": "RedisCacheBackend(redis_client: Redis, key_prefix: str = '', default_ttl: int = 300)",
|
|
"docstring": "Cache backend backed by Redis with key prefixing.\n\nValues are stored with a configurable key prefix, and deletions publish\non a shared invalidation channel so other processes can react.\n\nNotes:\n **Lifecycle:**\n\n Requires ``pip install mongo-ops[redis]`` and a live Redis\n connection supplied by the caller.",
|
|
"members": {
|
|
"initialize": {
|
|
"name": "initialize",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.initialize",
|
|
"signature": "initialize() -> None",
|
|
"docstring": "Open the pub/sub subscription used for invalidation."
|
|
},
|
|
"shutdown": {
|
|
"name": "shutdown",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.shutdown",
|
|
"signature": "shutdown() -> None",
|
|
"docstring": "Close the pub/sub subscription."
|
|
},
|
|
"get": {
|
|
"name": "get",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.get",
|
|
"signature": "get(key: str) -> bytes | None",
|
|
"docstring": "Fetch a value from the cache.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n Optional[bytes]: The cached bytes, or None on a miss."
|
|
},
|
|
"set": {
|
|
"name": "set",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.set",
|
|
"signature": "set(key: str, value: bytes, ttl: int | None = None) -> None",
|
|
"docstring": "Store a value in the cache.\n\nArgs:\n key (str):\n The cache key.\n value (bytes):\n The byte-encoded value to store.\n ttl (Optional[int]):\n Time-to-live in seconds; defaults to the backend default."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.delete",
|
|
"signature": "delete(key: str) -> None",
|
|
"docstring": "Remove a key and publish an invalidation notice.\n\nArgs:\n key (str):\n The cache key."
|
|
},
|
|
"exists": {
|
|
"name": "exists",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.exists",
|
|
"signature": "exists(key: str) -> bool",
|
|
"docstring": "Check whether a key is present.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n bool: True if the key exists, False otherwise."
|
|
},
|
|
"clear_pattern": {
|
|
"name": "clear_pattern",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.clear_pattern",
|
|
"signature": "clear_pattern(pattern: str) -> None",
|
|
"docstring": "Remove all keys matching a glob pattern via SCAN/DEL.\n\nArgs:\n pattern (str):\n Glob-style pattern; a trailing `*` matches prefixes."
|
|
},
|
|
"get_stats": {
|
|
"name": "get_stats",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.get_stats",
|
|
"signature": "get_stats() -> CacheStats",
|
|
"docstring": "Return a snapshot of cache statistics.\n\nReturns:\n CacheStats: Stats with current_size taken from Redis dbsize."
|
|
},
|
|
"publish_invalidate": {
|
|
"name": "publish_invalidate",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.RedisCacheBackend.publish_invalidate",
|
|
"signature": "publish_invalidate(key: str) -> None",
|
|
"docstring": "Publish an invalidation notice for a key.\n\nArgs:\n key (str):\n The cache key to broadcast."
|
|
}
|
|
}
|
|
},
|
|
"encode_value": {
|
|
"name": "encode_value",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.encode_value",
|
|
"signature": "encode_value(value: dict) -> bytes",
|
|
"docstring": "Encode a dict into cache-ready bytes.\n\nNon-serializable values (e.g., ObjectId) are coerced with str().\n\nArgs:\n value (dict):\n The dictionary to encode.\n\nReturns:\n bytes: UTF-8 JSON bytes."
|
|
},
|
|
"decode_value": {
|
|
"name": "decode_value",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.redis_backend.decode_value",
|
|
"signature": "decode_value(data: bytes) -> dict",
|
|
"docstring": "Decode cache bytes back into a dict.\n\nArgs:\n data (bytes):\n UTF-8 JSON bytes produced by encode_value().\n\nReturns:\n dict: The decoded dictionary."
|
|
}
|
|
}
|
|
},
|
|
"repository": {
|
|
"name": "repository",
|
|
"kind": "module",
|
|
"path": "mongo_ops.cache.repository",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nCached repository layer that combines a repository with a cache backend.",
|
|
"members": {
|
|
"BaseDocument": {
|
|
"name": "BaseDocument",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.repository.BaseDocument",
|
|
"signature": null,
|
|
"docstring": "Base document class with common MongoDB fields.\n\nInherit from this class to create Pydantic models that represent\nMongoDB documents. It includes automatic handling of the `_id` field\nand timestamps.\n\nAttributes:\n id: The MongoDB document ID (aliased to `_id`).\n created_at: Timestamp when the document was created.\n updated_at: Timestamp when the document was last updated.",
|
|
"members": {
|
|
"id": {
|
|
"name": "id",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.BaseDocument.id",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"created_at": {
|
|
"name": "created_at",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.BaseDocument.created_at",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"updated_at": {
|
|
"name": "updated_at",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.BaseDocument.updated_at",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"Config": {
|
|
"name": "Config",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.repository.BaseDocument.Config",
|
|
"signature": null,
|
|
"docstring": null,
|
|
"members": {
|
|
"populate_by_name": {
|
|
"name": "populate_by_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.BaseDocument.Config.populate_by_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"arbitrary_types_allowed": {
|
|
"name": "arbitrary_types_allowed",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.BaseDocument.Config.arbitrary_types_allowed",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"json_encoders": {
|
|
"name": "json_encoders",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.BaseDocument.Config.json_encoders",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"json_schema_extra": {
|
|
"name": "json_schema_extra",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.BaseDocument.Config.json_schema_extra",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"BaseRepository": {
|
|
"name": "BaseRepository",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.repository.BaseRepository",
|
|
"signature": "BaseRepository(collection_name: str, model: type[T])",
|
|
"docstring": "Base repository class combining CRUD operations and collection management.\n\nThis class simplifies repository creation by automatically obtaining the\ndatabase connection and collection instance.\n\nAttributes:\n collection_name: The name of the collection managed by this repository.",
|
|
"members": {
|
|
"collection_name": {
|
|
"name": "collection_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.BaseRepository.collection_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"CacheBackend": {
|
|
"name": "CacheBackend",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.repository.CacheBackend",
|
|
"signature": null,
|
|
"docstring": "Abstract interface for cache backends.\n\nImplementations store byte-encoded values keyed by string, track usage\nstatistics, and manage their own lifecycle. The in-memory and Redis\nbackends both implement this contract.",
|
|
"members": {
|
|
"get": {
|
|
"name": "get",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CacheBackend.get",
|
|
"signature": "get(key: str)",
|
|
"docstring": "Fetch a value from the cache.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n Optional[bytes]: The cached bytes, or None on a miss."
|
|
},
|
|
"set": {
|
|
"name": "set",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CacheBackend.set",
|
|
"signature": "set(key: str, value: bytes, ttl: int | None = None)",
|
|
"docstring": "Store a value in the cache.\n\nArgs:\n key (str):\n The cache key.\n value (bytes):\n The byte-encoded value to store.\n ttl (Optional[int]):\n Time-to-live in seconds. When None, the backend default\n applies."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CacheBackend.delete",
|
|
"signature": "delete(key: str)",
|
|
"docstring": "Remove a key from the cache.\n\nArgs:\n key (str):\n The cache key."
|
|
},
|
|
"exists": {
|
|
"name": "exists",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CacheBackend.exists",
|
|
"signature": "exists(key: str)",
|
|
"docstring": "Check whether a key is present.\n\nArgs:\n key (str):\n The cache key.\n\nReturns:\n bool: True if the key exists, False otherwise."
|
|
},
|
|
"clear_pattern": {
|
|
"name": "clear_pattern",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CacheBackend.clear_pattern",
|
|
"signature": "clear_pattern(pattern: str)",
|
|
"docstring": "Remove all keys matching a glob pattern.\n\nArgs:\n pattern (str):\n Glob-style pattern; a trailing `*` matches prefixes."
|
|
},
|
|
"get_stats": {
|
|
"name": "get_stats",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CacheBackend.get_stats",
|
|
"signature": "get_stats()",
|
|
"docstring": "Return a snapshot of cache statistics.\n\nReturns:\n CacheStats: A copy of the current stats counters."
|
|
},
|
|
"initialize": {
|
|
"name": "initialize",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CacheBackend.initialize",
|
|
"signature": "initialize()",
|
|
"docstring": "Start background resources owned by the backend.\n\nShould be called once during application startup, after the\nrepositories are connected."
|
|
},
|
|
"shutdown": {
|
|
"name": "shutdown",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CacheBackend.shutdown",
|
|
"signature": "shutdown()",
|
|
"docstring": "Stop and release background resources.\n\nShould be called once during application shutdown."
|
|
}
|
|
}
|
|
},
|
|
"CacheConfig": {
|
|
"name": "CacheConfig",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.repository.CacheConfig",
|
|
"signature": "CacheConfig(enabled: bool = True, backend: Literal['memory', 'redis'] = 'memory', redis_client: Redis | None = None, default_ttl: int = 300, max_entries: int = 10000, key_prefix: str = '', cleanup_interval: int = 60)",
|
|
"docstring": "Configuration for the cached repository layer.\n\nAttributes:\n enabled (bool):\n Whether caching is active for the repository.\n backend (Literal[\"memory\", \"redis\"]):\n Which backend to use. Defaults to \"memory\".\n redis_client (Optional[Redis]):\n Redis client required when backend is \"redis\".\n default_ttl (int):\n Default time-to-live for cached entries, in seconds.\n max_entries (int):\n Maximum entries for the in-memory backend.\n key_prefix (str):\n Prefix applied to cache keys; defaults to the collection name\n when empty.\n cleanup_interval (int):\n Interval (seconds) for the in-memory expiry sweep.",
|
|
"members": {
|
|
"enabled": {
|
|
"name": "enabled",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.CacheConfig.enabled",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"backend": {
|
|
"name": "backend",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.CacheConfig.backend",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"redis_client": {
|
|
"name": "redis_client",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.CacheConfig.redis_client",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"default_ttl": {
|
|
"name": "default_ttl",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.CacheConfig.default_ttl",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"max_entries": {
|
|
"name": "max_entries",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.CacheConfig.max_entries",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"key_prefix": {
|
|
"name": "key_prefix",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.CacheConfig.key_prefix",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"cleanup_interval": {
|
|
"name": "cleanup_interval",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.CacheConfig.cleanup_interval",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"decode_value": {
|
|
"name": "decode_value",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.decode_value",
|
|
"signature": "decode_value(data: bytes)",
|
|
"docstring": "Decode cache bytes back into a dict.\n\nArgs:\n data (bytes):\n UTF-8 JSON bytes produced by encode_value().\n\nReturns:\n dict: The decoded dictionary."
|
|
},
|
|
"encode_value": {
|
|
"name": "encode_value",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.encode_value",
|
|
"signature": "encode_value(value: dict)",
|
|
"docstring": "Encode a dict into cache-ready bytes.\n\nNon-serializable values (e.g., ObjectId) are coerced with str().\n\nArgs:\n value (dict):\n The dictionary to encode.\n\nReturns:\n bytes: UTF-8 JSON bytes."
|
|
},
|
|
"T": {
|
|
"name": "T",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.cache.repository.T",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"CachedBaseRepository": {
|
|
"name": "CachedBaseRepository",
|
|
"kind": "class",
|
|
"path": "mongo_ops.cache.repository.CachedBaseRepository",
|
|
"signature": "CachedBaseRepository(collection_name: str, model: type[T], cache_backend: CacheBackend, config: CacheConfig | None = None)",
|
|
"docstring": "Repository that reads and writes through a cache backend.\n\nWraps an existing BaseRepository with an ID-keyed cache. Reads consult\nthe backend first and fall through to MongoDB on a miss, populating the\ncache on success. Writes invalidate or refresh the affected key.\n\nNotes:\n **Guarantees:**\n\n - The cache holds the raw document shape (``model_dump``), so FK\n references round-trip as hex strings, not populated models.\n - When ``config.enabled`` is False the repository behaves exactly\n like its parent with no cache access.",
|
|
"members": {
|
|
"get_by_id": {
|
|
"name": "get_by_id",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CachedBaseRepository.get_by_id",
|
|
"signature": "get_by_id(id: str | ObjectId) -> T | None",
|
|
"docstring": "Fetch a document, reading through the cache when enabled.\n\nArgs:\n id (Union[str, ObjectId]):\n The document ID.\n\nReturns:\n Optional[T]: The model instance, or None when not found."
|
|
},
|
|
"create": {
|
|
"name": "create",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CachedBaseRepository.create",
|
|
"signature": "create(data: T) -> T",
|
|
"docstring": "Insert a document and cache the raw snapshot.\n\nArgs:\n data (T):\n The model instance to insert.\n\nReturns:\n T: The created model instance, including its ID."
|
|
},
|
|
"update": {
|
|
"name": "update",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CachedBaseRepository.update",
|
|
"signature": "update(id: str | ObjectId, data: dict) -> T | None",
|
|
"docstring": "Update a document and refresh its cache entry.\n\nArgs:\n id (Union[str, ObjectId]):\n The document ID.\n data (dict):\n Fields to set via $set.\n\nReturns:\n Optional[T]: The updated model instance, or None when not found."
|
|
},
|
|
"delete": {
|
|
"name": "delete",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CachedBaseRepository.delete",
|
|
"signature": "delete(id: str | ObjectId) -> bool",
|
|
"docstring": "Delete a document and remove its cache entry.\n\nArgs:\n id (Union[str, ObjectId]):\n The document ID.\n\nReturns:\n bool: True if a document was deleted, False otherwise."
|
|
},
|
|
"warm_cache": {
|
|
"name": "warm_cache",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CachedBaseRepository.warm_cache",
|
|
"signature": "warm_cache(ids: list[str | ObjectId]) -> int",
|
|
"docstring": "Pre-populate the cache for a set of document IDs.\n\nDocs already present in the cache are skipped.\n\nArgs:\n ids (list[Union[str, ObjectId]]):\n Document IDs to warm.\n\nReturns:\n int: Number of entries added to the cache."
|
|
},
|
|
"invalidate_cache": {
|
|
"name": "invalidate_cache",
|
|
"kind": "function",
|
|
"path": "mongo_ops.cache.repository.CachedBaseRepository.invalidate_cache",
|
|
"signature": "invalidate_cache(id: str | ObjectId) -> None",
|
|
"docstring": "Remove a single document's cache entry.\n\nArgs:\n id (Union[str, ObjectId]):\n The document ID to invalidate."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"populate": {
|
|
"name": "populate",
|
|
"kind": "module",
|
|
"path": "mongo_ops.populate",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nDocument populating rules and population engine.",
|
|
"members": {
|
|
"PopulationEngine": {
|
|
"name": "PopulationEngine",
|
|
"kind": "class",
|
|
"path": "mongo_ops.populate.PopulationEngine",
|
|
"signature": "PopulationEngine(repos: dict[str, Any], global_max_depth: int = 10)",
|
|
"docstring": "Resolves FK references across collections with cycle detection.\n\nThe engine holds a registry of repositories keyed by collection name and\nwalks documents according to PopulateRules, resolving ObjectId references\ninto model instances. A visited-path set guards against circular graphs.\n\nNotes:\n **Guarantees:**\n\n - A reference that cannot be resolved becomes None (scalar) or a\n None entry (list) rather than raising.\n - Depth is capped by both per-rule max_depth and a global\n global_max_depth.",
|
|
"members": {
|
|
"register_repo": {
|
|
"name": "register_repo",
|
|
"kind": "function",
|
|
"path": "mongo_ops.populate.PopulationEngine.register_repo",
|
|
"signature": "register_repo(collection_name: str, repo: Any)",
|
|
"docstring": "Register or replace the repository for a collection.\n\nArgs:\n collection_name (str):\n Collection the repository manages.\n repo (Any):\n Repository exposing get_by_id() used to resolve references."
|
|
},
|
|
"populate": {
|
|
"name": "populate",
|
|
"kind": "function",
|
|
"path": "mongo_ops.populate.PopulationEngine.populate",
|
|
"signature": "populate(document: T, rules: list[PopulateRule], depth: int = 0, _visited: set[tuple[str, str]] | None = None, _path: list[str] | None = None)",
|
|
"docstring": "Resolve FK fields on a document according to the given rules.\n\nArgs:\n document (T):\n The document to populate in place.\n rules (list[PopulateRule]):\n Rules describing which fields to resolve and how deep.\n depth (int):\n Current recursion depth. Defaults to 0.\n _visited (Optional[set[tuple[str, str]]]):\n Internal set of (class, id) pairs on the active path.\n _path (Optional[list[str]]):\n Internal path labels used for cycle reporting.\n\nReturns:\n T: The populated document.\n\nRaises:\n CircularReferenceError: If a cycle is detected on the active path."
|
|
},
|
|
"depopulate": {
|
|
"name": "depopulate",
|
|
"kind": "function",
|
|
"path": "mongo_ops.populate.PopulationEngine.depopulate",
|
|
"signature": "depopulate(document: T, rules: list[PopulateRule])",
|
|
"docstring": "Collapse populated model references back to their ObjectIds.\n\nThis is the inverse of populate(): model-valued FK fields are reduced\nto stored identifiers before the document is written to MongoDB.\n\nArgs:\n document (T):\n The document to depopulate in place.\n rules (list[PopulateRule]):\n Rules describing which fields to collapse.\n\nReturns:\n T: The depopulated document.\n\nRaises:\n AttributeError: If a list entry is not a BaseDocument where\n expected."
|
|
}
|
|
}
|
|
},
|
|
"PopulateRule": {
|
|
"name": "PopulateRule",
|
|
"kind": "class",
|
|
"path": "mongo_ops.populate.PopulateRule",
|
|
"signature": "PopulateRule(field_name: str, collection_name: str, nested_rules: list[PopulateRule] | None = None, max_depth: int = 1, filter: dict[str, Any] | None = None, projection: dict[str, Any] | None = None)",
|
|
"docstring": "Describes how a foreign-key field resolves to another collection.\n\nA rule declares the field to resolve, the collection its references\npoint at, and optional nested rules applied to the referenced document\nitself. It also bounds how deep the resolution may recurse.\n\nAttributes:\n field_name (str):\n Name of the FK field on the source document.\n collection_name (str):\n Collection the reference points into.\n nested_rules (Optional[list[PopulateRule]]):\n Sub-rules applied to the referenced document. Defaults to None.\n max_depth (int):\n Maximum recursion depth for this rule. Defaults to 1.\n filter (Optional[dict[str, Any]]):\n Optional Mongo filter applied when fetching the reference.\n Defaults to None.\n projection (Optional[dict[str, Any]]):\n Optional Mongo projection applied when fetching the reference.\n Defaults to None.",
|
|
"members": {
|
|
"field_name": {
|
|
"name": "field_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.PopulateRule.field_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"collection_name": {
|
|
"name": "collection_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.PopulateRule.collection_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"nested_rules": {
|
|
"name": "nested_rules",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.PopulateRule.nested_rules",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"max_depth": {
|
|
"name": "max_depth",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.PopulateRule.max_depth",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"filter": {
|
|
"name": "filter",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.PopulateRule.filter",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"projection": {
|
|
"name": "projection",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.PopulateRule.projection",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"engine": {
|
|
"name": "engine",
|
|
"kind": "module",
|
|
"path": "mongo_ops.populate.engine",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nRecursive document population engine with cycle detection.",
|
|
"members": {
|
|
"CircularReferenceError": {
|
|
"name": "CircularReferenceError",
|
|
"kind": "class",
|
|
"path": "mongo_ops.populate.engine.CircularReferenceError",
|
|
"signature": "CircularReferenceError(collection: str, doc_id: ObjectId, path: list[str])",
|
|
"docstring": "Raised when population detects a cycle in the reference graph.\n\nAttributes:\n collection (str):\n Collection where the cycle was detected.\n doc_id (ObjectId):\n Document ID where the cycle was detected.\n path (list[str]):\n Ordered labels describing the visited reference path.",
|
|
"members": {
|
|
"collection": {
|
|
"name": "collection",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.CircularReferenceError.collection",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"doc_id": {
|
|
"name": "doc_id",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.CircularReferenceError.doc_id",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"path": {
|
|
"name": "path",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.CircularReferenceError.path",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"BaseDocument": {
|
|
"name": "BaseDocument",
|
|
"kind": "class",
|
|
"path": "mongo_ops.populate.engine.BaseDocument",
|
|
"signature": null,
|
|
"docstring": "Base document class with common MongoDB fields.\n\nInherit from this class to create Pydantic models that represent\nMongoDB documents. It includes automatic handling of the `_id` field\nand timestamps.\n\nAttributes:\n id: The MongoDB document ID (aliased to `_id`).\n created_at: Timestamp when the document was created.\n updated_at: Timestamp when the document was last updated.",
|
|
"members": {
|
|
"id": {
|
|
"name": "id",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.BaseDocument.id",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"created_at": {
|
|
"name": "created_at",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.BaseDocument.created_at",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"updated_at": {
|
|
"name": "updated_at",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.BaseDocument.updated_at",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"Config": {
|
|
"name": "Config",
|
|
"kind": "class",
|
|
"path": "mongo_ops.populate.engine.BaseDocument.Config",
|
|
"signature": null,
|
|
"docstring": null,
|
|
"members": {
|
|
"populate_by_name": {
|
|
"name": "populate_by_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.BaseDocument.Config.populate_by_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"arbitrary_types_allowed": {
|
|
"name": "arbitrary_types_allowed",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.BaseDocument.Config.arbitrary_types_allowed",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"json_encoders": {
|
|
"name": "json_encoders",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.BaseDocument.Config.json_encoders",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"json_schema_extra": {
|
|
"name": "json_schema_extra",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.BaseDocument.Config.json_schema_extra",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"PopulateRule": {
|
|
"name": "PopulateRule",
|
|
"kind": "class",
|
|
"path": "mongo_ops.populate.engine.PopulateRule",
|
|
"signature": "PopulateRule(field_name: str, collection_name: str, nested_rules: list[PopulateRule] | None = None, max_depth: int = 1, filter: dict[str, Any] | None = None, projection: dict[str, Any] | None = None)",
|
|
"docstring": "Describes how a foreign-key field resolves to another collection.\n\nA rule declares the field to resolve, the collection its references\npoint at, and optional nested rules applied to the referenced document\nitself. It also bounds how deep the resolution may recurse.\n\nAttributes:\n field_name (str):\n Name of the FK field on the source document.\n collection_name (str):\n Collection the reference points into.\n nested_rules (Optional[list[PopulateRule]]):\n Sub-rules applied to the referenced document. Defaults to None.\n max_depth (int):\n Maximum recursion depth for this rule. Defaults to 1.\n filter (Optional[dict[str, Any]]):\n Optional Mongo filter applied when fetching the reference.\n Defaults to None.\n projection (Optional[dict[str, Any]]):\n Optional Mongo projection applied when fetching the reference.\n Defaults to None.",
|
|
"members": {
|
|
"field_name": {
|
|
"name": "field_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.PopulateRule.field_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"collection_name": {
|
|
"name": "collection_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.PopulateRule.collection_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"nested_rules": {
|
|
"name": "nested_rules",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.PopulateRule.nested_rules",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"max_depth": {
|
|
"name": "max_depth",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.PopulateRule.max_depth",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"filter": {
|
|
"name": "filter",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.PopulateRule.filter",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"projection": {
|
|
"name": "projection",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.PopulateRule.projection",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
},
|
|
"T": {
|
|
"name": "T",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.engine.T",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"PopulationEngine": {
|
|
"name": "PopulationEngine",
|
|
"kind": "class",
|
|
"path": "mongo_ops.populate.engine.PopulationEngine",
|
|
"signature": "PopulationEngine(repos: dict[str, Any], global_max_depth: int = 10)",
|
|
"docstring": "Resolves FK references across collections with cycle detection.\n\nThe engine holds a registry of repositories keyed by collection name and\nwalks documents according to PopulateRules, resolving ObjectId references\ninto model instances. A visited-path set guards against circular graphs.\n\nNotes:\n **Guarantees:**\n\n - A reference that cannot be resolved becomes None (scalar) or a\n None entry (list) rather than raising.\n - Depth is capped by both per-rule max_depth and a global\n global_max_depth.",
|
|
"members": {
|
|
"register_repo": {
|
|
"name": "register_repo",
|
|
"kind": "function",
|
|
"path": "mongo_ops.populate.engine.PopulationEngine.register_repo",
|
|
"signature": "register_repo(collection_name: str, repo: Any) -> None",
|
|
"docstring": "Register or replace the repository for a collection.\n\nArgs:\n collection_name (str):\n Collection the repository manages.\n repo (Any):\n Repository exposing get_by_id() used to resolve references."
|
|
},
|
|
"populate": {
|
|
"name": "populate",
|
|
"kind": "function",
|
|
"path": "mongo_ops.populate.engine.PopulationEngine.populate",
|
|
"signature": "populate(document: T, rules: list[PopulateRule], depth: int = 0, _visited: set[tuple[str, str]] | None = None, _path: list[str] | None = None) -> T",
|
|
"docstring": "Resolve FK fields on a document according to the given rules.\n\nArgs:\n document (T):\n The document to populate in place.\n rules (list[PopulateRule]):\n Rules describing which fields to resolve and how deep.\n depth (int):\n Current recursion depth. Defaults to 0.\n _visited (Optional[set[tuple[str, str]]]):\n Internal set of (class, id) pairs on the active path.\n _path (Optional[list[str]]):\n Internal path labels used for cycle reporting.\n\nReturns:\n T: The populated document.\n\nRaises:\n CircularReferenceError: If a cycle is detected on the active path."
|
|
},
|
|
"depopulate": {
|
|
"name": "depopulate",
|
|
"kind": "function",
|
|
"path": "mongo_ops.populate.engine.PopulationEngine.depopulate",
|
|
"signature": "depopulate(document: T, rules: list[PopulateRule]) -> T",
|
|
"docstring": "Collapse populated model references back to their ObjectIds.\n\nThis is the inverse of populate(): model-valued FK fields are reduced\nto stored identifiers before the document is written to MongoDB.\n\nArgs:\n document (T):\n The document to depopulate in place.\n rules (list[PopulateRule]):\n Rules describing which fields to collapse.\n\nReturns:\n T: The depopulated document.\n\nRaises:\n AttributeError: If a list entry is not a BaseDocument where\n expected."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"rules": {
|
|
"name": "rules",
|
|
"kind": "module",
|
|
"path": "mongo_ops.populate.rules",
|
|
"signature": null,
|
|
"docstring": "# Summary\n\nPopulate rules describing which foreign-key fields to resolve.",
|
|
"members": {
|
|
"PopulateRule": {
|
|
"name": "PopulateRule",
|
|
"kind": "class",
|
|
"path": "mongo_ops.populate.rules.PopulateRule",
|
|
"signature": "PopulateRule(field_name: str, collection_name: str, nested_rules: list[PopulateRule] | None = None, max_depth: int = 1, filter: dict[str, Any] | None = None, projection: dict[str, Any] | None = None)",
|
|
"docstring": "Describes how a foreign-key field resolves to another collection.\n\nA rule declares the field to resolve, the collection its references\npoint at, and optional nested rules applied to the referenced document\nitself. It also bounds how deep the resolution may recurse.\n\nAttributes:\n field_name (str):\n Name of the FK field on the source document.\n collection_name (str):\n Collection the reference points into.\n nested_rules (Optional[list[PopulateRule]]):\n Sub-rules applied to the referenced document. Defaults to None.\n max_depth (int):\n Maximum recursion depth for this rule. Defaults to 1.\n filter (Optional[dict[str, Any]]):\n Optional Mongo filter applied when fetching the reference.\n Defaults to None.\n projection (Optional[dict[str, Any]]):\n Optional Mongo projection applied when fetching the reference.\n Defaults to None.",
|
|
"members": {
|
|
"field_name": {
|
|
"name": "field_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.rules.PopulateRule.field_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"collection_name": {
|
|
"name": "collection_name",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.rules.PopulateRule.collection_name",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"nested_rules": {
|
|
"name": "nested_rules",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.rules.PopulateRule.nested_rules",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"max_depth": {
|
|
"name": "max_depth",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.rules.PopulateRule.max_depth",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"filter": {
|
|
"name": "filter",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.rules.PopulateRule.filter",
|
|
"signature": null,
|
|
"docstring": null
|
|
},
|
|
"projection": {
|
|
"name": "projection",
|
|
"kind": "attribute",
|
|
"path": "mongo_ops.populate.rules.PopulateRule.projection",
|
|
"signature": null,
|
|
"docstring": null
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |