Exemple #1
0
 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)
Exemple #2
0
    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,
        )
Exemple #3
0
    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)
Exemple #4
0
    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()
Exemple #6
0
    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
Exemple #7
0
 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__))