1
0
Fork 0
mirror of https://github.com/yweber/lodel2.git synced 2026-02-03 17:50:12 +01:00
lodel2_mirror/plugins/mongodb_datasource/utils.py

100 lines
2.7 KiB
Python

# -*- coding: utf-8 -*-
import pymongo
from pymongo import MongoClient
from lodel.settings.settings import Settings as settings
common_collections = {
'object': 'objects',
'relation': 'relation'
}
LODEL_SORT_OPERATORS_MAP = {
'ASC': pymongo.ASCENDING,
'DESC': pymongo.DESCENDING
}
MONGODB_SORT_OPERATORS_MAP = {
'ASC': 1,
'DESC': -1
}
MANDATORY_CONNECTION_ARGS = ('host', 'port', 'login', 'password', 'dbname')
class MongoDbConnectionError(Exception):
pass
def connection_string(host, port, username, password):
ret = 'mongodb://'
if username != None:
ret += username
if password != None:
ret += ':'+password
ret+='@'
elif password != None:
raise RuntimeError("Password given but no username given...")
host = 'localhost' if host is None else host
ret += host
if port is not None:
ret += ':'+str(port)
return ret
##@brief Return an instanciated MongoClient
#@param host str : hostname or ip
#@param port int : port
#@param username str | None: username
#@param password str|None : password
def connection(host, port, username, password):
conn_str = connection_string(host, port, username, password)
return MongoClient(conn_str)
##@brief Return a database cursor
#@param host str : hostname or ip
#@param port int : port
#@param db_name str : database name
#@param username str | None: username
#@param password str|None : password
def connect(host, port, db_name, username, password):
conn = connection(host, port, username, password)
database = conn[db_name]
return database
## @brief Returns a collection name given a EmClass
# @param class_object EmClass
# @return str
def object_collection_name(class_object):
return class_object.__name__
def collection_name(class_name):
return class_name
## @brief Determine a collection field name given a lodel2 fieldname
# @note For the moment this method only return the argument but EVERYWHERE
# in the datasource we should use this method to gather proper fieldnames
# @param fieldname str : A lodel2 fieldname
# @return A string representing a well formated mongodb fieldname
# @see mongo_filednames
def mongo_fieldname(fieldname):
return fieldname
## @brief Same as mongo_fieldname but for list of fields
#
# A small utility function
# @param fieldnames iterable : contains str only
# @return a list of converted fildnames (str)
# @see mongo_fieldname
def mongo_fieldnames(fieldnames):
return [mongo_fieldname(fname) for fname in fieldnames]
## @brief Returns a list of orting options
# @param query_filters_order list
# @return list
def parse_query_order(query_filters_order):
return [(field, LODEL_SORT_OPERATORS_MAP[direction])
for field, direction in query_filters_order]