A Python package for effortless object-document mapping using pymongo and pydantic to interface with MongoDB.
Project description
mymongo
A Python package for effortless object-document mapping using pymongo and pydantic to interface with MongoDB.
Using
To add and install this package as a dependency of your project, run poetry add mymongo
.
Example
from typing import Any
from mymongo import Document, Store
from pydantic import BaseModel, EmailStr
from pymongo import MongoClient
from querytyper import MongoFilterMeta, MongoQuery
class User(BaseModel):
"""User model."""
name: str
age: int
email: EmailStr
class UserInDb(User, Document):
"""User database model."""
class UserFilter(UserInDb, metaclass=MongoFilterMeta):
"""User query filter."""
client: MongoClient[dict[str, Any]] = MongoClient()
collection = client.get_database(name="db_name").get_collection(name="collection_name")
store = Store[User, UserInDb](collection)
first_id = store.create(User(name="John", age=11, email="john@example.com")).id
second_id = store.create(User(name="John", age=13, email="j@example.com")).id
store.create(User(name="Al", age=12, email="al@example.com"))
query = MongoQuery((UserFilter.name == "John") & (UserFilter.age >= 10))
store.delete(first_id)
found = store.find(query)
found[0]
UserInDb(
id=ObjectId('65bfa898110076608a191c36'),
created_at=datetime.datetime(2024, 2, 4, 15, 9, 12, 47000),
updated_at=datetime.datetime(2024, 2, 4, 15, 9, 12, 47000),
deleted_at=None,
name='John',
age=13,
email='j@example.com'
)
Contributing
Prerequisites
1. Set up Git to use SSH
- Generate an SSH key and add the SSH key to your GitHub account.
- Configure SSH to automatically load your SSH keys:
cat << EOF >> ~/.ssh/config Host * AddKeysToAgent yes IgnoreUnknown UseKeychain UseKeychain yes EOF
2. Install Docker
- Install Docker Desktop.
- Enable Use Docker Compose V2 in Docker Desktop's preferences window.
- Linux only:
- Configure Docker to use the BuildKit build system. On macOS and Windows, BuildKit is enabled by default in Docker Desktop.
- Export your user's user id and group id so that files created in the Dev Container are owned by your user:
cat << EOF >> ~/.bashrc export UID=$(id --user) export GID=$(id --group) EOF
3. Install VS Code or PyCharm
- Install VS Code and VS Code's Dev Containers extension. Alternatively, install PyCharm.
- Optional: install a Nerd Font such as FiraCode Nerd Font and configure VS Code or configure PyCharm to use it.
Development environments
The following development environments are supported:
- ⭐️ GitHub Codespaces: click on Code and select Create codespace to start a Dev Container with GitHub Codespaces.
- ⭐️ Dev Container (with container volume): click on Open in Dev Containers to clone this repository in a container volume and create a Dev Container with VS Code.
- Dev Container: clone this repository, open it with VS Code, and run Ctrl/⌘ + ⇧ + P → Dev Containers: Reopen in Container.
- PyCharm: clone this repository, open it with PyCharm, and configure Docker Compose as a remote interpreter with the
dev
service. - Terminal: clone this repository, open it with your terminal, and run
docker compose up --detach dev
to start a Dev Container in the background, and then rundocker compose exec dev zsh
to open a shell prompt in the Dev Container.
Developing
- This project follows the Conventional Commits standard to automate Semantic Versioning and Keep A Changelog with Commitizen.
- Run
poe
from within the development environment to print a list of Poe the Poet tasks available to run on this project. - Run
poetry add {package}
from within the development environment to install a run time dependency and add it topyproject.toml
andpoetry.lock
. Add--group test
or--group dev
to install a CI or development dependency, respectively. - Run
poetry update
from within the development environment to upgrade all dependencies to the latest versions allowed bypyproject.toml
. - Run
cz bump
to bump the package's version, update theCHANGELOG.md
, and create a git tag.
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
mymongo-0.1.1.tar.gz
(9.5 kB
view details)
Built Distribution
File details
Details for the file mymongo-0.1.1.tar.gz
.
File metadata
- Download URL: mymongo-0.1.1.tar.gz
- Upload date:
- Size: 9.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.10.13 Linux/6.2.0-1019-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4f45579b38fd58e06e372e5f45ae59d64b5a8ffe175bb5c6859b4ef749b22ef5 |
|
MD5 | 9dd53ef44e411182655424330e8ffb7f |
|
BLAKE2b-256 | 1c1e8af9894871ccf6879dde324e3d000afe1afc32089411bffb6e10395fdf62 |
File details
Details for the file mymongo-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: mymongo-0.1.1-py3-none-any.whl
- Upload date:
- Size: 9.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.7.1 CPython/3.10.13 Linux/6.2.0-1019-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2d69804e530d9bd53ed783095561674643553eccf69eec3c8b50bee2ae7deb9b |
|
MD5 | 8df8bf404e48559fb08e3bc44b8feebc |
|
BLAKE2b-256 | 8f02734c4dd085c53ee79a702a2a935f55c079f1d327994804eb117327746933 |