def test_invalid_python(self): path = os.path.join( os.path.dirname(__file__), 'not_code.txt', ) source = Source.for_filename(path) self.assertIsNone(source.tree)
def file_table_context(): filename = request.args['filename'] source = Source.for_filename(filename) queue = queues[filename] highlighted = highlight_ranges(source, frames_matching(filename)) highlighted = highlight_python_and_ranges(highlighted) highlighted_lines = list(enumerate(highlighted.splitlines())) counters = [queue_counter(queue, 2**i) for i in range(levels + 1)] ratios = [[ counter[i + 1] / min(2**c, len(queue) or 1) * (c + 1) / levels for c, counter in enumerate(counters) ] for i, _ in highlighted_lines] max_ratio = max(map(max, ratios)) or 1 rows = [( i + 1, totals[filename][i + 1] or '', reversed( [int(round(ratio / max_ratio * 100)) for ratio in ratios[i]]), line, ) for i, line in highlighted_lines] return dict( rows=rows, zip=zip, lightnesses=lightnesses, filename=filename, highlighted=highlighted, )
def _post_init(self) -> None: attach_ignore_id_to_module(self.module) # check uniqueness of qualname modfile = getattr(self.module, '__file__', None) if modfile is not None: check_qualname_by_source( Source.for_filename(modfile, self.module.__dict__), self.module.__name__, self.qualname)
def check_filename(self, filename): print(filename) source = Source.for_filename(filename) if PY3: code = compile(source.text, filename, "exec", dont_inherit=True) for subcode, qualname in find_qualnames(code): if not qualname.endswith(">"): code_qualname = source.code_qualname(subcode) self.assertEqual(code_qualname, qualname) nodes = defaultdict(list) for node in ast.walk(source.tree): if isinstance(node, ( ast.UnaryOp, ast.BinOp, ast.Subscript, ast.Call, ast.Compare, ast.Attribute )): nodes[node] = [] code = compile(source.tree, source.filename, 'exec') result = list(self.check_code(code, nodes)) if not re.search(r'^\s*if 0(:| and )', source.text, re.MULTILINE): for node, values in nodes.items(): if is_unary_not(node): continue if isinstance(getattr(node, 'ctx', None), (ast.Store, ast.Del)): assert not values continue if isinstance(node, ast.Compare): if len(node.ops) > 1: assert not values continue if is_unary_not(node.parent) and isinstance(node.ops[0], (ast.In, ast.Is)): continue if is_literal(node): continue if sys.version_info >= (3, 9) and in_finally(node): correct = len(values) > 1 else: correct = len(values) == 1 if not correct: print(source.text, '---', node_string(source, node), node.lineno, len(values), correct, values, file=sys.stderr, sep='\n') self.fail() return result
def test_ignore_module_qualname_no_source(tmp_path): module = module_from_source( 'ignore_module_qualname_no_source', """ def bar(): return 1 """, tmp_path) source = Source.for_filename(module.__file__) # simulate when source is not available # no way to check uniqueness of qualname source.tree = None def foo(): return varname(ignore=(module, 'bar')) f = foo()
def check_filename(self, filename): print(filename) source = Source.for_filename(filename) nodes = {} for node in ast.walk(source.tree): if isinstance(node, (ast.UnaryOp, ast.BinOp, ast.Subscript, ast.Call, ast.Compare, ast.Attribute)): nodes[node] = None code = compile(source.tree, source.filename, 'exec') result = list(self.check_code(code, nodes)) if not re.search(r'^\s*if 0(:| and )', source.text, re.MULTILINE): for node, value in nodes.items(): if is_unary_not(node): continue if isinstance(getattr(node, 'ctx', None), (ast.Store, ast.Del)): assert value is None continue if isinstance(node, ast.Compare): if len(node.ops) > 1: assert value is None continue if is_unary_not(node.parent) and isinstance( node.ops[0], (ast.In, ast.Is)): continue if is_literal(node): continue if value is None: print(source.text, '---', node_string(source, node), file=sys.stderr, sep='\n') self.fail() return result
def assert_qualname(self, func, qn, check_actual_qualname=True): qualname = Source.for_filename(__file__).code_qualname(func.__code__) self.assertEqual(qn, qualname) if PY3 and check_actual_qualname: self.assertEqual(qn, func.__qualname__) self.assertTrue(qn.endswith(func.__name__))