1
- from typing import Any , Dict , List , Tuple , Type , cast
1
+ from typing import Any , Dict , List , Tuple , Type , cast , Set
2
2
3
3
from docarray import BaseDoc , DocList
4
4
from docarray .index .abstract import BaseDocIndex
@@ -20,6 +20,43 @@ def inner(self, *args, **kwargs):
20
20
return inner
21
21
22
22
23
+ def _collect_query_required_args (method_name : str , required_args : Set [str ] = None ):
24
+ """
25
+ Returns a function that ensures required keyword arguments are provided.
26
+
27
+ :param method_name: The name of the method for which the required arguments are being checked.
28
+ :type method_name: str
29
+ :param required_args: A set containing the names of required keyword arguments. Defaults to None.
30
+ :type required_args: Optional[Set[str]]
31
+ :return: A function that checks for required keyword arguments before executing the specified method.
32
+ Raises ValueError if positional arguments are provided.
33
+ Raises TypeError if any required keyword argument is missing.
34
+ :rtype: Callable
35
+ """
36
+
37
+ if required_args is None :
38
+ required_args = set ()
39
+
40
+ def inner (self , * args , ** kwargs ):
41
+ if args :
42
+ raise ValueError (
43
+ f"Positional arguments are not supported for "
44
+ f"`{ type (self )} .{ method_name } `. "
45
+ f"Use keyword arguments instead."
46
+ )
47
+
48
+ missing_args = required_args - set (kwargs .keys ())
49
+ if missing_args :
50
+ raise ValueError (
51
+ f"`{ type (self )} .{ method_name } ` is missing required argument(s): { ', ' .join (missing_args )} "
52
+ )
53
+
54
+ updated_query = self ._queries + [(method_name , kwargs )]
55
+ return type (self )(updated_query )
56
+
57
+ return inner
58
+
59
+
23
60
def _execute_find_and_filter_query (
24
61
doc_index : BaseDocIndex , query : List [Tuple [str , Dict ]], reverse_order : bool = False
25
62
) -> FindResult :
0 commit comments