What is the correct way of picking up mongo object inside Blueprints?
Here is how I have my parent login.py
:
app.config.from_object(\
You're are initializing the PyMongo driver twice, once in child.py
and a second time on child2.py
.
Try initializing the PyMongo connection in the file which sets up your app object and then import it in the children:
login.py:
app.config.from_object('config')
from flask.ext.pymongo import PyMongo
from child import child
from child2 import child2
app = Flask(__name__)
mongo = PyMongo(app)
# Register blueprints
def register_blueprints(app):
# Prevents circular imports
app.register_blueprint(child2.child2)
app.register_blueprint(child.child)
register_blueprints(app)
in child.py
from app import app, mongo
child = Blueprint('child', __name__)
child2.py:
from app import app, mongo
child2 = Blueprint('child2', __name__)
One of the issues with the approach of performing an import in the blueprint as was suggest by Emanuel Ey, turns out that it causes a circular import. After much playing, it turns out that the only way (I could find) was to create a separate file called database.py
that connects to the database and then I can import this connection to by blueprint as follows:
child.py
from database import mongo
courses = Blueprint('courses', __name__)
and my database.py
from flask.ext.pymongo import PyMongo
mongo = PyMongo()
and the app, login.py but has to initialize the database
from database import mongo
app = Flask(__name__)
app.config.from_object('config')
mongo.init_app(app) # initialize here!
from child import child
from child import2 child2
app.register_blueprint(child.child)
app.register_blueprint(child2.child2)