#!/usr/bin/env python2

"""
Generates schema diagrams for Django apps.  Just run the script with no
arguments.  If you don't have them installed, you'll need "dot" from the
Graphviz package and Django.
"""

import common
import os

ROOT_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
PROJECTS = (
        ('frontend', 'tko'),
        ('frontend', 'afe'),
    )


def main():
    for project, app in PROJECTS:
        settings = 'autotest_lib.%s.settings' % project
        os.environ['DJANGO_SETTINGS_MODULE'] = settings

        # import after setting DJANGO_SETTINGS_MODULE
        from autotest_lib.contrib import modelviz

        # hack to force reload of settings and app list
        import django.conf
        from django.db.models import loading
        reload(django.conf)
        reload(loading)

        print 'Analyzing', project
        dot_contents = modelviz.generate_dot([app])

        dot_path = project + '.dot'
        dotfile = open(dot_path, 'w')
        dotfile.write(dot_contents)
        dotfile.close()
        print 'Wrote', dot_path

        png_path = project + '.png'
        os.system('dot -Tpng -o %s %s' % (png_path, dot_path))
        print 'Generated', png_path
        print

        del os.environ['DJANGO_SETTINGS_MODULE']


if __name__ == '__main__':
    main()
