1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #-*- coding: utf-8 -*-
-
- from leobject.datasources.dummy import DummyDatasource
- from mosql.db import Database, all_to_dicts
- from mosql.query import select
-
- from Lodel.utils.mosql import *
-
- ## SQL DataSource for LeObject
- class LeDataSourceSQL(DummyDatasource):
-
- def __init__(self, module=None, *conn_args, **conn_kargs):
- super(LeDataSourceSQL, self).__init__()
- self.db = Database(self.module, self.conn_args, self.conn_kargs)
-
- ## @brief update an existing object's data
- # @param leclass LeClass
- # @param filters list : list of tuples formatted as (FIELD, OPERATOR, VALUE)
- # @param data dict
- # @param relational_filters list : list of tuples formatted as (('superior'|'subordinate', FIELD), OPERATOR, VALUE)
- # @param letype LeType
- # @return bool
- def update (self, leclass, filters, data, relational_filters=None, letype=None):
- pass
-
- ## @brief create a new object in the datasource
- # @param leclass LeClass
- # @param letype LeType
- # @param datas dict : dictionnary of field:value pairs to save
- # @return int : lodel_id of the created object
- def insert(self, leclass, letype=None, **datas):
- pass
-
- ## @brief delete an existing object
- # @param leclass LeClass
- # @param filters list : list of tuples formatted as (FIELD, OPERATOR, VALUE)
- # @param relational_filters list : list of tuples formatted as (('superior'|'subordinate', FIELD), OPERATOR, VALUE)
- # @param letype LeType
- # @return bool : True on success
- def delete(self, leclass, filters, relational_filters=None, letype=None):
- pass
-
- ## @brief search for a collection of objects
- # @param emclass LeClass
- # @param emtype LeType
- # @field_list list
- # @param filters list : list of tuples formatted as (FIELD, OPERATOR, VALUE)
- # @param relational_filters list : list of tuples formatted as (('superior'|'subordinate', FIELD), OPERATOR, VALUE)
- def get(self, emclass, emtype, field_list, filters, relational_filters=None):
-
- tablename = emclass.name
- where_filters = self._prepare_filters(filters)
- if relational_filters or len(relational_filters) > 0:
- for relational_filter in relational_filters:
- relational_position = relational_filter[0][0]
- relational_field = relational_filter[0][1]
- relational_operator = relational_filter[1]
- relational_value = relational_filter[2]
-
-
-
- tablename = emclass.name
- where_filters = self._prepare_filters(filters)
- if relational_filters or len(relational_filters) > 0:
- rel_filters = self._prepare_filters(relational_filters)
- query = select(tablename, where=where_filters, select=field_list, joins=join('relations', {}))
- else:
- query = select(tablename, where=where_filters, select=field_list)
- self.db.execute(query)
-
- return all_to_dicts(self.db)
-
- # @brief prepares the filters to be used by the mosql library's functions
- # @params filters : (FIELD, OPERATOR, VALUE) tuples
- # @return dict : Dictionnary with (FIELD, OPERATOR):VALUE style elements
- def _prepare_filters(self, filters):
- prepared_filters = {}
- for filter in filters:
- prepared_filter_key = (filter[0], filter[1])
- prepared_filter_value = filter[2]
- prepared_filters[prepared_filter_key] = prepared_filter_value
-
- return prepared_filters
|