Repository: incubator-ariatosca
Updated Branches:
  refs/heads/support_for_sql_opperands [created] 3987e24ad


added support for opperands in sql mapi


Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/3987e24a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/3987e24a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/3987e24a

Branch: refs/heads/support_for_sql_opperands
Commit: 3987e24ad67f65004fdd3000d3719548619de825
Parents: e7ffc73
Author: max-orlov <[email protected]>
Authored: Tue Apr 4 20:41:59 2017 +0300
Committer: max-orlov <[email protected]>
Committed: Tue Apr 4 20:42:17 2017 +0300

----------------------------------------------------------------------
 aria/storage/sql_mapi.py | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3987e24a/aria/storage/sql_mapi.py
----------------------------------------------------------------------
diff --git a/aria/storage/sql_mapi.py b/aria/storage/sql_mapi.py
index 59e1896..d926cac 100644
--- a/aria/storage/sql_mapi.py
+++ b/aria/storage/sql_mapi.py
@@ -17,6 +17,7 @@ SQLAlchemy based MAPI
 """
 import os
 import platform
+from collections import namedtuple
 
 from sqlalchemy import (
     create_engine,
@@ -31,6 +32,9 @@ from . import (
     exceptions,
 )
 
+_Operands = namedtuple('Operands', 'ge, gt, lt, le, eq, ne')
+OPERANDS = _Operands(ge='__ge__', gt='__gt__', lt='__lt__', le='__le__', 
eq='__eq__', ne='__ne__')
+
 
 class SQLAlchemyModelAPI(api.ModelAPI):
     """
@@ -243,7 +247,10 @@ class SQLAlchemyModelAPI(api.ModelAPI):
     @staticmethod
     def _add_value_filter(query, filters):
         for column, value in filters.items():
-            if isinstance(value, (list, tuple)):
+            if isinstance(value, dict):
+                op, item = value.items()[0]
+                query = query.filter(getattr(column, op)(item))
+            elif isinstance(value, (list, tuple)):
                 query = query.filter(column.in_(value))
             else:
                 query = query.filter(column == value)
@@ -269,12 +276,24 @@ class SQLAlchemyModelAPI(api.ModelAPI):
         include, filters, sort, joins = self._get_joins_and_converted_columns(
             include, filters, sort
         )
+        filters = self._convert_operands(filters)
 
         query = self._get_base_query(include, joins)
         query = self._filter_query(query, filters)
         query = self._sort_query(query, sort)
         return query
 
+    @staticmethod
+    def _convert_operands(filters):
+        for column, predicate in filters.items():
+            if isinstance(predicate, dict):
+                op, val = predicate.items()[0]
+                if hasattr(OPERANDS, op):
+                    filters[column][getattr(OPERANDS, op)] = val
+                    del filters[column][op]
+
+        return filters
+
     def _get_joins_and_converted_columns(self,
                                          include,
                                          filters,

Reply via email to