Skip to content

Commit c30f631

Browse files
authored
Improve jmespath (#14176)
1 parent 38ec953 commit c30f631

File tree

5 files changed

+80
-39
lines changed

5 files changed

+80
-39
lines changed

stubs/jmespath/jmespath/__init__.pyi

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
from typing import Any
1+
from typing import Any, Final
22

33
from jmespath import parser as parser
44
from jmespath.visitor import Options as Options
55

6+
__version__: Final[str]
7+
68
def compile(expression: str) -> parser.ParsedResult: ...
79
def search(expression: str, data: Any, options: Options | None = None) -> Any: ...

stubs/jmespath/jmespath/ast.pyi

Lines changed: 55 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,55 @@
1-
def comparator(name, first, second): ...
2-
def current_node(): ...
3-
def expref(expression): ...
4-
def function_expression(name, args): ...
5-
def field(name): ...
6-
def filter_projection(left, right, comparator): ...
7-
def flatten(node): ...
8-
def identity(): ...
9-
def index(index): ...
10-
def index_expression(children): ...
11-
def key_val_pair(key_name, node): ...
12-
def literal(literal_value): ...
13-
def multi_select_dict(nodes): ...
14-
def multi_select_list(nodes): ...
15-
def or_expression(left, right): ...
16-
def and_expression(left, right): ...
17-
def not_expression(expr): ...
18-
def pipe(left, right): ...
19-
def projection(left, right): ...
20-
def subexpression(children): ...
21-
def slice(start, end, step): ...
22-
def value_projection(left, right): ...
1+
from typing import Literal, TypedDict
2+
from typing_extensions import NotRequired, TypeAlias
3+
4+
_NodeType: TypeAlias = Literal[
5+
"comparator",
6+
"current",
7+
"expref",
8+
"function_expression",
9+
"field",
10+
"filter_projection",
11+
"flatten",
12+
"identity",
13+
"index",
14+
"index_expression",
15+
"key_val_pair",
16+
"literal",
17+
"multi_select_dict",
18+
"multi_select_list",
19+
"or_expression",
20+
"and_expression",
21+
"not_expression",
22+
"pipe",
23+
"projection",
24+
"subexpression",
25+
"slice",
26+
"value_projection",
27+
]
28+
29+
class _ASTNode(TypedDict):
30+
type: _NodeType
31+
children: list[_ASTNode]
32+
value: NotRequired[str]
33+
34+
def comparator(name: str, first: _ASTNode, second: _ASTNode) -> _ASTNode: ...
35+
def current_node() -> _ASTNode: ...
36+
def expref(expression: _ASTNode) -> _ASTNode: ...
37+
def function_expression(name: str, args: list[_ASTNode]) -> _ASTNode: ...
38+
def field(name: str) -> _ASTNode: ...
39+
def filter_projection(left: _ASTNode, right: _ASTNode, comparator: _ASTNode) -> _ASTNode: ...
40+
def flatten(node: _ASTNode) -> _ASTNode: ...
41+
def identity() -> _ASTNode: ...
42+
def index(index: str) -> _ASTNode: ...
43+
def index_expression(children: list[_ASTNode]) -> _ASTNode: ...
44+
def key_val_pair(key_name: str, node: _ASTNode) -> _ASTNode: ...
45+
def literal(literal_value: str) -> _ASTNode: ...
46+
def multi_select_dict(nodes: list[_ASTNode]) -> _ASTNode: ...
47+
def multi_select_list(nodes: list[_ASTNode]) -> _ASTNode: ...
48+
def or_expression(left: _ASTNode, right: _ASTNode) -> _ASTNode: ...
49+
def and_expression(left: _ASTNode, right: _ASTNode) -> _ASTNode: ...
50+
def not_expression(expr: _ASTNode) -> _ASTNode: ...
51+
def pipe(left: _ASTNode, right: _ASTNode) -> _ASTNode: ...
52+
def projection(left: _ASTNode, right: _ASTNode) -> _ASTNode: ...
53+
def subexpression(children: list[_ASTNode]) -> _ASTNode: ...
54+
def slice(start: _ASTNode, end: _ASTNode, step: _ASTNode) -> _ASTNode: ...
55+
def value_projection(left, right) -> _ASTNode: ...

stubs/jmespath/jmespath/compat.pyi

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
from _typeshed import Incomplete
21
from collections.abc import Generator
32
from itertools import zip_longest as zip_longest
3+
from types import FunctionType
4+
from typing import TypeVar
5+
6+
_T = TypeVar("_T")
47

58
text_type = str
69
string_type = str
710

8-
def with_str_method(cls): ...
9-
def with_repr_method(cls): ...
10-
def get_methods(cls) -> Generator[Incomplete, None, None]: ...
11+
def with_str_method(cls: _T) -> _T: ...
12+
def with_repr_method(cls: _T) -> _T: ...
13+
def get_methods(cls: object) -> Generator[tuple[str, FunctionType]]: ...

stubs/jmespath/jmespath/functions.pyi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ _F = TypeVar("_F", bound=Callable[..., Any])
1414
def signature(*arguments: _Signature) -> Callable[[_F], _F]: ...
1515

1616
class FunctionRegistry(type):
17-
def __init__(cls, name, bases, attrs) -> None: ...
17+
def __init__(cls, name: str, bases: tuple[type, ...], attrs: dict[str, Any]) -> None: ...
1818

1919
class Functions(metaclass=FunctionRegistry):
2020
FUNCTION_TABLE: Any

stubs/jmespath/jmespath/visitor.pyi

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
from _typeshed import Unused
12
from collections.abc import Callable, MutableMapping
2-
from typing import Any, ClassVar, NoReturn, TypedDict
3+
from typing import Any, ClassVar, NoReturn, TypedDict, TypeVar
34

45
from jmespath.functions import Functions
56

7+
_T = TypeVar("_T")
8+
69
class Options:
710
dict_cls: Callable[[], MutableMapping[Any, Any]] | None
811
custom_functions: Functions | None
@@ -19,7 +22,7 @@ class _Expression:
1922
class Visitor:
2023
def __init__(self) -> None: ...
2124
def visit(self, node: _TreeNode, *args, **kwargs) -> Any: ...
22-
def default_visit(self, node: _TreeNode, *args, **kwargs) -> NoReturn: ...
25+
def default_visit(self, node: _TreeNode, *args: Unused, **kwargs: Unused) -> NoReturn: ...
2326

2427
class _TreeNode(TypedDict):
2528
type: str
@@ -30,29 +33,29 @@ class TreeInterpreter(Visitor):
3033
COMPARATOR_FUNC: ClassVar[dict[str, Callable[[Any, Any], Any]]]
3134
MAP_TYPE: ClassVar[Callable[[], MutableMapping[Any, Any]]]
3235
def __init__(self, options: Options | None = None) -> None: ...
33-
def default_visit(self, node: _TreeNode, *args, **kwargs) -> NoReturn: ...
36+
def default_visit(self, node: _TreeNode, *args: Unused, **kwargs: Unused) -> NoReturn: ...
3437
def visit_subexpression(self, node: _TreeNode, value: Any) -> Any: ...
3538
def visit_field(self, node: _TreeNode, value: Any) -> Any: ...
3639
def visit_comparator(self, node: _TreeNode, value: Any) -> Any: ...
37-
def visit_current(self, node: _TreeNode, value: Any) -> Any: ...
38-
def visit_expref(self, node: _TreeNode, value: Any) -> Any: ...
40+
def visit_current(self, node: _TreeNode, value: _T) -> _T: ...
41+
def visit_expref(self, node: _TreeNode, value: Any) -> _Expression: ...
3942
def visit_function_expression(self, node: _TreeNode, value: Any) -> Any: ...
40-
def visit_filter_projection(self, node: _TreeNode, value: Any) -> Any: ...
43+
def visit_filter_projection(self, node: _TreeNode, value: Any) -> list[Any] | None: ...
4144
def visit_flatten(self, node: _TreeNode, value: Any) -> Any: ...
42-
def visit_identity(self, node: _TreeNode, value: Any) -> Any: ...
45+
def visit_identity(self, node: _TreeNode, value: _T) -> _T: ...
4346
def visit_index(self, node: _TreeNode, value: Any) -> Any: ...
4447
def visit_index_expression(self, node: _TreeNode, value: Any) -> Any: ...
4548
def visit_slice(self, node: _TreeNode, value: Any) -> Any: ...
4649
def visit_key_val_pair(self, node: _TreeNode, value: Any) -> Any: ...
4750
def visit_literal(self, node: _TreeNode, value: Any) -> Any: ...
4851
def visit_multi_select_dict(self, node: _TreeNode, value: Any) -> Any: ...
49-
def visit_multi_select_list(self, node: _TreeNode, value: Any) -> Any: ...
52+
def visit_multi_select_list(self, node: _TreeNode, value: Any) -> list[Any] | None: ...
5053
def visit_or_expression(self, node: _TreeNode, value: Any) -> Any: ...
5154
def visit_and_expression(self, node: _TreeNode, value: Any) -> Any: ...
52-
def visit_not_expression(self, node: _TreeNode, value: Any) -> Any: ...
55+
def visit_not_expression(self, node: _TreeNode, value: Any) -> bool: ...
5356
def visit_pipe(self, node: _TreeNode, value: Any) -> Any: ...
54-
def visit_projection(self, node: _TreeNode, value: Any) -> Any: ...
55-
def visit_value_projection(self, node: _TreeNode, value: Any) -> Any: ...
57+
def visit_projection(self, node: _TreeNode, value: Any) -> list[Any] | None: ...
58+
def visit_value_projection(self, node: _TreeNode, value: Any) -> list[Any] | None: ...
5659

5760
class GraphvizVisitor(Visitor):
5861
def __init__(self) -> None: ...

0 commit comments

Comments
 (0)