Skip to main content

Simple lib that dynamically creates repositories for MongoDB

Project description

mongorepo

Simple lib for python & mongodb, provides auto repository factory based on DTO type

Example with BaseMongoRepository

from mongorepo.classes import BaseMongoRepository
from mongorepo import use_collection


def mongo_client(mongo_uri: str = 'mongodb://mongodb:27017/') -> pymongo.MongoClient:
    client: pymongo.MongoClient = pymongo.MongoClient(mongo_uri)
    return client


@dataclass
class UserDTO:
    username: str = ''
    password: str = ''


@use_collection(mongo_client().users_db.users)
class SimpleMongoRepository(BaseMongoRepository[UserDTO]):
    ...


repo = SimpleMongoRepository()

new_user = UserDTO(username='admin', password='1234')
repo.add(new_user)

user = repo.get(username='admin')
print(user)  # UserDTO(username='admin', password='1234')

Example with mongorepo.async_repository

import mongorepo


def async_mongo_client(mongo_uri: str = 'mongodb://mongodb:27017/') -> AsyncIOMotorClient:
    async_client = AsyncIOMotorClient(mongo_uri)
    return async_client


@dataclass
class Person:
    id: str
    name: str
    skills: list[str] = field(default_factory=list)    


@mongorepo.async_repository(array_fields=['skills'])
class MongoRepository:
    class Meta:
        dto = Person
        collection = async_mongo_client().people_db.people


repo = MongoRepository()


admin = Person(id='289083', name='admin', skills=['python', 'c++', 'java', 'rust'])

await repo.add(admin)
await repo.skills__append('c', id='289083')
await repo.skills__remove('python', id='289083')

user = await repo.get(id='289083')
print(user.skills)  # ['c++', 'java', 'rust', 'c']

Example with implement decorator

from mongorepo.implement import implement
from mongorepo.implement.methods import GetMethod, AddMethod
from mongorepo import use_collection


def async_mongo_client(mongo_uri: str = 'mongodb://mongodb:27017/') -> AsyncIOMotorClient:
    async_client = AsyncIOMotorClient(mongo_uri)
    return async_client


@dataclass
class Author:
    name: str


@dataclass
class Message:
    id: str
    body: str
    author: Author


class MessageRepository(typing.Protocol):
    async def add_message(self, message: Message):
        ...

    async def get_message(self, id: str) -> Message | None:
        ...


@implement(
    GetMethod(MessageRepository.get_message, filters=['id']),
    AddMethod(MessageRepository.add_message, dto='message')
)
@use_collection(async_mongo_client().messages_db.messages)
class MongoMessageRepository:
    class Meta:
        dto = Message


repo: MessageRepository = MongoMessageRepository()


await repo.add_message(
    message=Message(id='1', body='hello', author=Author(name='friend'))
)

message = await repo.get_message(id='1')
print(message)  # Message(id='1', body='hello', author=Author(name='friend'))

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

mongorepo-3.0.1.tar.gz (24.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mongorepo-3.0.1-py3-none-any.whl (32.3 kB view details)

Uploaded Python 3

File details

Details for the file mongorepo-3.0.1.tar.gz.

File metadata

  • Download URL: mongorepo-3.0.1.tar.gz
  • Upload date:
  • Size: 24.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/6.11.0-19-generic

File hashes

Hashes for mongorepo-3.0.1.tar.gz
Algorithm Hash digest
SHA256 441ec91d0f98cc7a7b682ef140bc110c2044745d3f1411c280485077fa786b75
MD5 ece2669eb16d19d763e2537a7b57e740
BLAKE2b-256 a1e202e41e85f44e18251bd86b06abc8329e8a2044bdec0d901a32f13dd79bbc

See more details on using hashes here.

File details

Details for the file mongorepo-3.0.1-py3-none-any.whl.

File metadata

  • Download URL: mongorepo-3.0.1-py3-none-any.whl
  • Upload date:
  • Size: 32.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/6.11.0-19-generic

File hashes

Hashes for mongorepo-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 de0baec88c34fe3b7817750834f3e88607a333568d7f637aadc75a57ea41095a
MD5 956540226a081043e527c4ad737d0d5f
BLAKE2b-256 afbd4f2aec9b750f6d80be3e8032e11ebbaa5e1e4f3e37e836ddb73cfbca88c0

See more details on using hashes here.

Supported by

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