import os import sys from db_shell import * # noqa from sqlalchemy import MetaData from sqlalchemy.orm import class_mapper try: from sqlalchemy_schemadisplay import create_schema_graph, create_uml_graph except ImportError: print("please install sqlalchemy_schemadisplay to use this script (pip install sqlalchemy_schemadisplay)") raise gxy_root = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) sys.path.insert(1, os.path.abspath(os.path.join(gxy_root, 'lib'))) from galaxy import model if __name__ == "__main__": gxy_root = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)) sqlitedb = os.path.join(gxy_root, 'database/universe.sqlite') # Try to build a representation of what's in the sqlite database if os.path.exists(sqlitedb): graph = create_schema_graph(metadata=MetaData('sqlite:///' + sqlitedb), show_datatypes=False, show_indexes=False, rankdir='LR', concentrate=False) print(f"Writing galaxy_universe.png, built from {sqlitedb}") graph.write_png('galaxy_universe.png') else: print(f"No sqlitedb available at {sqlitedb}, skipping rendering") # Build UML graph from loaded mapper mappers = [] for attr in dir(model): if attr[0] == '_': continue try: cls = getattr(model, attr) mappers.append(class_mapper(cls)) except Exception: pass graph = create_uml_graph( mappers, show_operations=False, ) print("Writing galaxy_uml.png") graph.write_png('galaxy_uml.png') # write out the file