Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 38 additions & 1 deletion docarray/index/backends/helper.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Any, Dict, List, Tuple, Type, cast
from typing import Any, Dict, List, Tuple, Type, cast, Set

from docarray import BaseDoc, DocList
from docarray.index.abstract import BaseDocIndex
Expand All @@ -20,6 +20,43 @@ def inner(self, *args, **kwargs):
return inner


def _collect_query_required_args(method_name: str, required_args: Set[str] = None):
"""
Returns a function that ensures required keyword arguments are provided.

:param method_name: The name of the method for which the required arguments are being checked.
:type method_name: str
:param required_args: A set containing the names of required keyword arguments. Defaults to None.
:type required_args: Optional[Set[str]]
:return: A function that checks for required keyword arguments before executing the specified method.
Raises ValueError if positional arguments are provided.
Raises TypeError if any required keyword argument is missing.
:rtype: Callable
"""

if required_args is None:
required_args = set()

def inner(self, *args, **kwargs):
if args:
raise ValueError(
f"Positional arguments are not supported for "
f"`{type(self)}.{method_name}`. "
f"Use keyword arguments instead."
)

missing_args = required_args - set(kwargs.keys())
if missing_args:
raise ValueError(
f"`{type(self)}.{method_name}` is missing required argument(s): {', '.join(missing_args)}"
)

updated_query = self._queries + [(method_name, kwargs)]
return type(self)(updated_query)

return inner


def _execute_find_and_filter_query(
doc_index: BaseDocIndex, query: List[Tuple[str, Dict]], reverse_order: bool = False
) -> FindResult:
Expand Down
Loading