1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
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
)
|