204 lines
8.3 KiB
Plaintext
204 lines
8.3 KiB
Plaintext
|
|
Metadata-Version: 2.4
|
|||
|
|
Name: beanie
|
|||
|
|
Version: 2.0.0
|
|||
|
|
Summary: Asynchronous Python ODM for MongoDB
|
|||
|
|
Keywords: mongodb,odm,orm,pydantic,mongo,async,python
|
|||
|
|
Author-email: Roman Right <roman-right@protonmail.com>
|
|||
|
|
Requires-Python: >=3.9,<4.0
|
|||
|
|
Description-Content-Type: text/markdown
|
|||
|
|
Classifier: License :: OSI Approved :: Apache Software License
|
|||
|
|
Classifier: Development Status :: 5 - Production/Stable
|
|||
|
|
Classifier: Intended Audience :: Developers
|
|||
|
|
Classifier: Operating System :: OS Independent
|
|||
|
|
Classifier: Topic :: Database
|
|||
|
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|||
|
|
Classifier: Typing :: Typed
|
|||
|
|
License-File: LICENSE
|
|||
|
|
Requires-Dist: pydantic>=1.10.18,<3.0
|
|||
|
|
Requires-Dist: click>=7
|
|||
|
|
Requires-Dist: lazy-model==0.3.0
|
|||
|
|
Requires-Dist: pymongo>=4.11.0,<5.0.0
|
|||
|
|
Requires-Dist: typing-extensions>=4.7
|
|||
|
|
Requires-Dist: pymongo[aws]>=4.11.0,<5.0.0 ; extra == "aws"
|
|||
|
|
Requires-Dist: tomli>=2.2.1,<3.0.0 ; extra == "ci" and ( python_version < '3.11')
|
|||
|
|
Requires-Dist: tomli-w>=1.0.0,<2.0.0 ; extra == "ci"
|
|||
|
|
Requires-Dist: requests ; extra == "ci"
|
|||
|
|
Requires-Dist: types-requests ; extra == "ci"
|
|||
|
|
Requires-Dist: Pygments>=2.8.0 ; extra == "doc"
|
|||
|
|
Requires-Dist: Markdown>=3.3 ; extra == "doc"
|
|||
|
|
Requires-Dist: pydoc-markdown>=4.8 ; extra == "doc"
|
|||
|
|
Requires-Dist: mkdocs>=1.4 ; extra == "doc"
|
|||
|
|
Requires-Dist: mkdocs-material>=9.0 ; extra == "doc"
|
|||
|
|
Requires-Dist: jinja2>=3.0.3 ; extra == "doc"
|
|||
|
|
Requires-Dist: pymongo[encryption]>=4.11.0,<5.0.0 ; extra == "encryption"
|
|||
|
|
Requires-Dist: pymongo[gssapi]>=4.11.0,<5.0.0 ; extra == "gssapi"
|
|||
|
|
Requires-Dist: pymongo[ocsp]>=4.11.0,<5.0.0 ; extra == "ocsp"
|
|||
|
|
Requires-Dist: beanie-batteries-queue>=0.2 ; extra == "queue"
|
|||
|
|
Requires-Dist: pymongo[snappy]>=4.11.0,<5.0.0 ; extra == "snappy"
|
|||
|
|
Requires-Dist: pre-commit>=3.5.0 ; extra == "test"
|
|||
|
|
Requires-Dist: pytest>=8.3.3 ; extra == "test"
|
|||
|
|
Requires-Dist: pytest-asyncio>=0.24.0 ; extra == "test"
|
|||
|
|
Requires-Dist: pytest-cov>=5.0.0 ; extra == "test"
|
|||
|
|
Requires-Dist: dnspython>=2.1.0 ; extra == "test"
|
|||
|
|
Requires-Dist: pyright>=0 ; extra == "test"
|
|||
|
|
Requires-Dist: asgi-lifespan>=1.0.1 ; extra == "test"
|
|||
|
|
Requires-Dist: httpx>=0.23.0 ; extra == "test"
|
|||
|
|
Requires-Dist: fastapi>=0.100 ; extra == "test"
|
|||
|
|
Requires-Dist: pydantic-settings>=2 ; extra == "test"
|
|||
|
|
Requires-Dist: pydantic-extra-types>=2 ; extra == "test"
|
|||
|
|
Requires-Dist: pydantic[email] ; extra == "test"
|
|||
|
|
Requires-Dist: pymongo[zstd]>=4.11.0,<5.0.0 ; extra == "zstd"
|
|||
|
|
Project-URL: homepage, https://beanie-odm.dev
|
|||
|
|
Project-URL: repository, https://github.com/roman-right/beanie
|
|||
|
|
Provides-Extra: aws
|
|||
|
|
Provides-Extra: ci
|
|||
|
|
Provides-Extra: doc
|
|||
|
|
Provides-Extra: encryption
|
|||
|
|
Provides-Extra: gssapi
|
|||
|
|
Provides-Extra: ocsp
|
|||
|
|
Provides-Extra: queue
|
|||
|
|
Provides-Extra: snappy
|
|||
|
|
Provides-Extra: test
|
|||
|
|
Provides-Extra: zstd
|
|||
|
|
|
|||
|
|
[](https://github.com/roman-right/beanie)
|
|||
|
|
|
|||
|
|
[](https://beanie-odm.dev)
|
|||
|
|
[](https://pypi.python.org/pypi/beanie)
|
|||
|
|
[](https://results.pre-commit.ci/latest/github/BeanieODM/beanie/main)
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
## 📢 Important Update 📢
|
|||
|
|
|
|||
|
|
We are excited to announce that Beanie is transitioning from solo development to a team-based approach! This move will help us enhance the project with new features and more collaborative development.
|
|||
|
|
|
|||
|
|
At this moment we are establishing a board of members that will decide all the future steps of the project. We are looking for contributors and maintainers to join the board.
|
|||
|
|
|
|||
|
|
### Join Us
|
|||
|
|
If you are interested in contributing or want to stay updated, please join our Discord channel. We're looking forward to your ideas and contributions!
|
|||
|
|
|
|||
|
|
[Join our Discord](https://discord.gg/AwwTrbCASP)
|
|||
|
|
|
|||
|
|
Let’s make Beanie better, together!
|
|||
|
|
|
|||
|
|
## Overview
|
|||
|
|
|
|||
|
|
[Beanie](https://github.com/roman-right/beanie) - is an asynchronous Python object-document mapper (ODM) for MongoDB. Data models are based on [Pydantic](https://pydantic-docs.helpmanual.io/).
|
|||
|
|
|
|||
|
|
When using Beanie each database collection has a corresponding `Document` that
|
|||
|
|
is used to interact with that collection. In addition to retrieving data,
|
|||
|
|
Beanie allows you to add, update, or delete documents from the collection as
|
|||
|
|
well.
|
|||
|
|
|
|||
|
|
Beanie saves you time by removing boilerplate code, and it helps you focus on
|
|||
|
|
the parts of your app that actually matter.
|
|||
|
|
|
|||
|
|
Data and schema migrations are supported by Beanie out of the box.
|
|||
|
|
|
|||
|
|
There is a synchronous version of Beanie ODM - [Bunnet](https://github.com/roman-right/bunnet)
|
|||
|
|
|
|||
|
|
## Installation
|
|||
|
|
|
|||
|
|
### PIP
|
|||
|
|
|
|||
|
|
```shell
|
|||
|
|
pip install beanie
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Poetry
|
|||
|
|
|
|||
|
|
```shell
|
|||
|
|
poetry add beanie
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
For more installation options (eg: `aws`, `gcp`, `srv` ...) you can look in the [getting started](./docs/getting-started.md#optional-dependencies)
|
|||
|
|
|
|||
|
|
## Example
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import asyncio
|
|||
|
|
from typing import Optional
|
|||
|
|
|
|||
|
|
from pymongo import AsyncMongoClient
|
|||
|
|
from pydantic import BaseModel
|
|||
|
|
|
|||
|
|
from beanie import Document, Indexed, init_beanie
|
|||
|
|
|
|||
|
|
|
|||
|
|
class Category(BaseModel):
|
|||
|
|
name: str
|
|||
|
|
description: str
|
|||
|
|
|
|||
|
|
|
|||
|
|
class Product(Document):
|
|||
|
|
name: str # You can use normal types just like in pydantic
|
|||
|
|
description: Optional[str] = None
|
|||
|
|
price: Indexed(float) # You can also specify that a field should correspond to an index
|
|||
|
|
category: Category # You can include pydantic models as well
|
|||
|
|
|
|||
|
|
|
|||
|
|
# This is an asynchronous example, so we will access it from an async function
|
|||
|
|
async def example():
|
|||
|
|
# Beanie uses PyMongo async client under the hood
|
|||
|
|
client = AsyncMongoClient("mongodb://user:pass@host:27017")
|
|||
|
|
|
|||
|
|
# Initialize beanie with the Product document class
|
|||
|
|
await init_beanie(database=client.db_name, document_models=[Product])
|
|||
|
|
|
|||
|
|
chocolate = Category(name="Chocolate", description="A preparation of roasted and ground cacao seeds.")
|
|||
|
|
# Beanie documents work just like pydantic models
|
|||
|
|
tonybar = Product(name="Tony's", price=5.95, category=chocolate)
|
|||
|
|
# And can be inserted into the database
|
|||
|
|
await tonybar.insert()
|
|||
|
|
|
|||
|
|
# You can find documents with pythonic syntax
|
|||
|
|
product = await Product.find_one(Product.price < 10)
|
|||
|
|
|
|||
|
|
# And update them
|
|||
|
|
await product.set({Product.name:"Gold bar"})
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
asyncio.run(example())
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Links
|
|||
|
|
|
|||
|
|
### Documentation
|
|||
|
|
|
|||
|
|
- **[Doc](https://beanie-odm.dev/)** - Tutorial, API documentation, and development guidelines.
|
|||
|
|
|
|||
|
|
### Example Projects
|
|||
|
|
|
|||
|
|
- **[fastapi-cosmos-beanie](https://github.com/tonybaloney/ants-azure-demos/tree/master/fastapi-cosmos-beanie)** - FastAPI + Beanie ODM + Azure Cosmos Demo Application by [Anthony Shaw](https://github.com/tonybaloney)
|
|||
|
|
- **[fastapi-beanie-jwt](https://github.com/flyinactor91/fastapi-beanie-jwt)** -
|
|||
|
|
Sample FastAPI server with JWT auth and Beanie ODM by [Michael duPont](https://github.com/flyinactor91)
|
|||
|
|
- **[Shortify](https://github.com/IHosseini083/Shortify)** - URL shortener RESTful API (FastAPI + Beanie ODM + JWT & OAuth2) by [
|
|||
|
|
Iliya Hosseini](https://github.com/IHosseini083)
|
|||
|
|
- **[LCCN Predictor](https://github.com/baoliay2008/lccn_predictor)** - Leetcode contest rating predictor (FastAPI + Beanie ODM + React) by [L. Bao](https://github.com/baoliay2008)
|
|||
|
|
|
|||
|
|
### Articles
|
|||
|
|
|
|||
|
|
- **[Announcing Beanie - MongoDB ODM](https://dev.to/romanright/announcing-beanie-mongodb-odm-56e)**
|
|||
|
|
- **[Build a Cocktail API with Beanie and MongoDB](https://developer.mongodb.com/article/beanie-odm-fastapi-cocktails/)**
|
|||
|
|
- **[MongoDB indexes with Beanie](https://dev.to/romanright/mongodb-indexes-with-beanie-43e8)**
|
|||
|
|
- **[Beanie Projections. Reducing network and database load.](https://dev.to/romanright/beanie-projections-reducing-network-and-database-load-3bih)**
|
|||
|
|
- **[Beanie 1.0 - Query Builder](https://dev.to/romanright/announcing-beanie-1-0-mongodb-odm-with-query-builder-4mbl)**
|
|||
|
|
- **[Beanie 1.8 - Relations, Cache, Actions and more!](https://dev.to/romanright/announcing-beanie-odm-18-relations-cache-actions-and-more-24ef)**
|
|||
|
|
|
|||
|
|
### Resources
|
|||
|
|
|
|||
|
|
- **[GitHub](https://github.com/roman-right/beanie)** - GitHub page of the
|
|||
|
|
project
|
|||
|
|
- **[Changelog](https://beanie-odm.dev/changelog)** - list of all
|
|||
|
|
the valuable changes
|
|||
|
|
- **[Discord](https://discord.gg/AwwTrbCASP)** - ask your questions, share
|
|||
|
|
ideas or just say `Hello!!`
|
|||
|
|
|
|||
|
|
----
|
|||
|
|
Supported by [JetBrains](https://jb.gg/OpenSource)
|
|||
|
|
|
|||
|
|
[](https://jb.gg/OpenSource)
|
|||
|
|
|