def where_filter()

in sapp/ui/issues.py [0:0]


    def where_filter(self, filter_instance: Filter) -> "Instance":
        traceLengthToSinks = filter_instance.traceLengthToSinks
        min_trace_length_to_sinks: Optional[int] = None
        if traceLengthToSinks is not None:
            min_trace_length_to_sinks = traceLengthToSinks[0]

        max_trace_length_to_sinks: Optional[int] = None
        if traceLengthToSinks is not None:
            max_trace_length_to_sinks = traceLengthToSinks[1]

        traceLengthFromSources = filter_instance.traceLengthFromSources
        min_trace_length_to_sources: Optional[int] = None
        if traceLengthFromSources is not None:
            min_trace_length_to_sources = traceLengthFromSources[0]

        max_trace_length_to_sources: Optional[int] = None
        if traceLengthFromSources is not None:
            max_trace_length_to_sources = traceLengthFromSources[1]

        builder = (
            self.where_codes_is_any_of(filter_instance.codes)
            .where_path_is_any_of(filter_instance.paths)
            .where_trace_length_to_sinks(
                min_trace_length_to_sinks, max_trace_length_to_sinks
            )
            .where_trace_length_to_sources(
                min_trace_length_to_sources, max_trace_length_to_sources
            )
            .where_is_new_issue(filter_instance.is_new_issue)
            .where_status_is_any_of(filter_instance.statuses)
        )

        if filter_instance.callables:
            if not isinstance(filter_instance.callables, List):
                if filter_instance.callables.get("operation") == "matches":
                    builder = builder.where_callables_matches(
                        filter_instance.callables.get("value", [""])[0]
                    )
                elif filter_instance.callables.get("operation") == "is":
                    if any(filter_instance.callables.get("value", [])):
                        builder = builder.where_callables_is_any_of(
                            filter_instance.callables.get("value", [""])
                        )
                else:
                    raise ValueError(
                        """Invalid value supplied for callables parameter
                        `operation`. The supported values are `is` and
                        `matches`."""
                    )
            else:
                # Backward compatibility
                builder = builder.where_callables_is_any_of(filter_instance.callables)

        if filter_instance.source_names:
            if not isinstance(filter_instance.source_names, list):
                if filter_instance.source_names.get("operation") == "matches":
                    builder = builder.where_source_name_matches(
                        filter_instance.source_names.get("value", [""])[0]
                    )
                elif filter_instance.source_names.get("operation") == "is":
                    if any(filter_instance.source_names.get("value", [])):
                        builder = builder.where_source_name_is_any_of(
                            filter_instance.source_names.get("value", [""])
                        )
                else:
                    raise ValueError(
                        """Invalid value supplied for source_names parameter
                        `operation`. The supported values are `is` and
                        `matches`."""
                    )
            else:
                # Backward compatibility
                builder = builder.where_source_name_is_any_of(
                    filter_instance.source_names
                )

        if filter_instance.source_kinds:
            if not isinstance(filter_instance.source_kinds, list):
                if filter_instance.source_kinds.get("operation") == "matches":
                    builder = builder.where_source_kind_matches(
                        filter_instance.source_kinds.get("value", [""])[0]
                    )
                elif filter_instance.source_kinds.get("operation") == "is":
                    if any(filter_instance.source_kinds.get("value", [])):
                        builder = builder.where_source_kind_is_any_of(
                            filter_instance.source_kinds.get("value", [""])
                        )
                else:
                    raise ValueError(
                        """Invalid value supplied for source_kinds parameter
                        `operation`. The supported values are `is` and
                        `matches`."""
                    )
            else:
                # Backward compatibility
                builder = builder.where_source_kind_is_any_of(
                    filter_instance.source_kinds
                )

        if filter_instance.sink_names:
            if not isinstance(filter_instance.sink_names, list):
                if filter_instance.sink_names.get("operation") == "matches":
                    builder = builder.where_sink_name_matches(
                        filter_instance.sink_names.get("value", [""])[0]
                    )
                elif filter_instance.sink_names.get("operation") == "is":
                    if any(filter_instance.sink_names.get("value", [])):
                        builder = builder.where_sink_name_is_any_of(
                            filter_instance.sink_names.get("value", [""])
                        )
                else:
                    raise ValueError(
                        """Invalid value supplied for sink_names parameter
                        `operation`. The supported values are `is` and
                        `matches`."""
                    )
            else:
                # Backward compatibility
                builder = builder.where_sink_name_is_any_of(filter_instance.sink_names)

        if filter_instance.sink_kinds:
            if not isinstance(filter_instance.sink_kinds, list):
                if filter_instance.sink_kinds.get("operation") == "matches":
                    builder = builder.where_sink_kind_matches(
                        filter_instance.sink_kinds.get("value", [""])[0]
                    )
                elif filter_instance.sink_kinds.get("operation") == "is":
                    if any(filter_instance.sink_kinds.get("value", [])):
                        builder = builder.where_sink_kind_is_any_of(
                            filter_instance.sink_kinds.get("value", [""])
                        )
                else:
                    raise ValueError(
                        """Invalid value supplied for sink_kinds parameter
                        `operation`. The supported values are `is` and
                        `matches`."""
                    )
            else:
                # Backward compatibility if the filter is of the form List[str]
                builder = builder.where_sink_kind_is_any_of(filter_instance.sink_kinds)

        for feature in filter_instance.format_features_for_query() or []:
            if feature[0] == "any of":
                builder = builder.where_any_features(feature[1])
            if feature[0] == "all of":
                builder = builder.where_all_features(feature[1])
            if feature[0] == "none of":
                builder = builder.where_exclude_features(feature[1])

        return builder