暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ledatasourcesql.py 3.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #-*- coding: utf-8 -*-
  2. from leobject.datasources.dummy import DummyDatasource
  3. from mosql.db import Database, all_to_dicts
  4. from mosql.query import select
  5. from Lodel.utils.mosql import *
  6. ## SQL DataSource for LeObject
  7. class LeDataSourceSQL(DummyDatasource):
  8. def __init__(self, module=None, *conn_args, **conn_kargs):
  9. super(LeDataSourceSQL, self).__init__()
  10. self.db = Database(self.module, self.conn_args, self.conn_kargs)
  11. ## @brief update an existing object's data
  12. # @param leclass LeClass
  13. # @param filters list : list of tuples formatted as (FIELD, OPERATOR, VALUE)
  14. # @param data dict
  15. # @param relational_filters list : list of tuples formatted as (('superior'|'subordinate', FIELD), OPERATOR, VALUE)
  16. # @param letype LeType
  17. # @return bool
  18. def update (self, leclass, filters, data, relational_filters=None, letype=None):
  19. pass
  20. ## @brief create a new object in the datasource
  21. # @param leclass LeClass
  22. # @param letype LeType
  23. # @param datas dict : dictionnary of field:value pairs to save
  24. # @return int : lodel_id of the created object
  25. def insert(self, leclass, letype=None, **datas):
  26. pass
  27. ## @brief delete an existing object
  28. # @param leclass LeClass
  29. # @param filters list : list of tuples formatted as (FIELD, OPERATOR, VALUE)
  30. # @param relational_filters list : list of tuples formatted as (('superior'|'subordinate', FIELD), OPERATOR, VALUE)
  31. # @param letype LeType
  32. # @return bool : True on success
  33. def delete(self, leclass, filters, relational_filters=None, letype=None):
  34. pass
  35. ## @brief search for a collection of objects
  36. # @param emclass LeClass
  37. # @param emtype LeType
  38. # @field_list list
  39. # @param filters list : list of tuples formatted as (FIELD, OPERATOR, VALUE)
  40. # @param relational_filters list : list of tuples formatted as (('superior'|'subordinate', FIELD), OPERATOR, VALUE)
  41. def get(self, emclass, emtype, field_list, filters, relational_filters=None):
  42. tablename = emclass.name
  43. where_filters = self._prepare_filters(filters)
  44. if relational_filters or len(relational_filters) > 0:
  45. for relational_filter in relational_filters:
  46. relational_position = relational_filter[0][0]
  47. relational_field = relational_filter[0][1]
  48. relational_operator = relational_filter[1]
  49. relational_value = relational_filter[2]
  50. tablename = emclass.name
  51. where_filters = self._prepare_filters(filters)
  52. if relational_filters or len(relational_filters) > 0:
  53. rel_filters = self._prepare_filters(relational_filters)
  54. query = select(tablename, where=where_filters, select=field_list, joins=join('relations', {}))
  55. else:
  56. query = select(tablename, where=where_filters, select=field_list)
  57. self.db.execute(query)
  58. return all_to_dicts(self.db)
  59. # @brief prepares the filters to be used by the mosql library's functions
  60. # @params filters : (FIELD, OPERATOR, VALUE) tuples
  61. # @return dict : Dictionnary with (FIELD, OPERATOR):VALUE style elements
  62. def _prepare_filters(self, filters):
  63. prepared_filters = {}
  64. for filter in filters:
  65. prepared_filter_key = (filter[0], filter[1])
  66. prepared_filter_value = filter[2]
  67. prepared_filters[prepared_filter_key] = prepared_filter_value
  68. return prepared_filters