asynchronous MongoDB ORM
Project description
Mongey
Mongey is a successor of Glasskit MongoDB ORM based on Motor MongoDB driver. Unlike GlassKit, Mongey is a stand-alone module detached from any web framework.
Mongey is based on Motor AsyncIO, meaning it is fully asynchronous.
Example
import asyncio
from mongey.context import ctx
from mongey.models import StorableModel
from mongey.models.fields import StringField, IntField, DictField
from mongey.decorators import api_field
class User(StorableModel):
COLLECTION = "users"
KEY_FIELD = "username"
username = StringField(required=True)
first_name = StringField(required=True)
last_name = StringField(required=True)
age = IntField(default=None)
user_settings = DictField(default=dict)
@api_field
def full_name(self) -> str:
return f"{self.first_name} {self.last_name}"
async def run():
ctx.setup_db({"meta": {"uri": "mongodb://127.0.0.1:27017/mydb", "kwargs": {}}, "shards": {}})
user = User({"username": "superuser", "first_name": "Joe", "last_name": "White"})
await user.save()
if __name__ == "__main__":
asyncio.run(run())
Context
Mongey context is a global variable holding configuration bits and the global database object.
Global context allows Mongey to behave more like ActiveRecord rather than Django ORM or SQLAlchemy.
In other words you do user.save()
instead of db.save(user)
.
Configuration
The global context object is created on import but stays not configured until you do so explicitly.
Logging and caching have their default versions and are pre-configured for you while db
does not.
Use ctx.setup_db(...)
to configure the database when your application starts, accessing the db
property
prior to database configuration will raise a ConfigurationError
exception.
Caching
Persistent models, like StorableModel
have cache_get
method along with the original get
. This method
fetches the model and if it succeeds, the model is stored to level1+level2 caches.
L1 cache is usually request local while the L2 is more "persistent", e.g. stored in memcached.
If you're developing a web app, this allows Mongey to get the same model multiple times within one web request quickly and "for free" from your app memory, while for new requests the L2 cache will be used.
Cache invalidation is a complex topic being considered one of the main problems in coding (along with naming of variables) so this is to be covered in a full documentation which is currently WIP.
Computed fields
@api_field
decorator can be added to arg-less sync or async methods of your model which will expose the method
to the sync to_dict()
and async to_dict_ext()
methods of the model which are the primary methods for further
model serialization.
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
Built Distribution
File details
Details for the file mongey-0.1.5.tar.gz
.
File metadata
- Download URL: mongey-0.1.5.tar.gz
- Upload date:
- Size: 28.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c99ad763dbac86e794c3ef7117ce2dae990fcb0e8cfc9189c441522803f315e0 |
|
MD5 | f74a99d39d711bc783f1a04c2c29df4e |
|
BLAKE2b-256 | 996e165173fedac6c9a643eb51c5bebc5122045a9c8f79ee686770b9c7f8448f |
File details
Details for the file mongey-0.1.5-py3-none-any.whl
.
File metadata
- Download URL: mongey-0.1.5-py3-none-any.whl
- Upload date:
- Size: 36.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.11.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d6fe6131b3e99257a1a83af7b50dd44c995ac7f0beb3126ebe68c528eb684866 |
|
MD5 | c3b5f0c2541094203655125fbb7d1af7 |
|
BLAKE2b-256 | 71a276b82e4a29750aa0296756ca2f904c79e4b9905bbea42261a9634d444ca5 |