9 from django.template import Context, Template
11 blacklist = ['SingletonModel','PlCoreBase']
16 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
17 from django.db.models.fields.related import ForeignKey, ManyToManyField
18 from core.models import *
20 def singular(foo, keys):
26 raise Exception('Plural to singular error for %s'%foo)
33 if type(c)==type(PlCoreBase) and c.__name__ not in blacklist:
34 model_classes.append(c)
40 return str(self.model.__name__.lower())
42 def __init__(self, m):
46 self.plural_name = None
49 if (self.plural_name):
50 return self.plural_name
53 if (name.endswith('s')):
59 name = str(self.model.__name__)
62 class Generator(dict):
67 filtered = filter(lambda o:re.match(r,str(o)), self.values())
70 def add_object(self, o):
72 fields = o._meta.fields
73 self[str(obj).lower()]=obj
75 def compute_links(self):
76 for obj in self.values():
77 #if (str(obj)=='siteprivilege'):
79 fields = obj.model._meta.fields
81 if type(f)==ForeignKey and f.name in self.keys():
83 obj.refs.append(refobj)
84 related_name = f.related_query_name()
85 if (related_name.lower()!=str(obj).lower()):
86 cobj = copy.deepcopy(obj)
88 cobj.plural_name = related_name
89 refobj.refs.append(cobj)
91 obj.props.append(f.name)
92 m2m = obj.model._meta.many_to_many
95 related_model_name = f.m2m_reverse_field_name()
97 related_model_name = f.m2m_db_table().rsplit('_',1)[-1]
99 if related_model_name in self.keys():
101 refobj = self[related_model_name]
102 cobj = copy.deepcopy(obj)
104 refobj.refs.append(cobj)
106 if (related_name.lower()!=str(obj).lower()):
107 cobj = copy.deepcopy(obj)
109 cobj.plural_name = related_name
110 refobj.refs.append(cobj)
119 print 'Usage: modelgen <output template>'
122 generator = Generator()
124 models = enum_classes()
127 generator.add_object(m)
129 generator.compute_links()
130 template_contents = open(output).read()
131 template = Template(template_contents)
132 context = Context({'generator':generator})
133 print template.render(context)
136 if (__name__=='__main__'):