8 from django.template import Context, Template
13 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
14 from django.db.models.fields.related import ForeignKey, ManyToManyField
15 from core.models import *
17 def singular(foo, keys):
23 raise Exception('Plural to singular error for %s'%foo)
30 if type(c)==type(PlCoreBase):
31 model_classes.append(c)
37 return str(self.model.__name__.lower())
39 def __init__(self, m):
46 if (name.endswith('s')):
52 name = str(self.model.__name__)
55 class Generator(dict):
60 filtered = filter(lambda o:re.match(r,str(o)), self.values())
63 def add_object(self, o):
65 fields = o._meta.fields
66 self[str(obj).lower()]=obj
68 def compute_links(self):
69 for obj in self.values():
70 fields = obj.model._meta.fields
72 if type(f)==ForeignKey and f.name in self.keys():
74 obj.refs.append(refobj)
76 obj.props.append(f.name)
77 m2m = obj.model._meta.many_to_many
80 related_model_name = f.m2m_reverse_field_name()
82 related_model_name = f.m2m_db_table().rsplit('_',1)[-1]
84 if related_model_name in self.keys():
85 refobj = self[related_model_name]
87 refobj.refs.append(obj)
94 print 'Usage: modelgen <output template>'
97 generator = Generator()
99 models = enum_classes()
102 generator.add_object(m)
104 generator.compute_links()
105 template_contents = open(output).read()
106 template = Template(template_contents)
107 context = Context({'generator':generator})
108 print template.render(context)
111 if (__name__=='__main__'):