def _get_case_property_or_missing_query(self, criteria): if criteria.is_empty: return case_property_missing(criteria.key) if criteria.is_ancestor_query: missing_filter = build_filter_from_xpath(self.query_domains, f'{criteria.key} = ""') else: missing_filter = case_property_missing(criteria.key) return filters.OR(self._get_query(criteria), missing_filter)
def _equality(node): """Returns the filter for an equality operation (=, !=) """ if isinstance(node.left, Step) and ( isinstance(node.right, integer_types + (string_types, float, FunctionCall))): # This is a leaf node case_property_name = serialize(node.left) value = _unwrap_function(node.right) if value == '': q = case_property_missing(case_property_name) else: q = exact_case_property_text_query(case_property_name, value) if node.op == '!=': return filters.NOT(q) return q if isinstance(node.right, Step): _raise_step_RHS(node) raise CaseFilterError( _("We didn't understand what you were trying to do with {}").format(serialize(node)), serialize(node) )
def _equality(node): """Returns the filter for an equality operation (=, !=) """ if isinstance(node.left, Step) and (isinstance( node.right, integer_types + (string_types, float, FunctionCall))): # This is a leaf node case_property_name = serialize(node.left) value = _unwrap_function(node.right) if value == '': q = case_property_missing(case_property_name) else: q = exact_case_property_text_query(case_property_name, value) if node.op == '!=': return filters.NOT(q) return q if isinstance(node.right, Step): _raise_step_RHS(node) raise CaseFilterError( _("We didn't understand what you were trying to do with {}"). format(serialize(node)), serialize(node))
def _equality(node): """Returns the filter for an equality operation (=, !=) """ acceptable_rhs_types = (int, str, float, FunctionCall, UnaryExpression) if isinstance(node.left, Step) and (isinstance(node.right, acceptable_rhs_types)): # This is a leaf node case_property_name = serialize(node.left) value = _unwrap_function(node.right) if value == '': q = case_property_missing(case_property_name) elif fuzzy: q = case_property_text_query(case_property_name, value, fuzziness='AUTO') else: q = exact_case_property_text_query(case_property_name, value) if node.op == '!=': return filters.NOT(q) return q if isinstance(node.right, Step): _raise_step_RHS(node) raise CaseFilterError( _("We didn't understand what you were trying to do with {}"). format(serialize(node)), serialize(node))
def find_case_ids(self, domain): query = (CaseSearchES().domain(domain).filter( exact_case_property_text_query('current_status', 'closed')).filter( case_property_missing("all_activity_complete_date")).case_type( self.case_type).owner(INACTIVE_LOCATION_IDS)) if self.case_type == 'contact': query = (query.modified_range(gte=datetime.date(2022, 2, 2)).NOT( exact_case_property_text_query('final_disposition', 'converted_to_pui'))) return list(query.scroll_ids())
def test_missing_case_property(self): self._assert_query_runs_correctly( self.domain, [ {'_id': 'c2', 'foo': 'blackbeard'}, {'_id': 'c3', 'foo': ''}, {'_id': 'c4'}, ], CaseSearchES().domain(self.domain).filter(case_property_missing('foo')), "foo = ''", ['c3', 'c4'] )
def _get_custom_property_filter(key, val): prop = key[len(CUSTOM_PROPERTY_PREFIX):] if val == "": return case_search.case_property_missing(prop) return case_search.exact_case_property_text_query(prop, val)