Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jonnoftw/pyramid_mongodb2
Simple library to integrate mongodb into your pyramid application
https://github.com/jonnoftw/pyramid_mongodb2
mongodb pymongo pyramid
Last synced: 21 days ago
JSON representation
Simple library to integrate mongodb into your pyramid application
- Host: GitHub
- URL: https://github.com/jonnoftw/pyramid_mongodb2
- Owner: JonnoFTW
- License: mit
- Created: 2018-07-26T02:43:05.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-12-28T13:55:55.000Z (almost 5 years ago)
- Last Synced: 2024-10-08T04:41:50.517Z (about 1 month ago)
- Topics: mongodb, pymongo, pyramid
- Language: Mako
- Size: 21.5 KB
- Stars: 5
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.txt
- License: LICENSE.txt
Awesome Lists containing this project
README
Pyramid Mongodb
===============A simple library to integrate mongodb into your pyramid application. Comes with a debugtoolbar.
Features
--------* Supports multiple databases
* Configuration only setup
* Integrated debugtoolbar with:
* Shows db response times
* `explain()` for cursor results
* Connection information
* Database and collection stats
* Avoids recreating and closing `MongoClient` on every request.Setup
-----
```bash
pip install pyramid_mongodb2
```Add the following to your application's ini file, (include `pyramid_mongodb2:MongoToolbar` in `debugtoolbar.includes` if you want to debug):
```ini
[app:main]
mongo_uri = mongodb://username:[email protected]:27017/authdb
mongo_dbs =
foo
bar
baz-quux
foo-test = foo
pyramid.includes =
pyramid_mako
pyramid_debugtoolbar
pyramid_mongodb2
debugtoolbar.includes =
pyramid_mongodb2:MongoToolbar
```
The code will use `config.add_request_method()` to add a `Database` object to your requests, where each database is accessible by `db_database_name`, as defined in your configuration.**Note**: database names with hyphens in them will be converted to underscores, that is database `baz-quux` will be accessible by `request.db_baz_quux`.
When doing `foo-test = foo`, the mongodb database with name `foo-test` will be assigned to `request.db_foo`.
This helps when testing so that you can use a separate database for development, testing and production without
changing your application code, or if you just want to alias a database name.
In your code where you can access `request`, you now have the following variables:```python
request.db
request.db_foo
request.db_bar
request.db_baz_quux
request.db_foo
```
`request.db` is the `MongoClient` object, should you ever need it.In your view code, you can do this:
```python
from pyramid.view import view_config@view_config(route_name='home', renderer="templates/landing.mako")
def my_view(request):
return {
'some_data': request.db_foo.some_collection.find({'a': {'$gte': 5}}, {'_id': False}),
'other_data': request.db_bar.visitors.insert_one({'person': request.remote_addr}),
}
```Debugging
---------With debugging enabled, all queries will be logged in `request.query_log`, when the debugtoolbar is opened, you can
then view the execution time and `explain()` of cursor results. You can also see connection settings and stats for
databases and collections.Screenshots
-----------Here's what the toolbar looks like in action:
Clicking the database or collection name will take you to the relevant section of the collections tab. Clicking the operation name will take you to its pymongo documentation.
![debug1](https://user-images.githubusercontent.com/650314/43239055-06890ce6-90d0-11e8-8761-53460bc65ced.png)Clicking the explain button will show you the `explain()` result for a cursor.
![debug2](https://user-images.githubusercontent.com/650314/43239051-05e0e8f4-90d0-11e8-93f4-8a4d1c42af14.png)
You can view detailed connection information here, clicking the field name will take you to the pymongo documentation for that field.
![debug3](https://user-images.githubusercontent.com/650314/43239052-06099272-90d0-11e8-8cb0-d51465dd12a2.png)
This page show `dbstats` for all connected databases used in this request and their collections.
![debug4](https://user-images.githubusercontent.com/650314/43239053-063631f6-90d0-11e8-9fc0-9703e4a70464.png)
Here we can see the use of multiple databases in a single project.
![debug5](https://user-images.githubusercontent.com/650314/43239054-065f8524-90d0-11e8-9a5a-889e8b23c207.png)