Source code for database.db

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri May 21 18:09:08 2021

@author: Paolo Cozzi <paolo.cozzi@ibba.cnr.it>
"""

import mongoengine
import flask_mongoengine.connection
from flask_mongoengine import MongoEngine
from pymongo import ReadPreference, uri_parser

db = MongoEngine()

DB_ALIAS = "smarterdb"


[docs] def initialize_db(app): db.init_app(app)
def _sanitize_settings(settings): """Given a dict of connection settings, sanitize the keys and fall back to some sane defaults. """ # Remove the "MONGODB_" prefix and make all settings keys lower case. resolved_settings = {} for k, v in settings.items(): if k.startswith("MONGODB_"): k = k[len("MONGODB_"):] k = k.lower() resolved_settings[k] = v # Handle uri style connections if "://" in resolved_settings.get("host", ""): # this section pulls the database name from the URI # PyMongo requires URI to start with mongodb:// to parse # this workaround allows mongomock to work uri_to_check = resolved_settings["host"] if uri_to_check.startswith("mongomock://"): uri_to_check = uri_to_check.replace("mongomock://", "mongodb://") uri_dict = uri_parser.parse_uri(uri_to_check) resolved_settings["db"] = uri_dict["database"] # Add a default name param or use the "db" key if exists if resolved_settings.get("db"): resolved_settings["name"] = resolved_settings.pop("db") else: resolved_settings["name"] = "test" # Add various default values. # TODO do we have to specify it here? MongoEngine should take care of that resolved_settings["alias"] = resolved_settings.get( "alias", mongoengine.DEFAULT_CONNECTION_NAME ) # TODO this is the default host in pymongo.mongo_client.MongoClient, # we may not need to explicitly set a default here resolved_settings["host"] = resolved_settings.get( "host", "localhost" ) # TODO this is the default port in pymongo.mongo_client.MongoClient, # we may not need to explicitly set a default here resolved_settings["port"] = resolved_settings.get( "port", 27017 ) # Default to ReadPreference.PRIMARY if no read_preference is supplied resolved_settings["read_preference"] = resolved_settings.get( "read_preference", ReadPreference.PRIMARY ) # Clean up empty values for k, v in list(resolved_settings.items()): if v is None: del resolved_settings[k] # add a custom setting for mongodb connection resolved_settings['uuidRepresentation'] = 'standard' return resolved_settings # override class method flask_mongoengine.connection._sanitize_settings = _sanitize_settings