Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dddmisc_mongo_uow-1.0.1.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

dddmisc_mongo_uow-1.0.1-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

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

Hashes for dddmisc_mongo_uow-1.0.1.tar.gz
Algorithm Hash digest
SHA256 02af6ac9b46675bb3c852d09a69efcf573bb91720c88572915dca83aa444a014
MD5 6377b54951b38803b2e7a40f2784c5fc
BLAKE2b-256 e4da56e6b67269b068c39273bcd9dde4bfddde89ce28a3180f7ff80b59f16454

See more details on using hashes here.

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

Hashes for dddmisc_mongo_uow-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ddfd374ac161c6b69201163ee750f08c64f7585b63858377a5e82879d79ef77b
MD5 1f4ea0a6e22f27327dd58219ea568d43
BLAKE2b-256 272bc1b0c10d331fd3dca82eb2c97bc19ea4c15a7ce8cb469bdd47481845c885

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page