freeleaps-ops/venv/lib/python3.12/site-packages/beanie/odm/union_doc.py

82 lines
2.9 KiB
Python

from typing import Any, ClassVar, Dict, Optional, Type, TypeVar
from pymongo.asynchronous.client_session import AsyncClientSession
from beanie.exceptions import UnionDocNotInited
from beanie.odm.bulk import BulkWriter
from beanie.odm.interfaces.aggregate import AggregateInterface
from beanie.odm.interfaces.detector import DetectionInterface, ModelType
from beanie.odm.interfaces.find import FindInterface
from beanie.odm.interfaces.getters import OtherGettersInterface
from beanie.odm.settings.union_doc import UnionDocSettings
UnionDocType = TypeVar("UnionDocType", bound="UnionDoc")
class UnionDoc(
FindInterface,
AggregateInterface,
OtherGettersInterface,
DetectionInterface,
):
_document_models: ClassVar[Optional[Dict[str, Type]]] = None
_is_inited: ClassVar[bool] = False
_settings: ClassVar[UnionDocSettings]
@classmethod
def get_settings(cls) -> UnionDocSettings:
return cls._settings
@classmethod
def register_doc(cls, name: str, doc_model: Type):
if cls._document_models is None:
cls._document_models = {}
if cls._is_inited is False:
raise UnionDocNotInited
cls._document_models[name] = doc_model
return cls.get_settings().name
@classmethod
def get_model_type(cls) -> ModelType:
return ModelType.UnionDoc
@classmethod
def bulk_writer(
cls,
session: Optional[AsyncClientSession] = None,
ordered: bool = True,
bypass_document_validation: bool = False,
comment: Optional[Any] = None,
) -> BulkWriter:
"""
Returns a BulkWriter instance for handling bulk write operations.
:param session: Optional[AsyncClientSession] - pymongo session.
The session instance used for transactional operations.
:param ordered: bool
If ``True`` (the default), requests will be performed on the server serially, in the order provided. If an error
occurs, all remaining operations are aborted. If ``False``, requests will be performed on the server in
arbitrary order, possibly in parallel, and all operations will be attempted.
:param bypass_document_validation: bool, optional
If ``True``, allows the write to opt-out of document-level validation. Default is ``False``.
:param comment: str, optional
A user-provided comment to attach to the BulkWriter.
:returns: BulkWriter
An instance of BulkWriter configured with the provided settings.
Example Usage:
--------------
This method is typically used within an asynchronous context manager.
.. code-block:: python
async with Document.bulk_writer(ordered=True) as bulk:
await Document.insert_one(Document(field="value"), bulk_writer=bulk)
"""
return BulkWriter(
session, ordered, cls, bypass_document_validation, comment
)