Added support for multiple int where's

This commit is contained in:
Donkie
2023-09-09 10:18:26 +02:00
parent 6d68a40313
commit 6ee3b8df70
8 changed files with 168 additions and 42 deletions

View File

@@ -119,42 +119,55 @@ async def find(
alias="vendor_name",
default=None,
title="Vendor Name",
description="Partial case-insensitive search term for the filament vendor name.",
description=(
"Partial case-insensitive search term for the filament vendor name. "
"Separate multiple terms with a comma."
),
deprecated=True,
),
vendor_id_old: Optional[int] = Query(
vendor_id_old: Optional[str] = Query(
alias="vendor_id",
default=None,
title="Vendor ID",
description="Match an exact vendor ID.",
description="Match an exact vendor ID. Separate multiple IDs with a comma.",
deprecated=True,
examples=["1", "1,2"],
),
vendor_name: Optional[str] = Query(
alias="vendor.name",
default=None,
title="Vendor Name",
description="Partial case-insensitive search term for the filament vendor name.",
description=(
"Partial case-insensitive search term for the filament vendor name. "
"Separate multiple terms with a comma."
),
),
vendor_id: Optional[int] = Query(
vendor_id: Optional[str] = Query(
alias="vendor.id",
default=None,
title="Vendor ID",
description="Match an exact vendor ID.",
description="Match an exact vendor ID. Separate multiple IDs with a comma.",
examples=["1", "1,2"],
),
name: Optional[str] = Query(
default=None,
title="Filament Name",
description="Partial case-insensitive search term for the filament name.",
description="Partial case-insensitive search term for the filament name. Separate multiple terms with a comma.",
),
material: Optional[str] = Query(
default=None,
title="Filament Material",
description="Partial case-insensitive search term for the filament material.",
description=(
"Partial case-insensitive search term for the filament material. Separate multiple terms with a comma."
),
),
article_number: Optional[str] = Query(
default=None,
title="Filament Article Number",
description="Partial case-insensitive search term for the filament article number.",
description=(
"Partial case-insensitive search term for the filament article number. "
"Separate multiple terms with a comma."
),
),
sort: Optional[str] = Query(
default=None,
@@ -181,10 +194,19 @@ async def find(
field, direction = sort_item.split(":")
sort_by[field] = SortOrder[direction.upper()]
vendor_id = vendor_id if vendor_id is not None else vendor_id_old
if vendor_id is not None:
try:
vendor_ids = [int(vendor_id_item) for vendor_id_item in vendor_id.split(",")]
except ValueError as e:
raise RequestValidationError([ErrorWrapper(ValueError("Invalid vendor_id"), ("query", "vendor_id"))]) from e
else:
vendor_ids = None
db_items, total_count = await filament.find(
db=db,
vendor_name=vendor_name if vendor_name is not None else vendor_name_old,
vendor_id=vendor_id if vendor_id is not None else vendor_id_old,
vendor_id=vendor_ids,
name=name,
material=material,
article_number=article_number,