Пример #1
0
    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)
Пример #2
0
    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)
        )
Пример #3
0
    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))
Пример #4
0
    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())
Пример #6
0
 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']
     )
Пример #7
0
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)