Python ast.FormattedValue() Examples
The following are 18
code examples of ast.FormattedValue().
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: format_call_transforms.py From flynt with MIT License | 6 votes |
def ast_formatted_value( val, fmt_str: str = None, conversion=None ) -> ast.FormattedValue: if astor.to_source(val)[0] == "{": raise FlyntException( "values starting with '{' are better left not transformed." ) if fmt_str: format_spec = ast.JoinedStr([ast_string_node(fmt_str.replace(":", ""))]) else: format_spec = None if conversion is None: conversion = -1 else: conversion = ord(conversion.replace("!", "")) return ast.FormattedValue(value=val, conversion=conversion, format_spec=format_spec)
Example #2
Source File: transformer.py From flynt with MIT License | 6 votes |
def ast_formatted_value( val, fmt_str: str = None, conversion=None ) -> ast.FormattedValue: if isinstance(val, ast.FormattedValue): return val if astor.to_source(val)[0] == "{": raise FlyntException( "values starting with '{' are better left not transformed." ) if fmt_str: format_spec = ast.JoinedStr([ast_string_node(fmt_str.replace(":", ""))]) else: format_spec = None if conversion is None: conversion = -1 else: conversion = ord(conversion.replace("!", "")) return ast.FormattedValue(value=val, conversion=conversion, format_spec=format_spec)
Example #3
Source File: source_visitor.py From vermin with MIT License | 6 votes |
def visit_JoinedStr(self, node): self.__fstrings = True self.__vvprint("f-strings require 3.6+") if hasattr(node, "values"): total = len(node.values) for i in range(total): val = node.values[i] # A self-referencing f-string will be at the end of the Constant, like "..stuff..expr=", and # the next value will be a FormattedValue(value=..) with Names or nested Calls with Names # inside, for instance. if isinstance(val, ast.Constant) and hasattr(val, "value") and \ isinstance(val.value, str) and val.value.strip().endswith("=") and i + 1 < total: next_val = node.values[i + 1] if isinstance(next_val, ast.FormattedValue): fstring_value =\ self.__trim_fstring_value(self.__extract_fstring_value(next_val.value)) if len(fstring_value) > 0 and\ self.__trim_fstring_value(val.value).endswith(fstring_value + "="): self.__fstrings_self_doc = True self.__vvprint("self-documenting fstrings require 3.8+") break self.generic_visit(node) # Mark variable names as aliases.
Example #4
Source File: annotate.py From pasta with Apache License 2.0 | 6 votes |
def visit_JoinedStr(self, node): """Annotate a JoinedStr node with the fstr formatting metadata.""" fstr_iter = self.tokens.fstr()() res = '' values = (v for v in node.values if isinstance(v, ast.FormattedValue)) while True: res_part, tg = next(fstr_iter) res += res_part if tg is None: break prev_tokens = self.tokens self.tokens = tg self.visit(next(values)) self.tokens = prev_tokens self.attr(node, 'content', [lambda: res], default=res)
Example #5
Source File: dialect.py From idom with MIT License | 6 votes |
def _transform_string(self, node: ast.JoinedStr) -> ast.Call: htm_strings: List[str] = [] exp_nodes: List[ast.AST] = [] for inner_node in node.values: if isinstance(inner_node, ast.Str): htm_strings.append(inner_node.s) elif isinstance(inner_node, ast.FormattedValue): if len(htm_strings) == len(exp_nodes): htm_strings.append("") if inner_node.conversion != -1 or inner_node.format_spec: exp_nodes.append(ast.JoinedStr([inner_node])) else: exp_nodes.append(inner_node.value) call_stack = _HtmlCallStack() for op_type, *data in htm.htm_parse(htm_strings): getattr(self, f"_transform_htm_{op_type.lower()}")( exp_nodes, call_stack, *data ) return call_stack.finish()
Example #6
Source File: compiler.py From Transcrypt with Apache License 2.0 | 5 votes |
def visit_JoinedStr (self, node): self.emit (repr (''.join ([value.s if type (value) == ast.Str else '{{}}' for value in node.values]))) self.emit ('.format (') index = 0 for value in node.values: if type (value) == ast.FormattedValue: self.emitComma (index) self.visit (value) index += 1 self.emit (')')
Example #7
Source File: test_fstring.py From android_universal with MIT License | 5 votes |
def test_ast_line_numbers(self): expr = """ a = 10 f'{a * x()}'""" t = ast.parse(expr) self.assertEqual(type(t), ast.Module) self.assertEqual(len(t.body), 2) # check `a = 10` self.assertEqual(type(t.body[0]), ast.Assign) self.assertEqual(t.body[0].lineno, 2) # check `f'...'` self.assertEqual(type(t.body[1]), ast.Expr) self.assertEqual(type(t.body[1].value), ast.JoinedStr) self.assertEqual(len(t.body[1].value.values), 1) self.assertEqual(type(t.body[1].value.values[0]), ast.FormattedValue) self.assertEqual(t.body[1].lineno, 3) self.assertEqual(t.body[1].value.lineno, 3) self.assertEqual(t.body[1].value.values[0].lineno, 3) # check the binop location binop = t.body[1].value.values[0].value self.assertEqual(type(binop), ast.BinOp) self.assertEqual(type(binop.left), ast.Name) self.assertEqual(type(binop.op), ast.Mult) self.assertEqual(type(binop.right), ast.Call) self.assertEqual(binop.lineno, 3) self.assertEqual(binop.left.lineno, 3) self.assertEqual(binop.right.lineno, 3) self.assertEqual(binop.col_offset, 3) self.assertEqual(binop.left.col_offset, 3) self.assertEqual(binop.right.col_offset, 7)
Example #8
Source File: fstring_utils.py From pasta with Apache License 2.0 | 5 votes |
def placeholder(val_index): """Get the placeholder token for a FormattedValue in an fstring.""" return _FSTRING_VAL_PLACEHOLDER.format(index=val_index)
Example #9
Source File: fstring_utils.py From pasta with Apache License 2.0 | 5 votes |
def get_formatted_values(joined_str): """Get all FormattedValues from a JoinedStr, in order.""" return [v for v in joined_str.values if isinstance(v, ast.FormattedValue)]
Example #10
Source File: annotate.py From pasta with Apache License 2.0 | 5 votes |
def fstring_expression(f): """Decorates a function where the node is a FormattedValue in an fstring.""" return _gen_wrapper(f, scope=False)
Example #11
Source File: definitions.py From vkbottle with MIT License | 5 votes |
def formatted_value(d: ast.FormattedValue): return find(d.value)
Example #12
Source File: test_no_fstrings.py From pheweb with GNU Affero General Public License v3.0 | 5 votes |
def test_no_fstrings(): from pathlib import Path import ast py_paths = list((Path().absolute().parent / 'kpa').rglob('*.py')) for py_path in py_paths: parsed = ast.parse(py_path.read_text()) for node in ast.walk(parsed): assert not isinstance(node, ast.FormattedValue), (py_path, node.lineno)
Example #13
Source File: checker.py From pyflakes with MIT License | 5 votes |
def JOINEDSTR(self, node): if ( # the conversion / etc. flags are parsed as f-strings without # placeholders not self._in_fstring and not any(isinstance(x, ast.FormattedValue) for x in node.values) ): self.report(messages.FStringMissingPlaceholders, node) self._in_fstring, orig = True, self._in_fstring try: self.handleChildren(node) finally: self._in_fstring = orig
Example #14
Source File: fstr_lint.py From flynt with MIT License | 5 votes |
def visit_JoinedStr(self, node): new_vals = [] for v in node.values: if ( isinstance(v, ast.FormattedValue) and isinstance(v.value, ast.JoinedStr) and v.format_spec is None ): new_vals += v.value.values else: new_vals.append(v) node.values = new_vals return self.generic_visit(node)
Example #15
Source File: node_transformers.py From pynt with GNU General Public License v3.0 | 4 votes |
def get_kernel_embed(): """A list of kernel embed nodes Returns: nodes (list): AST nodes which form the following code. ``` import os pid = os.fork() if os.fork() == 0: open(f'{os.environ["HOME"]}/.pynt', 'a').close() import IPython IPython.start_kernel(user_ns={**locals(), **globals(), **vars()}) os.waitpid(pid, 0) ``` This is a purely functional method which always return the same thing. """ return [ ast.Import(names=[ast.alias(name='os', asname=None),]), ast.Assign(targets=[ast.Name(id='pid', ctx=ast.Store()),], value=ast.Call(func=ast.Attribute(value=ast.Name(id='os', ctx=ast.Load()), attr='fork', ctx=ast.Load()), args=[], keywords=[])), ast.If( test=ast.Compare(left=ast.Name(id='pid', ctx=ast.Load()), ops=[ast.Eq(),], comparators=[ast.Num(n=0),]), body=[ ast.Expr(value=ast.Call(func=ast.Attribute(value=ast.Call(func=ast.Name(id='open', ctx=ast.Load()), args=[ ast.JoinedStr(values=[ ast.FormattedValue(value=ast.Subscript(value=ast.Attribute(value=ast.Name(id='os', ctx=ast.Load()), attr='environ', ctx=ast.Load()), slice=ast.Index(value=ast.Str(s='HOME')), ctx=ast.Load()), conversion=-1, format_spec=None), ast.Str(s='/.pynt'), ]), ast.Str(s='a'), ], keywords=[]), attr='close', ctx=ast.Load()), args=[], keywords=[])), ast.Import(names=[ ast.alias(name='IPython', asname=None), ]), ast.Expr(value=ast.Call(func=ast.Attribute(value=ast.Name(id='IPython', ctx=ast.Load()), attr='start_kernel', ctx=ast.Load()), args=[], keywords=[ ast.keyword(arg='user_ns', value=ast.Dict(keys=[ None, None, None, ], values=[ ast.Call(func=ast.Name(id='locals', ctx=ast.Load()), args=[], keywords=[]), ast.Call(func=ast.Name(id='globals', ctx=ast.Load()), args=[], keywords=[]), ast.Call(func=ast.Name(id='vars', ctx=ast.Load()), args=[], keywords=[]), ])), ])), ], orelse=[]), ast.Expr(value=ast.Call(func=ast.Attribute(value=ast.Name(id='os', ctx=ast.Load()), attr='waitpid', ctx=ast.Load()), args=[ ast.Name(id='pid', ctx=ast.Load()), ast.Num(n=0), ], keywords=[])), ]
Example #16
Source File: test_fstring.py From android_universal with MIT License | 4 votes |
def test_ast_line_numbers_multiple_formattedvalues(self): expr = """ f'no formatted values' f'eggs {a * x()} spam {b + y()}'""" t = ast.parse(expr) self.assertEqual(type(t), ast.Module) self.assertEqual(len(t.body), 2) # check `f'no formatted value'` self.assertEqual(type(t.body[0]), ast.Expr) self.assertEqual(type(t.body[0].value), ast.JoinedStr) self.assertEqual(t.body[0].lineno, 2) # check `f'...'` self.assertEqual(type(t.body[1]), ast.Expr) self.assertEqual(type(t.body[1].value), ast.JoinedStr) self.assertEqual(len(t.body[1].value.values), 4) self.assertEqual(type(t.body[1].value.values[0]), ast.Str) self.assertEqual(type(t.body[1].value.values[1]), ast.FormattedValue) self.assertEqual(type(t.body[1].value.values[2]), ast.Str) self.assertEqual(type(t.body[1].value.values[3]), ast.FormattedValue) self.assertEqual(t.body[1].lineno, 3) self.assertEqual(t.body[1].value.lineno, 3) self.assertEqual(t.body[1].value.values[0].lineno, 3) self.assertEqual(t.body[1].value.values[1].lineno, 3) self.assertEqual(t.body[1].value.values[2].lineno, 3) self.assertEqual(t.body[1].value.values[3].lineno, 3) # check the first binop location binop1 = t.body[1].value.values[1].value self.assertEqual(type(binop1), ast.BinOp) self.assertEqual(type(binop1.left), ast.Name) self.assertEqual(type(binop1.op), ast.Mult) self.assertEqual(type(binop1.right), ast.Call) self.assertEqual(binop1.lineno, 3) self.assertEqual(binop1.left.lineno, 3) self.assertEqual(binop1.right.lineno, 3) self.assertEqual(binop1.col_offset, 8) self.assertEqual(binop1.left.col_offset, 8) self.assertEqual(binop1.right.col_offset, 12) # check the second binop location binop2 = t.body[1].value.values[3].value self.assertEqual(type(binop2), ast.BinOp) self.assertEqual(type(binop2.left), ast.Name) self.assertEqual(type(binop2.op), ast.Add) self.assertEqual(type(binop2.right), ast.Call) self.assertEqual(binop2.lineno, 3) self.assertEqual(binop2.left.lineno, 3) self.assertEqual(binop2.right.lineno, 3) self.assertEqual(binop2.col_offset, 23) self.assertEqual(binop2.left.col_offset, 23) self.assertEqual(binop2.right.col_offset, 27)
Example #17
Source File: test_fstring.py From android_universal with MIT License | 4 votes |
def test_ast_line_numbers_nested(self): expr = """ a = 10 f'{a * f"-{x()}-"}'""" t = ast.parse(expr) self.assertEqual(type(t), ast.Module) self.assertEqual(len(t.body), 2) # check `a = 10` self.assertEqual(type(t.body[0]), ast.Assign) self.assertEqual(t.body[0].lineno, 2) # check `f'...'` self.assertEqual(type(t.body[1]), ast.Expr) self.assertEqual(type(t.body[1].value), ast.JoinedStr) self.assertEqual(len(t.body[1].value.values), 1) self.assertEqual(type(t.body[1].value.values[0]), ast.FormattedValue) self.assertEqual(t.body[1].lineno, 3) self.assertEqual(t.body[1].value.lineno, 3) self.assertEqual(t.body[1].value.values[0].lineno, 3) # check the binop location binop = t.body[1].value.values[0].value self.assertEqual(type(binop), ast.BinOp) self.assertEqual(type(binop.left), ast.Name) self.assertEqual(type(binop.op), ast.Mult) self.assertEqual(type(binop.right), ast.JoinedStr) self.assertEqual(binop.lineno, 3) self.assertEqual(binop.left.lineno, 3) self.assertEqual(binop.right.lineno, 3) self.assertEqual(binop.col_offset, 3) self.assertEqual(binop.left.col_offset, 3) self.assertEqual(binop.right.col_offset, 7) # check the nested call location self.assertEqual(len(binop.right.values), 3) self.assertEqual(type(binop.right.values[0]), ast.Str) self.assertEqual(type(binop.right.values[1]), ast.FormattedValue) self.assertEqual(type(binop.right.values[2]), ast.Str) self.assertEqual(binop.right.values[0].lineno, 3) self.assertEqual(binop.right.values[1].lineno, 3) self.assertEqual(binop.right.values[2].lineno, 3) call = binop.right.values[1].value self.assertEqual(type(call), ast.Call) self.assertEqual(call.lineno, 3) self.assertEqual(call.col_offset, 11)
Example #18
Source File: test_fstring.py From android_universal with MIT License | 4 votes |
def test_ast_line_numbers_multiline_fstring(self): # FIXME: This test demonstrates invalid behavior due to JoinedStr's # immediate child nodes containing the wrong lineno. The enclosed # expressions have valid line information and column offsets. # See bpo-16806 and bpo-30465 for details. expr = """ a = 10 f''' {a * x()} non-important content ''' """ t = ast.parse(expr) self.assertEqual(type(t), ast.Module) self.assertEqual(len(t.body), 2) # check `a = 10` self.assertEqual(type(t.body[0]), ast.Assign) self.assertEqual(t.body[0].lineno, 2) # check `f'...'` self.assertEqual(type(t.body[1]), ast.Expr) self.assertEqual(type(t.body[1].value), ast.JoinedStr) self.assertEqual(len(t.body[1].value.values), 3) self.assertEqual(type(t.body[1].value.values[0]), ast.Str) self.assertEqual(type(t.body[1].value.values[1]), ast.FormattedValue) self.assertEqual(type(t.body[1].value.values[2]), ast.Str) # NOTE: the following invalid behavior is described in bpo-16806. # - line number should be the *first* line (3), not the *last* (8) # - column offset should not be -1 self.assertEqual(t.body[1].lineno, 8) self.assertEqual(t.body[1].value.lineno, 8) self.assertEqual(t.body[1].value.values[0].lineno, 8) self.assertEqual(t.body[1].value.values[1].lineno, 8) self.assertEqual(t.body[1].value.values[2].lineno, 8) self.assertEqual(t.body[1].col_offset, -1) self.assertEqual(t.body[1].value.col_offset, -1) self.assertEqual(t.body[1].value.values[0].col_offset, -1) self.assertEqual(t.body[1].value.values[1].col_offset, -1) self.assertEqual(t.body[1].value.values[2].col_offset, -1) # NOTE: the following lineno information and col_offset is correct for # expressions within FormattedValues. binop = t.body[1].value.values[1].value self.assertEqual(type(binop), ast.BinOp) self.assertEqual(type(binop.left), ast.Name) self.assertEqual(type(binop.op), ast.Mult) self.assertEqual(type(binop.right), ast.Call) self.assertEqual(binop.lineno, 4) self.assertEqual(binop.left.lineno, 4) self.assertEqual(binop.right.lineno, 6) self.assertEqual(binop.col_offset, 3) self.assertEqual(binop.left.col_offset, 3) self.assertEqual(binop.right.col_offset, 7)