Python ast.Tuple() Examples
The following are 30
code examples of ast.Tuple().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
ast
, or try the search function
.
Example #1
Source File: setup.py From pypika with Apache License 2.0 | 8 votes |
def version(): path = 'pypika/__init__.py' with open(path, 'r') as file: t = compile(file.read(), path, 'exec', ast.PyCF_ONLY_AST) for node in (n for n in t.body if isinstance(n, ast.Assign)): if len(node.targets) == 1: name = node.targets[0] if isinstance(name, ast.Name) and \ name.id in ('__version__', '__version_info__', 'VERSION'): v = node.value if isinstance(v, ast.Str): return v.s if isinstance(v, ast.Tuple): r = [] for e in v.elts: if isinstance(e, ast.Str): r.append(e.s) elif isinstance(e, ast.Num): r.append(str(e.n)) return '.'.join(r)
Example #2
Source File: checker.py From linter-pylama with MIT License | 7 votes |
def convert_to_value(item): if isinstance(item, ast.Str): return item.s elif hasattr(ast, 'Bytes') and isinstance(item, ast.Bytes): return item.s elif isinstance(item, ast.Tuple): return tuple(convert_to_value(i) for i in item.elts) elif isinstance(item, ast.Num): return item.n elif isinstance(item, ast.Name): result = VariableKey(item=item) constants_lookup = { 'True': True, 'False': False, 'None': None, } return constants_lookup.get( result.name, result, ) elif (not PY2) and isinstance(item, ast.NameConstant): # None, True, False are nameconstants in python3, but names in 2 return item.value else: return UnhandledKeyType()
Example #3
Source File: inflect.py From pybids with MIT License | 7 votes |
def _get_value_from_ast(self, obj): """ Return the value of the ast object. """ if isinstance(obj, ast.Num): return obj.n elif isinstance(obj, ast.Str): return obj.s elif isinstance(obj, ast.List): return [self._get_value_from_ast(e) for e in obj.elts] elif isinstance(obj, ast.Tuple): return tuple([self._get_value_from_ast(e) for e in obj.elts]) # None, True and False are NameConstants in Py3.4 and above. elif sys.version_info.major >= 3 and isinstance(obj, ast.NameConstant): return obj.value # For python versions below 3.4 elif isinstance(obj, ast.Name) and (obj.id in ["True", "False", "None"]): return string_to_constant[obj.id] # Probably passed a variable name. # Or passed a single word without wrapping it in quotes as an argument # ex: p.inflect("I plural(see)") instead of p.inflect("I plural('see')") raise NameError("name '%s' is not defined" % obj.id)
Example #4
Source File: ast_translator.py From pseudo-python with MIT License | 6 votes |
def _translate_in(self, element, sequence, location): sequence_node = self._translate_node(sequence) element_node = self._translate_node(element) if not ( sequence_node['pseudo_type'] == 'String' and element_node['pseudo_type'] == 'String' or\ isinstance(sequence_node['pseudo_type'], list) and sequence_node['pseudo_type'][0] != 'Tuple' and sequence_node['pseudo_type'][1] == element_node['pseudo_type']): raise type_check_error('expected the left side of in to has the element type of the sequence, in supported for string and sequences which are not tuples', location, self.lines[location[0]], wrong_type=element_node['pseudo_type']) return { 'type': 'standard_method_call', 'receiver': sequence_node, 'message': 'contains?', 'args': [element_node], 'pseudo_type': 'Boolean' }
Example #5
Source File: _analyze.py From myhdl with GNU Lesser General Public License v2.1 | 6 votes |
def visit_Yield(self, node, *args): self.tree.hasYield += 1 n = node.value self.visit(n) senslist = [] if isinstance(n, ast.Tuple): for n in n.elts: if not isinstance(n.obj, (_Signal, _WaiterList)): self.raiseError(node, _error.UnsupportedYield) senslist.append(n.obj) elif isinstance(n.obj, (_Signal, _WaiterList, delay)): senslist = [n.obj] elif _isMem(n.obj): senslist = n.obj else: self.raiseError(node, _error.UnsupportedYield) node.senslist = senslist
Example #6
Source File: checker.py From linter-pylama with MIT License | 6 votes |
def TRY(self, node): handler_names = [] # List the exception handlers for i, handler in enumerate(node.handlers): if isinstance(handler.type, ast.Tuple): for exc_type in handler.type.elts: handler_names.append(getNodeName(exc_type)) elif handler.type: handler_names.append(getNodeName(handler.type)) if handler.type is None and i < len(node.handlers) - 1: self.report(messages.DefaultExceptNotLast, handler) # Memorize the except handlers and process the body self.exceptHandlers.append(handler_names) for child in node.body: self.handleNode(child, node) self.exceptHandlers.pop() # Process the other nodes: "except:", "else:", "finally:" self.handleChildren(node, omit='body')
Example #7
Source File: flake8_builtins.py From flake8-builtins with GNU General Public License v2.0 | 6 votes |
def check_for_loop(self, statement): stack = [statement.target] while stack: item = stack.pop() if isinstance(item, (ast.Tuple, ast.List)): stack.extend(list(item.elts)) elif isinstance(item, ast.Name) and \ item.id in BUILTINS: yield self.error(statement, variable=item.id) elif PY3 and isinstance(item, ast.Starred): if hasattr(item.value, 'id') and item.value.id in BUILTINS: yield self.error( statement, variable=item.value.id, ) elif hasattr(item.value, 'elts'): stack.extend(list(item.value.elts))
Example #8
Source File: pyupgrade.py From pyupgrade with MIT License | 6 votes |
def visit_Call(self, node: ast.Call) -> None: if ( isinstance(node.func, ast.Name) and node.func.id == 'set' and len(node.args) == 1 and not node.keywords and isinstance(node.args[0], SET_TRANSFORM) ): arg, = node.args key = _ast_to_offset(node.func) if isinstance(arg, (ast.List, ast.Tuple)) and not arg.elts: self.set_empty_literals[key] = arg else: self.sets[key] = arg elif ( isinstance(node.func, ast.Name) and node.func.id == 'dict' and len(node.args) == 1 and not node.keywords and isinstance(node.args[0], (ast.ListComp, ast.GeneratorExp)) and isinstance(node.args[0].elt, (ast.Tuple, ast.List)) and len(node.args[0].elt.elts) == 2 ): self.dicts[_ast_to_offset(node.func)] = node.args[0] self.generic_visit(node)
Example #9
Source File: verilog_behavioral.py From pymtl with BSD 3-Clause "New" or "Revised" License | 6 votes |
def visit_Assign(self, node): # NOTE: this should really be caught earlier if len(node.targets) != 1 or isinstance(node.targets[0], (ast.Tuple)): raise VerilogTranslationError( 'Assignments can only have one item on the left-hand side!\n' 'Please modify "x,y = ..." to be two separate lines.', node.lineno ) lhs = self.visit( node.targets[0] ) rhs = self.visit( node.value ) assign = '=' if node._is_blocking else '<=' indent = self.indent return '{indent}{lhs} {assign} {rhs};\n'.format(**vars()) #----------------------------------------------------------------------- # visit_Tuple #----------------------------------------------------------------------- #def visit_Tuple(self, node): #----------------------------------------------------------------------- # visit_AugAssign #-----------------------------------------------------------------------
Example #10
Source File: pyupgrade.py From pyupgrade with MIT License | 6 votes |
def visit_Try(self, node: ast.Try) -> None: for handler in node.handlers: htype = handler.type if self._is_os_error_alias(htype): assert isinstance(htype, (ast.Name, ast.Attribute)) self.os_error_alias_simple[_ast_to_offset(htype)] = htype elif ( isinstance(htype, ast.Tuple) and any( self._is_os_error_alias(elt) for elt in htype.elts ) ): self.os_error_alias_excepts.add(_ast_to_offset(htype)) self.generic_visit(node)
Example #11
Source File: dead.py From dead with MIT License | 6 votes |
def _filenames( files_re: Pattern[str], exclude_re: Pattern[str], tests_re: Pattern[str], ) -> Generator[Tuple[str, bool], None, None]: # TODO: zsplit is more correct than splitlines out = subprocess.check_output(('git', 'ls-files')).decode() for filename in out.splitlines(): if ( not files_re.search(filename) or exclude_re.search(filename) or not os.path.exists(filename) or 'python' not in tags_from_path(filename) ): continue yield filename, bool(tests_re.search(filename))
Example #12
Source File: scan.py From unimport with MIT License | 6 votes |
def visit_Try(self, node): def any_import_error(items): for item in items: if isinstance(item, ast.Name) and item.id in { "ModuleNotFoundError", "ImportError", }: return True elif isinstance(item, ast.Tuple) and any_import_error( item.elts ): return True else: return False self.any_import_error = any_import_error( handle.type for handle in node.handlers ) self.generic_visit(node) self.any_import_error = False
Example #13
Source File: dead.py From dead with MIT License | 6 votes |
def visit_comment(self, lineno: int, line: str) -> None: if DISABLE_COMMENT_RE.search(line): self.disabled.add(self._file_line(self.filename, lineno)) if not TYPE_COMMENT_RE.match(line) or TYPE_IGNORE_RE.match(line): return line = line.split(':', 1)[1].strip() func_match = TYPE_FUNC_RE.match(line) if not func_match: parts: Tuple[str, ...] = (line,) else: parts = ( func_match.group(1).replace('*', ''), func_match.group(2).strip(), ) for part in parts: ast_obj = ast.parse(part, f'<{self.filename}:{lineno}: comment>') # adjust the line number to be that of the comment for descendant in ast.walk(ast_obj): if 'lineno' in descendant._attributes: descendant.lineno = lineno self.visit(ast_obj)
Example #14
Source File: ast.py From kale with Apache License 2.0 | 6 votes |
def get_list_tuple_names(node): """Get all names of a tuple or list. Recursive method. Args: node: a ast.Tuple or ast.List node Returns: a list of all names of the tuple """ assert isinstance(node, (ast.Tuple, ast.List)) names = list() for _n in node.elts: if isinstance(_n, (ast.Tuple, ast.List)): # recursive call names.extend(get_list_tuple_names(_n)) elif isinstance(_n, (ast.Name,)): names.append(_n.id) return names
Example #15
Source File: dead.py From dead with MIT License | 6 votes |
def visit_Assign(self, node: ast.Assign) -> None: for target in node.targets: if isinstance(target, ast.Name): self.define(target.id, node) if ( len(node.targets) == 1 and isinstance(node.targets[0], ast.Name) and node.targets[0].id == '__all__' and isinstance(node.value, (ast.Tuple, ast.List)) ): for elt in node.value.elts: if isinstance(elt, ast.Str): self.read(elt.s, elt) self.generic_visit(node) # TODO: AnnAssign
Example #16
Source File: pyupgrade.py From pyupgrade with MIT License | 6 votes |
def _compare_to_3( test: ast.Compare, op: Union[Type[ast.cmpop], Tuple[Type[ast.cmpop], ...]], ) -> bool: if not ( isinstance(test.ops[0], op) and isinstance(test.comparators[0], ast.Tuple) and len(test.comparators[0].elts) >= 1 and all(isinstance(n, ast.Num) for n in test.comparators[0].elts) ): return False # checked above but mypy needs help elts = cast('List[ast.Num]', test.comparators[0].elts) return elts[0].n == 3 and all(n.n == 0 for n in elts[1:])
Example #17
Source File: django_xss.py From bandit with Apache License 2.0 | 6 votes |
def transform2call(var): if isinstance(var, ast.BinOp): is_mod = isinstance(var.op, ast.Mod) is_left_str = isinstance(var.left, ast.Str) if is_mod and is_left_str: new_call = ast.Call() new_call.args = [] new_call.args = [] if six.PY2: new_call.starargs = None new_call.keywords = None if six.PY2: new_call.kwargs = None new_call.lineno = var.lineno new_call.func = ast.Attribute() new_call.func.value = var.left new_call.func.attr = 'format' if isinstance(var.right, ast.Tuple): new_call.args = var.right.elts elif six.PY2 and isinstance(var.right, ast.Dict): new_call.kwargs = var.right else: new_call.args = [var.right] return new_call
Example #18
Source File: percent_transformer.py From flynt with MIT License | 6 votes |
def transform_generic(node): """Convert a `BinOp` `%` formatted str with a unknown name on the `node.right` to an f-string. When `node.right` is a Name since we don't know if it's a single var or a dict so we sniff the string. Sniffs the left string for Dict style usage e.g. `"val: %(key_name1)s val2: %(key_name2)s" % some_dict` else (e.g. `"val: %s" % some_var`): Borrow the core logic by injecting the name into a ast.Tuple Returns ast.JoinedStr (f-string), bool: str-in-str """ has_dict_str_format = DICT_PATTERN.findall(node.left.s) if has_dict_str_format: return transform_dict(node), True # if it's just a name then pretend it's tuple to use that code node.right = ast.Tuple(elts=[node.right]) return transform_tuple(node), False
Example #19
Source File: rewrite.py From pytest with MIT License | 5 votes |
def _rewrite_test(fn: Path, config: Config) -> Tuple[os.stat_result, types.CodeType]: """read and rewrite *fn* and return the code object.""" fn_ = fspath(fn) stat = os.stat(fn_) with open(fn_, "rb") as f: source = f.read() tree = ast.parse(source, filename=fn_) rewrite_asserts(tree, source, fn_, config) co = compile(tree, fn_, "exec", dont_inherit=True) return stat, co
Example #20
Source File: helper.py From YAPyPy with MIT License | 5 votes |
def atom_rewrite(loc, name, token, value, number, strs, namedc, ellipsis, dict, is_dict, is_gen, is_list, comp, yield_expr): if name: if not token: return ast.Name(name.value, ast.Load(), **loc @ name) return ex_ast.AssignExpr( ast.Name(name.value, ast.Store(), **loc @ name), value=value, **loc @ token) if number: return ast.Num(eval(number.value), **loc @ number) if strs: return str_maker(*strs) if ellipsis: return ast.Ellipsis() if namedc: return ast.NameConstant(eval(namedc.value), **loc @ namedc) if is_dict: return dict or ex_ast.ExDict([], [], ast.Load(), **loc @ is_dict) if is_gen: if yield_expr: return yield_expr return comp(is_tuple=True) if comp else ast.Tuple([], ast.Load(), **loc @ is_gen) if is_list: return comp(is_list=True) if comp else ast.List([], ast.Load(), **loc @ is_list) raise TypeError
Example #21
Source File: rewrite.py From pytest with MIT License | 5 votes |
def visit_Compare(self, comp: ast.Compare) -> Tuple[ast.expr, str]: self.push_format_context() left_res, left_expl = self.visit(comp.left) if isinstance(comp.left, (ast.Compare, ast.BoolOp)): left_expl = "({})".format(left_expl) res_variables = [self.variable() for i in range(len(comp.ops))] load_names = [ast.Name(v, ast.Load()) for v in res_variables] store_names = [ast.Name(v, ast.Store()) for v in res_variables] it = zip(range(len(comp.ops)), comp.ops, comp.comparators) expls = [] syms = [] results = [left_res] for i, op, next_operand in it: next_res, next_expl = self.visit(next_operand) if isinstance(next_operand, (ast.Compare, ast.BoolOp)): next_expl = "({})".format(next_expl) results.append(next_res) sym = BINOP_MAP[op.__class__] syms.append(ast.Str(sym)) expl = "{} {} {}".format(left_expl, sym, next_expl) expls.append(ast.Str(expl)) res_expr = ast.Compare(left_res, [op], [next_res]) self.statements.append(ast.Assign([store_names[i]], res_expr)) left_res, left_expl = next_res, next_expl # Use pytest.assertion.util._reprcompare if that's available. expl_call = self.helper( "_call_reprcompare", ast.Tuple(syms, ast.Load()), ast.Tuple(load_names, ast.Load()), ast.Tuple(expls, ast.Load()), ast.Tuple(results, ast.Load()), ) if len(comp.ops) > 1: res = ast.BoolOp(ast.And(), load_names) # type: ast.expr else: res = load_names[0] return res, self.explanation_param(self.pop_format_context(expl_call))
Example #22
Source File: utils.py From pyungo with MIT License | 5 votes |
def get_function_return_names(fct): """ Return variable name(s) or return statement of the given function """ lines = inspect.getsourcelines(fct) outputs = None for line in lines[0][::-1]: stripped = line.strip() if "def" in stripped: # NOTE: This work as def is a reserved keyword which will trigger # invalid syntax if misused msg = "No return statement found in {}" raise PyungoError(msg.format(fct.__name__)) ast_tree = ast.parse(stripped) for ast_node in ast.walk(ast_tree): if isinstance(ast_node, ast.Return): if isinstance(ast_node.value, ast.Name): outputs = [ast_node.value.id] elif isinstance(ast_node.value, ast.Tuple): outputs = [ elt.id for elt in ast_node.value.elts if isinstance(elt, ast.Name) ] else: name = ast_node.value.__class__.__name__ msg = ( "Variable name or Tuple of variable names are " "expected, got {}".format(name) ) raise PyungoError(msg) break if outputs: break return outputs
Example #23
Source File: parser.py From training_results_v0.6 with Apache License 2.0 | 5 votes |
def visit_Index(self, node): if isinstance(node.value, ast.Tuple): return [self.visit(i) for i in node.value.elts] return [self.visit(node.value)]
Example #24
Source File: scan.py From unimport with MIT License | 5 votes |
def visit_Assign(self, node): if getattr(node.targets[0], "id", None) == "__all__" and isinstance( node.value, (ast.List, ast.Tuple, ast.Set) ): for item in node.value.elts: if isinstance(item, ast.Str): self.names.append({"lineno": node.lineno, "name": item.s})
Example #25
Source File: rewrite.py From pytest with MIT License | 5 votes |
def visit_Name(self, name: ast.Name) -> Tuple[ast.Name, str]: # Display the repr of the name if it's a local variable or # _should_repr_global_name() thinks it's acceptable. locs = ast.Call(self.builtin("locals"), [], []) inlocs = ast.Compare(ast.Str(name.id), [ast.In()], [locs]) dorepr = self.helper("_should_repr_global_name", name) test = ast.BoolOp(ast.Or(), [inlocs, dorepr]) expr = ast.IfExp(test, self.display(name), ast.Str(name.id)) return name, self.explanation_param(expr)
Example #26
Source File: rewrite.py From pytest with MIT License | 5 votes |
def visit_BoolOp(self, boolop: ast.BoolOp) -> Tuple[ast.Name, str]: res_var = self.variable() expl_list = self.assign(ast.List([], ast.Load())) app = ast.Attribute(expl_list, "append", ast.Load()) is_or = int(isinstance(boolop.op, ast.Or)) body = save = self.statements fail_save = self.expl_stmts levels = len(boolop.values) - 1 self.push_format_context() # Process each operand, short-circuiting if needed. for i, v in enumerate(boolop.values): if i: fail_inner = [] # type: List[ast.stmt] # cond is set in a prior loop iteration below self.expl_stmts.append(ast.If(cond, fail_inner, [])) # noqa self.expl_stmts = fail_inner self.push_format_context() res, expl = self.visit(v) body.append(ast.Assign([ast.Name(res_var, ast.Store())], res)) expl_format = self.pop_format_context(ast.Str(expl)) call = ast.Call(app, [expl_format], []) self.expl_stmts.append(ast.Expr(call)) if i < levels: cond = res # type: ast.expr if is_or: cond = ast.UnaryOp(ast.Not(), cond) inner = [] # type: List[ast.stmt] self.statements.append(ast.If(cond, inner, [])) self.statements = body = inner self.statements = save self.expl_stmts = fail_save expl_template = self.helper("_format_boolop", expl_list, ast.Num(is_or)) expl = self.pop_format_context(expl_template) return ast.Name(res_var, ast.Load()), self.explanation_param(expl)
Example #27
Source File: rewrite.py From pytest with MIT License | 5 votes |
def visit_UnaryOp(self, unary: ast.UnaryOp) -> Tuple[ast.Name, str]: pattern = UNARY_MAP[unary.op.__class__] operand_res, operand_expl = self.visit(unary.operand) res = self.assign(ast.UnaryOp(unary.op, operand_res)) return res, pattern % (operand_expl,)
Example #28
Source File: rewrite.py From pytest with MIT License | 5 votes |
def visit_Call(self, call: ast.Call) -> Tuple[ast.Name, str]: """ visit `ast.Call` nodes """ new_func, func_expl = self.visit(call.func) arg_expls = [] new_args = [] new_kwargs = [] for arg in call.args: res, expl = self.visit(arg) arg_expls.append(expl) new_args.append(res) for keyword in call.keywords: res, expl = self.visit(keyword.value) new_kwargs.append(ast.keyword(keyword.arg, res)) if keyword.arg: arg_expls.append(keyword.arg + "=" + expl) else: # **args have `arg` keywords with an .arg of None arg_expls.append("**" + expl) expl = "{}({})".format(func_expl, ", ".join(arg_expls)) new_call = ast.Call(new_func, new_args, new_kwargs) res = self.assign(new_call) res_expl = self.explanation_param(self.display(res)) outer_expl = "{}\n{{{} = {}\n}}".format(res_expl, res_expl, expl) return res, outer_expl
Example #29
Source File: rewrite.py From pytest with MIT License | 5 votes |
def visit_Starred(self, starred: ast.Starred) -> Tuple[ast.Starred, str]: # From Python 3.5, a Starred node can appear in a function call res, expl = self.visit(starred.value) new_starred = ast.Starred(res, starred.ctx) return new_starred, "*" + expl
Example #30
Source File: rewrite.py From pytest with MIT License | 5 votes |
def generic_visit(self, node: ast.AST) -> Tuple[ast.Name, str]: """Handle expressions we don't have custom code for.""" assert isinstance(node, ast.expr) res = self.assign(node) return res, self.explanation_param(self.display(res))