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
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
mongorepo-3.1.2.tar.gz
(24.5 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
mongorepo-3.1.2-py3-none-any.whl
(33.5 kB
view details)
File details
Details for the file mongorepo-3.1.2.tar.gz.
File metadata
- Download URL: mongorepo-3.1.2.tar.gz
- Upload date:
- Size: 24.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.3 Linux/6.11.0-29-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7436c67aae4412c17dc1e29e48aa4bedcbb856cf4f60b6436e19fd9595ae8b30
|
|
| MD5 |
4ca021034e668bf79f1dd36e03358675
|
|
| BLAKE2b-256 |
716fd23a1129b30e8c33cfe545a0f6f847ff3a81a5adf9c61f6227be6d320ff2
|
File details
Details for the file mongorepo-3.1.2-py3-none-any.whl.
File metadata
- Download URL: mongorepo-3.1.2-py3-none-any.whl
- Upload date:
- Size: 33.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.3 Linux/6.11.0-29-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3d594af5b701a08f361f0f029fbe3e989b8cbaf91f24cae60950b33e2becce5a
|
|
| MD5 |
20c2f47196ae989d7978729709dd6c5a
|
|
| BLAKE2b-256 |
010422b624435b2a5d7b4a2d7915086f53e6083df4093472a6d4fe3d8b767104
|