Home > Auto-Models

Auto-Models

Auto-Models is a project mainly written in Python, it's free.

Keeps database diagrams and code in synch. Currently focusing on Django and OmniGraffle.

OVERVIEW

Creates diagrams from code and sometimes vice versa. Primary use cases:

  1. Generate object models from Django models
  2. Generate even flow diagram from code regexes

Diagram layout is autogenerated.

Status

Just used by me. I'd be happy to clean up the code and generalize it if there's interest.

Turns the following Django code:

 class TestType(models.Model):
     OS_TYPES_LIST = ["Windows", "Mac", "Ubuntu"]
     os_types_max_len, OS_TYPES, OS_TYPES_CHOICES = model_utils.convert_to_choices(OS_TYPES_LIST)

     OS_VERSION_LIST = ["7", "XP", "Vista", "X.4", "X.5", "X.6", "8.04", "9.06"]
     os_version_max_len, OS_VERSION, OS_VERSION_CHOICES = model_utils.convert_to_choices(OS_VERSION_LIST)

     FF_VERSION_LIST = ["3.0", "3.5", "3.6"]
     ff_max_len, FF_VERSION, FF_VERSION_CHOICES = model_utils.convert_to_choices(FF_VERSION_LIST)

     slug = models.CharField(max_length=200)
     name = models.CharField(max_length=200)
     os_type = models.CharField(max_length=os_types_max_len, choices=OS_TYPES_CHOICES)
     os_version = models.CharField(max_length=os_version_max_len, choices=OS_VERSION_CHOICES)
     ff_version = models.CharField(max_length=ff_max_len, choices=FF_VERSION_CHOICES)

     ...

 class TestRun(models.Model):
     test_type = models.ForeignKey(TestType)
     dtime = models.DateTimeField(db_index=True)
     is_pass = models.BooleanField(default=False)
     number_fail = models.IntegerField(default=-1)
     total = models.IntegerField(default=-1)
     duration = models.IntegerField(default=-1)

     ...

into an OmniGraffle diagram that looks like this:

Turns the above OmniGraffle diagram into the following Django code:

 class TestType(models.Model):
     id = models.AutoField()
     slug = models.CharField(max_length=200)
     name = models.CharField(max_length=200)
     os_type = models.CharField(max_length=200)
     os_version = models.CharField(max_length=200)
     ff_version = models.CharField(max_length=200)

 class TestRun(models.Model):
     id = models.AutoField()
     test_type = models.ForeignKey('TestType')
     dtime = models.DateTimeField()
     is_pass = models.BooleanField()
     number_fail = models.IntegerField()
     total = models.IntegerField()
     duration = models.IntegerField()

Turns code that matches source and dest regex into graphviz/dot diagram that looks like this:

POTENTIAL DEPENDENCIES

DOT/Graphviz

  • http://www.graphviz.org/

OmniGraffle

  • http://www.omnigroup.com/applications/omnigraffle/

  • Mac-only software

  • requires OmniGraffle

  • requires appscript, python library for AppleScript sudo easy_install appscript

  • http://appscript.sourceforge.net/py-appscript/doc/

    sudo easy_install appscript

Django

  • http://djangoproject.com

RUN

Command line interface:

Event Flow Diagram

  1. cd to Auto-Models root
  2. edit config.py
  3. python main.py ef2dot

Object Model Diagram

  1. cd to <Django project (or some directory inside project)>
  2. python <path to Auto-Models>/main.py help

When creating OmniGraffle diagrams, the script does a force-directed layout on the models.

Previous:cs424p2