No project description provided
Project description
MongoDB async ddd-misc UnitOfWork
MongoDB UnitOfWork на базе ddd-misc и библиотеки Motor: Asynchronous Python driver for MongoDB.
Классы
AbstractMongoRepository
AbstractMongoRepository - абстрактный класс для реализации репозитория с подключением к базе данных MongoDB. Класс реализует сигнатуру для инициализации с двумя параметрами помимо self и метод 'get_mongo_collection':
- 'connection' - параметр принимающий контекст инстанса класса AsyncIOMotorClientSession библиотеки Motor.
- 'collections' - параметр принимающий структуру dict ключами которой являются название mongo коллекции в виде строки, а значениями объект класса AsyncIOMotorCollection библиотеки Motor.
'_get_mongo_collection' - метод класса AbstractMongoRepository, возвращающий mongo коллекцию по передаваемому названию в параметре в виде строки.
Данный класс обязателен для наследования при реализации конкретного MongoDB репозитория в рамках UnitOfWork данного пакета.
Пример использования:
from dddmisc_mongo_uow import AbstractMongoRepository
class ConcreteMongoRepository(AbstractMongoRepository):
aggregate_class = ConcreteAggregateClass
async def _add_to_storage(self, aggregate):
document = dict(
key=aggregate._key,
reference=str(aggregate.reference)
)
collection = self._get_mongo_collection('uow')
await collection.update_one({'reference': document['reference']}, {'$set' : document}, upsert=True, session=self._connection)
MongoEngine
MongoEngine - класс для создания структуры engine MongoDB версии, engine передается в параметры при инициализации AsyncMessageBus. При инициализации MongoEngine требует трех обязательных параметров:
- 'address' - параметр принимающий строку для подключения к конкретной базе данных MongoDB, включающей в себя хост базы, а так же дополнительные параметры подключения. Пример - 'mongodb://localhost:27017/?directConnection=true'. При инициализации по параметру создается объект AsyncIOMotorClient.
- 'db_name' - параметр принимающий строку с названием базы данных. При инициализации создается объект AsyncIOMotorDatabase.
- 'collections' - парамтер принимающий массив с названиями коллекции MongoDB в виде строк. При инициализации создается структура неизменяемого dict, ключами которой являются названия коллекции, а значениями объекты AsyncIOMotorCollection с подключением к данным коллекциям.
'get_collections' - метод возвращающий коллекции.
'get_session' - асинхронный метод возврщающий объект AsyncIOMotorClientSession для проведения транзакции.
Пример использования:
from dddmisc_mongo_uow import MongoEngine
mongo_engine = MongoEngine(address='mongodb://localhost:27017/?directConnection=true', db_name='mongo_uow', collections=['uow'])
collections = mongo_engine.get_collections()
session = await mongo_engine.get_session()
MongoMotorUOW
MongoMotorUOW - класс на базе AbstractAsyncUnitOfWork, реализующий конкретный объект UnitOfWork и его стандартное поведение в рамках ddd-misc для выполнения транзакции в MongoDB.
Класс реализует стандартную сигнатуру для создания объекта UnitOfWork в процессе выполнения хэндлера в объекте AsyncMessageBus, требующую двух параметров engine и repository_class. В процессе инициализации проверяется является ли repository_class субклассом AbstractMongoRepository, далее repository_class оборачивается классом декоратором вместе с параметром collections, чтобы UnitOfWork мог передавать один параметр connection при инициализации репозитория.
Пример использования:
from dddmisc import AsyncMessageBus
from dddmisc_mongo_uow import MongoMotorUOW
message_bus = AsyncMessageBus(
uow_class=MongoMotorUOW,
repository_class=ConcreteMongoRepository,
engine=mongo_engine
)
Основные параметры для запуска MongoDB в .gitlab-ci.yml:
services:
- name: mongo:6.0
alias: mongo-svc
command: ["mongod", "--logpath=/dev/null", "--bind_ip_all", "--replSet=rs0"]
before_script:
- python -V
- python -m venv .venv
- poetry install
- apt-get update && apt-get install -y gnupg
- apt-get update && apt-get install -y wget && rm -rf /var/lib/apt/lists/*
- wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | apt-key add -
- echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/6.0 main" | tee /etc/apt/sources.list.d/mongodb-org-6.0.list
- apt-get update
- apt-get install -y mongodb-org
- mongosh --host mongo-svc --eval "rs.initiate({'_id':'rs0','members':[{'_id':0,'host':'127.0.0.1:27017'}]});"
script:
- mongosh --host mongo-svc --eval "rs.status()"
- poetry run poe test
При установке отличающейся версии MongoDB параметры установки нужно изменить на акутальную версию.
Комманда rs.initiate({'_id':'rs0','members':[{'_id':0,'host':'mongo-svc'}]});
инициирует реплику.
На странице https://www.mongodb.com/docs/manual/reference/connection-string/ описан формат строки подключения и разные его варианты.
Стандартный формат подключения:
- 'mongodb://localhost:27017/'
Рабочий формат подключения на локальном компьютере при инициации 'rs.initiate()':
- 'mongodb://localhost:27017/?directConnection=true'
При инициации 'rs.initiate({'_id':'rs0','members':[{'_id':0,'host':'mongo-svc'}]})' создается конкретная реплика, их может быть несколько, например:
rs.initiate(
{
_id: "rs0",
version: 1,
members: [
{ _id: 0, host : "mongodb0.example.net:27017" },
{ _id: 1, host : "mongodb1.example.net:27017" },
{ _id: 2, host : "mongodb2.example.net:27017" }
]
}
)
'rs0' - имя набора реплик, задается при поднятии базы, строка подключения на локалке:
- 'mongodb://localhost:27017/?directConnection=true&replicaSet=rs0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file dddmisc_mongo_uow-1.0.1.tar.gz
.
File metadata
- Download URL: dddmisc_mongo_uow-1.0.1.tar.gz
- Upload date:
- Size: 5.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.2 CPython/3.10.10 Linux/3.10.0-1160.90.1.el7.x86_64
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 02af6ac9b46675bb3c852d09a69efcf573bb91720c88572915dca83aa444a014 |
|
MD5 | 6377b54951b38803b2e7a40f2784c5fc |
|
BLAKE2b-256 | e4da56e6b67269b068c39273bcd9dde4bfddde89ce28a3180f7ff80b59f16454 |
File details
Details for the file dddmisc_mongo_uow-1.0.1-py3-none-any.whl
.
File metadata
- Download URL: dddmisc_mongo_uow-1.0.1-py3-none-any.whl
- Upload date:
- Size: 5.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.3.2 CPython/3.10.10 Linux/3.10.0-1160.90.1.el7.x86_64
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ddfd374ac161c6b69201163ee750f08c64f7585b63858377a5e82879d79ef77b |
|
MD5 | 1f4ea0a6e22f27327dd58219ea568d43 |
|
BLAKE2b-256 | 272bc1b0c10d331fd3dca82eb2c97bc19ea4c15a7ce8cb469bdd47481845c885 |