Code Duplication    Length = 39-40 lines in 2 locations

tests/conftest.py 1 location

@@ 45-84 (lines=40) @@
42
            yield from _ast_edge(child_ast)
43
44
45
@pytest.fixture()
46
def ast_graph_model():
47
    graph_model = graphinate.model(name='AST Graph')
48
49
    root_ast_node = ast.parse(inspect.getsource(graphinate.builders.D3Builder))
50
51
    def node_type(ast_node):
52
        return ast_node.__class__.__name__
53
54
    def node_label(ast_node) -> str:
55
        label = ast_node.__class__.__name__
56
57
        for field_name in ('name', 'id'):
58
            if field_name in ast_node._fields:
59
                label = f"{label}\n{field_name}: {operator.attrgetter(field_name)(ast_node)}"
60
61
        return label
62
63
    def key(value):
64
        # noinspection InsecureHash
65
        return hashlib.md5(pickle.dumps(value)).hexdigest()
66
67
    def endpoint(value, endpoint_name):
68
        return key(value[endpoint_name])
69
70
    def source(value):
71
        return endpoint(value, 'source')
72
73
    def target(value):
74
        return endpoint(value, 'target')
75
76
    @graph_model.node(_type=node_type, key=key, label=node_label, uniqueness=True)
77
    def ast_node(**kwargs):
78
        yield from _ast_nodes([root_ast_node])
79
80
    @graph_model.edge(_type='edge', source=source, target=target, label=operator.itemgetter('type'))
81
    def ast_edge(**kwargs):
82
        yield from _ast_edge(root_ast_node)
83
84
    return graph_model
85
86
87
@pytest.fixture()

examples/code/python_ast.py 1 location

@@ 33-71 (lines=39) @@
30
            yield from _ast_edge(child_ast)
31
32
33
def ast_graph_model():
34
    graph_model = graphinate.model(name='AST Graph')
35
36
    root_ast_node = ast.parse(inspect.getsource(graphinate.builders.D3Builder))
37
38
    def node_type(ast_node):
39
        return ast_node.__class__.__name__
40
41
    def node_label(ast_node) -> str:
42
        label = ast_node.__class__.__name__
43
44
        for field_name in ('name', 'id'):
45
            if field_name in ast_node._fields:
46
                label = f"{label}\n{field_name}: {operator.attrgetter(field_name)(ast_node)}"
47
48
        return label
49
50
    def key(value):
51
        # noinspection InsecureHash
52
        return hashlib.md5(pickle.dumps(value)).hexdigest()
53
54
    def endpoint(value, endpoint_name):
55
        return key(value[endpoint_name])
56
57
    def source(value):
58
        return endpoint(value, 'source')
59
60
    def target(value):
61
        return endpoint(value, 'target')
62
63
    @graph_model.node(_type=node_type, key=key, label=node_label, uniqueness=True)
64
    def ast_node(**kwargs):
65
        yield from _ast_nodes([root_ast_node])
66
67
    @graph_model.edge(_type='edge', source=source, target=target, label=operator.itemgetter('type'))
68
    def ast_edge(**kwargs):
69
        yield from _ast_edge(root_ast_node)
70
71
    return graph_model
72
73
74
if __name__ == '__main__':