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

119 lines
3.1 KiB
Python

from abc import abstractmethod
from datetime import datetime
from typing import Any, Dict, Mapping, Optional, Union
from pymongo.asynchronous.client_session import AsyncClientSession
from beanie.odm.bulk import BulkWriter
from beanie.odm.fields import ExpressionField
from beanie.odm.operators.update.general import (
CurrentDate,
Inc,
Set,
)
class UpdateMethods:
"""
Update methods
"""
@abstractmethod
def update(
self,
*args: Mapping[str, Any],
session: Optional[AsyncClientSession] = None,
bulk_writer: Optional[BulkWriter] = None,
**kwargs: Any,
):
return self
def set(
self,
expression: Dict[Union[ExpressionField, str, Any], Any],
session: Optional[AsyncClientSession] = None,
bulk_writer: Optional[BulkWriter] = None,
**kwargs: Any,
):
"""
Set values
Example:
```python
class Sample(Document):
one: int
await Document.find(Sample.one == 1).set({Sample.one: 100})
```
Uses [Set operator](operators/update.md#set)
:param expression: Dict[Union[ExpressionField, str, Any], Any] - keys and
values to set
:param session: Optional[AsyncClientSession] - pymongo session
:param bulk_writer: Optional[BulkWriter] - bulk writer
:return: self
"""
return self.update(
Set(expression), session=session, bulk_writer=bulk_writer, **kwargs
)
def current_date(
self,
expression: Dict[Union[datetime, ExpressionField, str], Any],
session: Optional[AsyncClientSession] = None,
bulk_writer: Optional[BulkWriter] = None,
**kwargs: Any,
):
"""
Set current date
Uses [CurrentDate operator](operators/update.md#currentdate)
:param expression: Dict[Union[datetime, ExpressionField, str], Any]
:param session: Optional[AsyncClientSession] - pymongo session
:param bulk_writer: Optional[BulkWriter] - bulk writer
:return: self
"""
return self.update(
CurrentDate(expression),
session=session,
bulk_writer=bulk_writer,
**kwargs,
)
def inc(
self,
expression: Dict[Union[ExpressionField, float, int, str], Any],
session: Optional[AsyncClientSession] = None,
bulk_writer: Optional[BulkWriter] = None,
**kwargs: Any,
):
"""
Increment
Example:
```python
class Sample(Document):
one: int
await Document.find(Sample.one == 1).inc({Sample.one: 100})
```
Uses [Inc operator](operators/update.md#inc)
:param expression: Dict[Union[ExpressionField, float, int, str], Any]
:param session: Optional[AsyncClientSession] - pymongo session
:param bulk_writer: Optional[BulkWriter] - bulk writer
:return: self
"""
return self.update(
Inc(expression), session=session, bulk_writer=bulk_writer, **kwargs
)