interface.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. from . import filters
  2. from ..base import BaseInterface
  3. def _include_filters(obj):
  4. for key in filters.__all__:
  5. if not hasattr(obj, key):
  6. setattr(obj, key, getattr(filters, key))
  7. class GenericInterface(BaseInterface):
  8. filter_converter_class = filters.GenericFilterConverter
  9. def __init__(self, obj, session=None):
  10. _include_filters(self)
  11. self.session = session
  12. super(GenericInterface, self).__init__(obj)
  13. def query(
  14. self,
  15. filters=None,
  16. order_column="",
  17. order_direction="",
  18. page=None,
  19. page_size=None,
  20. ):
  21. query = self.session.query(self.obj)
  22. if filters:
  23. query = filters.apply_all(query)
  24. if order_column != "":
  25. query = query.order_by(order_column + " " + order_direction)
  26. if page:
  27. query = query.offset(page * page_size)
  28. if page_size:
  29. query = query.limit(page_size)
  30. return query.all()
  31. def is_string(self, col_name):
  32. return self.obj.properties[col_name].col_type == str
  33. def is_integer(self, col_name):
  34. return self.obj.properties[col_name].col_type == int
  35. def is_nullable(self, col_name):
  36. return self.obj.properties[col_name].nullable
  37. def is_unique(self, col_name):
  38. return self.obj.properties[col_name].unique
  39. def is_pk(self, col_name):
  40. return self.obj.properties[col_name].primary_key
  41. def is_pk_composite(self):
  42. return False
  43. def get_columns_list(self):
  44. return self.obj.columns
  45. def get_search_columns_list(self):
  46. return self.obj.columns
  47. def get_order_columns_list(self, list_columns=None):
  48. if list_columns:
  49. return list_columns
  50. return self.obj.columns
  51. def get_keys(self, lst):
  52. """
  53. return a list of pk values from object list
  54. """
  55. pk_name = self.get_pk_name()
  56. return [getattr(item, pk_name) for item in lst]
  57. def get_pk_name(self):
  58. for col_name in self.obj.columns:
  59. if self.is_pk(col_name):
  60. return col_name
  61. def get(self, id, filters=None):
  62. # TODO: need to implement filters!
  63. return self.session.get(id)