class GeneralFilterWdg(BaseFilterWdg): '''Represents a very generic filter matching a column to a value''' def init(self): self.column_select = SelectWdg("%s_column" % self.name) self.relation_select = SelectWdg("%s_relation" % self.name) self.value_text = TextWdg("%s_value" % self.name) self.columns = [] def set_columns(self, columns): self.columns = columns def set_columns_from_search_type(self, search_type): self.columns = SearchType.get(search_type).get_columns(show_hidden=False) def get_display(self): if not self.columns: print self.options search_type = self.options.get("search_type") if search_type: self.set_columns_from_search_type(search_type) if not self.columns: self.columns = [] span = SpanWdg() self.column_select.set_option("values", self.columns) self.column_select.set_persist_on_submit() span.add(self.column_select) relations = ["is", "is not", "contains", "does not contain", "is empty"] self.relation_select.set_option("values", relations) self.relation_select.set_persist_on_submit() span.add(self.relation_select) self.value_text.set_persist_on_submit() span.add(self.value_text) return span def alter_search(self, search): value = self.value_text.get_value() column = self.column_select.get_value() relation = self.relation_select.get_value() if relation == "is empty": search.add_where("(\"%s\" = '' or \"%s\" is NULL)" % (column, column) ) return if not value or not column or not relation: return if relation == "is": search.add_filter(column, value) elif relation == "is not": search.add_where("\"%s\" != '%s'" % (column, value) ) elif relation == "contains": search.add_regex_filter(column, value, op="EQI") elif relation == "does not contain": search.add_regex_filter(column, value, op="NEQI") elif relation == "is empty": search.add_where("(\"%s\" = '' or %s is NULL)" % (column, column) )