Skip to content

Commit a4c982c

Browse files
committed
[lexical-scoping] Deprecated function let().
1 parent a05c72c commit a4c982c

File tree

5 files changed

+13
-108
lines changed

5 files changed

+13
-108
lines changed

jmespath.test

jmespath/functions.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,6 @@ def call_function(self, function_name, resolved_args, *args, **kwargs):
8585
signature = spec['signature']
8686
self._validate_arguments(resolved_args, signature, function_name)
8787

88-
# supply extra arguments only if the function expects them
89-
90-
parameters = [parameter.name for parameter in inspect.signature(function).parameters.values()]
91-
if ('kwargs' in parameters):
92-
return function(self, *resolved_args, *args, scopes = kwargs.get('scopes'))
93-
9488
return function(self, *resolved_args)
9589

9690
def _validate_arguments(self, args, signature, function_name):
@@ -540,12 +534,6 @@ def _func_max_by(self, array, expref):
540534
else:
541535
return None
542536

543-
@signature({'types': ['object']}, {'types': ['expref']})
544-
def _func_let(self, scope, expref, *args, **kwargs):
545-
if 'scopes' in kwargs:
546-
kwargs.get('scopes').pushScope(scope)
547-
return expref.visit(expref.expression, expref.context, *args, **kwargs)
548-
549537
@signature({'types': ['array'], 'variadic': True})
550538
def _func_zip(self, *arguments):
551539
return list(map(list, zip(*arguments)))

jmespath/parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,7 @@ def __init__(self, expression, parsed):
585585
self.parsed = parsed
586586

587587
def search(self, value, options=None):
588-
evaluator = visitor.ScopedInterpreter(options)
588+
evaluator = visitor.TreeInterpreter(options)
589589
return evaluator.evaluate(self.parsed, value)
590590

591591
def _render_dot_file(self):

jmespath/visitor.py

Lines changed: 11 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
from jmespath import exceptions
44
from jmespath import functions
55
from jmespath.compat import string_type
6-
from jmespath.compat import with_str_method
76
from jmespath.scope import ScopedChainDict
87
from numbers import Number
98

@@ -84,10 +83,9 @@ def __init__(self, dict_cls=None,
8483

8584

8685
class _Expression(object):
87-
def __init__(self, expression, interpreter, context):
86+
def __init__(self, expression, interpreter):
8887
self.expression = expression
8988
self.interpreter = interpreter
90-
self.context = context
9189

9290
def visit(self, node, *args, **kwargs):
9391
return self.interpreter.visit(node, *args, **kwargs)
@@ -144,11 +142,16 @@ def __init__(self, options=None):
144142
self._functions = self._options.custom_functions
145143
else:
146144
self._functions = functions.Functions()
145+
self._root = None
147146
self._scope = ScopedChainDict()
148147

149148
def default_visit(self, node, *args, **kwargs):
150149
raise NotImplementedError(node['type'])
151150

151+
def evaluate(self, ast, root):
152+
self._root = root
153+
return self.visit(ast, root)
154+
152155
def visit_subexpression(self, node, value):
153156
result = value
154157
for node in node['children']:
@@ -158,23 +161,10 @@ def visit_subexpression(self, node, value):
158161
return result
159162

160163
def visit_field(self, node, value, *args, **kwargs):
161-
identifier = node['value']
162-
scopes = kwargs.get('scopes')
163-
164164
try:
165-
result = value.get(identifier)
166-
if result == None:
167-
result = self._get_from_scopes(
168-
identifier, *args, scopes=scopes)
169-
return result
165+
return value.get(node['value'])
170166
except AttributeError:
171-
return self._get_from_scopes(
172-
identifier, *args, scopes=scopes)
173-
174-
def _get_from_scopes(self, identifier, *args, **kwargs):
175-
if 'scopes' in kwargs:
176-
return kwargs['scopes'].getValue(identifier)
177-
return None
167+
return None
178168

179169
def visit_comparator(self, node, value):
180170
# Common case: comparator is == or !=
@@ -212,13 +202,11 @@ def visit_arithmetic(self, node, value):
212202
def visit_current(self, node, value):
213203
return value
214204

215-
def visit_root(self, *args, **kwargs):
216-
if 'scopes' in kwargs:
217-
return kwargs['scopes'].getRoot()
218-
return None
205+
def visit_root(self, node, value):
206+
return self._root
219207

220208
def visit_expref(self, node, value):
221-
return _Expression(node['children'][0], self, value)
209+
return _Expression(node['children'][0], self)
222210

223211
def visit_function_expression(self, node, value, *args, **kwargs):
224212
resolved_args = []
@@ -417,48 +405,3 @@ def _visit(self, node, current):
417405
self._count += 1
418406
self._lines.append(' %s -> %s' % (current, child_name))
419407
self._visit(child, child_name)
420-
421-
422-
@with_str_method
423-
class Scopes:
424-
def __init__(self, root):
425-
self._scopes = []
426-
self._root = root
427-
428-
def pushScope(self, scope):
429-
self._scopes.append(scope)
430-
431-
def popScope(self):
432-
if len(self._scopes) > 0:
433-
self._scopes.pop()
434-
435-
def getValue(self, identifier):
436-
for scope in self._scopes[::-1]:
437-
if scope.get(identifier) != None:
438-
return scope[identifier]
439-
return None
440-
441-
def getRoot(self):
442-
return self._root
443-
444-
def __str__(self):
445-
return '{}'.format(self._scopes)
446-
447-
448-
class ScopedInterpreter(TreeInterpreter):
449-
def __init__(self, options = None):
450-
super().__init__(options)
451-
452-
def evaluate(self, ast, root_scope):
453-
self._scopes = Scopes(root_scope)
454-
return self.visit(ast, root_scope)
455-
456-
def visit(self, node, *args, **kwargs):
457-
scoped_types = ['field', 'function_expression', 'root']
458-
if (node['type'] in scoped_types):
459-
kwargs.update({'scopes': self._scopes})
460-
else:
461-
if 'scopes' in kwargs:
462-
kwargs.pop('scopes')
463-
464-
return super().visit(node, *args, **kwargs)

tests/test_scopes.py

Lines changed: 0 additions & 26 deletions
This file was deleted.

0 commit comments

Comments
 (0)