MCPcopy Index your code
hub / github.com/pyload/pyload / interpret_expression

Method interpret_expression

module/plugins/hoster/YoutubeCom.py:892–1033  ·  view source on GitHub ↗
(self, expr, local_vars, allow_recursion)

Source from the content-addressed store, hash-verified

890 return v, should_abort
891
892 def interpret_expression(self, expr, local_vars, allow_recursion):
893 expr = expr.strip()
894
895 if expr == '': # Empty expression
896 return None
897
898 if expr.startswith('('):
899 parens_count = 0
900 for m in re.finditer(r'[()]', expr):
901 if m.group(0) == '(':
902 parens_count += 1
903 else:
904 parens_count -= 1
905 if parens_count == 0:
906 sub_expr = expr[1:m.start()]
907 sub_result = self.interpret_expression(sub_expr, local_vars, allow_recursion)
908 remaining_expr = expr[m.end():].strip()
909 if not remaining_expr:
910 return sub_result
911 else:
912 expr = json.dumps(sub_result) + remaining_expr
913 break
914 else:
915 raise JSInterpreterError('Premature end of parens in %r' % expr)
916
917 for op, opfunc in self._ASSIGN_OPERATORS:
918 m = re.match(r'(?x)(?P<out>%s)(?:\[(?P<index>[^\]]+?)\])?\s*%s(?P<expr>.*)$' %
919 (self._VARNAME_PATTERN, re.escape(op)), expr)
920 if m is None:
921 continue
922 right_val = self.interpret_expression(m.group('expr'), local_vars, allow_recursion - 1)
923
924 if m.groupdict().get('index'):
925 lvar = local_vars[m.group('out')]
926 idx = self.interpret_expression(m.group('index'), local_vars, allow_recursion)
927 assert isinstance(idx, int)
928 cur = lvar[idx]
929 val = opfunc(cur, right_val)
930 lvar[idx] = val
931 return val
932 else:
933 cur = local_vars.get(m.group('out'))
934 val = opfunc(cur, right_val)
935 local_vars[m.group('out')] = val
936 return val
937
938 if expr.isdigit():
939 return int(expr)
940
941 var_m = re.match(r'(?!if|return|true|false)(?P<name>%s)$' % self._VARNAME_PATTERN, expr)
942 if var_m:
943 return local_vars[var_m.group('name')]
944
945 try:
946 return json.loads(expr)
947 except ValueError:
948 pass
949

Callers 1

interpret_statementMethod · 0.95

Calls 12

extract_objectMethod · 0.95
interpret_statementMethod · 0.95
extract_functionMethod · 0.95
JSInterpreterErrorClass · 0.85
escapeMethod · 0.80
splitMethod · 0.80
joinMethod · 0.80
popMethod · 0.80
startMethod · 0.45
matchMethod · 0.45
getMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected