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
cumin-developers@lists.fedorahosted.org