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

51 lines
1.3 KiB
Python

from typing import TYPE_CHECKING, Optional, Set
from beanie.odm.utils.encoder import Encoder
if TYPE_CHECKING:
from beanie.odm.documents import Document
def get_dict(
document: "Document",
to_db: bool = False,
exclude: Optional[Set[str]] = None,
keep_nulls: bool = True,
):
if exclude is None:
exclude = set()
if document.id is None:
exclude.add("_id")
if not document.get_settings().use_revision:
exclude.add("revision_id")
encoder = Encoder(exclude=exclude, to_db=to_db, keep_nulls=keep_nulls)
return encoder.encode(document)
def get_nulls(
document: "Document",
exclude: Optional[Set[str]] = None,
):
dictionary = get_dict(document, exclude=exclude, keep_nulls=True)
return filter_none(dictionary)
def get_top_level_nones(
document: "Document",
exclude: Optional[Set[str]] = None,
):
dictionary = get_dict(document, exclude=exclude, keep_nulls=True)
return {k: v for k, v in dictionary.items() if v is None}
def filter_none(d):
result = {}
for k, v in d.items():
if isinstance(v, dict):
filtered = filter_none(v)
if filtered:
result[k] = filtered
elif v is None:
result[k] = v
return result