119 lines
3.1 KiB
Python
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
|
|
)
|