graphs.py 文件源码

python
阅读 29 收藏 0 点赞 0 评论 0

项目:documentr 作者: hive-tools 项目源码 文件源码
def generate(self):
        if not self.__schema:
            return None

        for database in self.__schema:
            for table in self.__schema[database]:
                graph = pydot.Dot(graph_type='digraph')
                main_node_name = "{}.{}".format(database, table['table'])
                graph.add_node(
                    pydot.Node(main_node_name, style="filled",
                               fillcolor="#CCCCCC")
                )

                for field in table['fields']:
                    if not field['metadata']:
                        continue

                    if 'reference' not in field['metadata']:
                        continue

                    related_table = "{}.{}".format(
                        field['metadata']['reference']['database'],
                        field['metadata']['reference']['table']
                    )

                    graph.add_node(
                        pydot.Node(related_table, style="filled",
                                   fillcolor="#FFFFFF")
                    )

                    # add relationship
                    relationship = "{} -> {}".format(
                        field['name'],
                        field['metadata']['reference']['field']
                    )

                    graph.add_edge(
                        pydot.Edge(
                            main_node_name, related_table, label=relationship
                        )
                    )

                    full_path = os.path.join(
                        self.__output_path, 'graph_img'
                    )

                    if not os.path.exists(full_path):
                        os.makedirs(full_path)

                    final_path = os.path.join(
                        full_path, '{}.png'.format(main_node_name)
                    )

                    graph.write_png(final_path)

                graph = None
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号