Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/prashnts/mongocapsule
📦 Encapsulated MongoEngine
https://github.com/prashnts/mongocapsule
mongodb mongoengine orm python
Last synced: about 1 month ago
JSON representation
📦 Encapsulated MongoEngine
- Host: GitHub
- URL: https://github.com/prashnts/mongocapsule
- Owner: prashnts
- License: mit
- Created: 2016-06-28T09:46:20.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-11-03T12:40:45.000Z (about 4 years ago)
- Last Synced: 2024-10-08T17:43:49.906Z (3 months ago)
- Topics: mongodb, mongoengine, orm, python
- Language: Python
- Homepage:
- Size: 12.7 KB
- Stars: 19
- Watchers: 4
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: LICENSE.md
Awesome Lists containing this project
README
# MongoCapsule
[![Build Status](https://img.shields.io/travis/prashnts/mongocapsule/master.svg)](https://travis-ci.org/prashnts/mongocapsule) [![Code Climate](https://img.shields.io/codeclimate/github/prashnts/mongocapsule.svg)](https://codeclimate.com/github/prashnts/mongocapsule) [![Test Coverage](https://img.shields.io/codeclimate/coverage/github/prashnts/mongocapsule.svg)](https://codeclimate.com/github/prashnts/mongocapsule)
[![PyPI](https://img.shields.io/pypi/v/mongocapsule.svg)](https://pypi.python.org/pypi/mongocapsule) [![Requirements Status](https://requires.io/github/prashnts/mongocapsule/requirements.svg?branch=master)](https://requires.io/github/prashnts/mongocapsule/requirements/?branch=master)
## Overview
MongoCapsule is a very thin wrapper around MongoEngine built for your happiness. It encapsulates MongoEngine attributes under a single namespace and hence allows explicit declaration without context switches.In addition to that, MongoCapsule adds pagination support to all the query results.
MongoEngine is a great ORM for using MongoDB in any Python project. However, since MongoEngine works in "contexts", using multiple databases requires trickery such as `db_alias` and `switch_db`. MongoCapsule solves this by attaching references to MongoEngine attributes to itself.
## Quickstart
If you are familiar with MongoEngine, you can use MongoCapsule already! Create the database object and use it to define your document and fields.
```python
from mongocapsule import MongoCapsuledb = MongoCapsule('test_db')
class Fruits(db.Document):
name = db.StringField()
```Refer to [MongoEngine Docs](http://docs.mongoengine.org/index.html) for details.
## Installation
To install use pip:
```bash
pip install mongocapsule
```Or clone the repo:
```bash
git clone https://github.com/prashnts/mongocapsule.git
python setup.py install
```## Additional API
MongoCapsule adds Pagination support to the MongoEngine `QuerySet` object. It returns 10 objects per page, however, this can be changed.
```python
# Obtain nth Page of any arbitrary query:
query_results = Document.objects(...).sort(...)
result_page = query_results.page(2) # Obtain second page
total_pages = query_results.page_count
# Update number of items returned per page:
db.QuerySet.set_page_limit(20)
```
## Contributing
Code Patches, suggestions and bug reports welcome! Please use GitHub issues for the same.
## Rant
I wrote this module because the examples in official MongoEngine documentation encourages using `from mongoengine import *` which not only pollutes the local namespace, but makes class definitions implicit. Of course, cherrypicked imports are possible, however that requires a lot of extra imports in each files.The biggest problem, however, comes when you're using multiple databases or hosts -- in those cases, you need to use context switches or ugly `meta` attributes in the declaration.