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