Author: croberts
Date: 2012-12-10 19:46:56 +0000 (Mon, 10 Dec 2012)
New Revision: 5572
Modified:
trunk/cumin/python/cumin/objectselector.py
Log:
BZ 879314: Adding special query logic to support searching on "image size"
fields that come with a unit. Searches should not include the unit. Only numeric input
is supported.
Modified: trunk/cumin/python/cumin/objectselector.py
===================================================================
--- trunk/cumin/python/cumin/objectselector.py 2012-12-10 17:42:33 UTC (rev 5571)
+++ trunk/cumin/python/cumin/objectselector.py 2012-12-10 19:46:56 UTC (rev 5572)
@@ -4,7 +4,7 @@
from cumin.util import Identifiable, xml_escape, fmt_ddhhmm_timestamp
from rosemary.model import RosemaryClass, RosemaryAttribute, RosemaryReference
-from rosemary.sqlfilter import SqlFilter, SqlLikeFilter, SqlILikeFilter, SqlValueFilter,
SqlDateValueFilter
+from rosemary.sqlfilter import SqlFilter, SqlLikeFilter, SqlILikeFilter, SqlValueFilter,
SqlDateValueFilter, SqlComparisonFilter
from wooly.util import StringCatalog, Writer, escape_entity, parse_date_from_string
from wooly.datatable import DataTable, DataTableColumn
@@ -370,6 +370,7 @@
super(SelectableSearchObjectTable, self).__init__(app, name, cls)
self.error_in_query = False
self.special_columns = ["MonitorSelfAge"]
+ self.unitSizeFields = ["MonitorSelfImageSize"]
def do_process(self, session):
#here we are making sure that if you are searching an int or a timestamp column
@@ -441,7 +442,10 @@
pre = ""
post = ""
- if sql_column.type.literal == "timestamp":
+ if sql_column.name in self.unitSizeFields:
+ customvalue = int(customvalue)
+ self.adapter.query.add_filter(self.SelectableFieldSizeValueFilter(sql_column,
operator))
+ elif sql_column.type.literal == "timestamp":
searchvalue = parse_date_from_string(customvalue)
self.adapter.query.add_filter(self.SelectableFieldDateEnqueuedValueFilter(sql_column,
searchvalue, operator))
elif sql_column.type.literal == "int8" or sql_column.type.literal ==
"float8":
@@ -541,6 +545,10 @@
def emit(self):
return "round(cast(%s as numeric), 2) %s round(%s, 2)" %
(self.this, self.operator, self.that)
+ class SelectableFieldSizeValueFilter(SqlValueFilter, SelectableFieldFilter):
+ def emit(self):
+ return "cast(%s as int) / 1024 %s %s" % (self.this, self.operator,
self.that)
+
class SelectableFieldUptimeValueFilter(SqlValueFilter, SelectableFieldFilter):
#necessary because we only show day:hour:minute to the user, but we store seconds
in
#the cumin database. This filter takes the value from the user, and
Show replies by date