Skip to content

Commit ed20ebb

Browse files
committed
fix: duplicate results returned after search
1 parent 006f2d5 commit ed20ebb

File tree

1 file changed

+23
-5
lines changed

1 file changed

+23
-5
lines changed

widgets/workflow_search.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
F,
99
FilteredRelation,
1010
Q,
11+
OrderBy,
1112
QuerySet,
1213
Value,
1314
)
@@ -406,22 +407,29 @@ def build_sort_filter(qs: QuerySet, sort: SortOptions) -> QuerySet:
406407
match sort:
407408
case SortOptions.FEATURED:
408409
qs = qs.annotate(is_root_workflow=Q(published_run_id=""))
409-
return qs.order_by(
410+
fields = (
410411
"-is_approved_example",
411412
"-example_priority",
412413
"-is_root_workflow",
413414
F("is_created_by").desc(nulls_last=True),
414415
"-updated_at",
415416
)
416417
case SortOptions.UPDATED_AT:
417-
return qs.order_by("-updated_at")
418+
fields = ("-updated_at",)
418419
case SortOptions.CREATED_AT:
419-
return qs.order_by("-created_at")
420+
fields = ("-created_at",)
420421
case SortOptions.MOST_RUNS:
421-
return qs.order_by(
422-
"-run_count", F("is_created_by").desc(nulls_last=True), "-updated_at"
422+
fields = (
423+
"-run_count",
424+
F("is_created_by").desc(nulls_last=True),
425+
"-updated_at",
423426
)
424427

428+
return qs.order_by(*fields).distinct(
429+
"id",
430+
*(get_field_from_ordering(f) for f in fields),
431+
)
432+
425433

426434
def build_workflow_access_filter(qs: QuerySet, user: AppUser | None) -> QuerySet:
427435
# a) everyone can see published examples
@@ -510,3 +518,13 @@ def build_search_filter(
510518
qs = qs.filter(Q(search=search) | Q(workflow__in=workflow_search))
511519

512520
return qs
521+
522+
523+
def get_field_from_ordering(value: str | OrderBy) -> str:
524+
match value:
525+
case OrderBy():
526+
return value.expression.name
527+
case str():
528+
return value.lstrip("-")
529+
case _:
530+
raise ValueError(f"Invalid value: {value}")

0 commit comments

Comments
 (0)