@@ -43,8 +43,7 @@ class Meta:
4343 "{{ name }}": ALL_WITH_RELATIONS,{%endfor%}
4444 }
4545api.{{app_label}}.register({{model.name}}Resource())
46- {% endfor %}{% endautoescape %}
47- """
46+ {% endfor %}{% endautoescape %}"""
4847
4948def render (template , dictionary ):
5049 template = Template (template , None , None )
@@ -69,14 +68,14 @@ def handle_app_config(self, app, **options):
6968 app_resources [n ] = v
7069
7170 do_update_resources = False
71+ missing_resources = []
7272 for m in app_models :
7373 model_name = m .__name__
7474 rclass_name = model_name + "Resource"
75- resource_name = m .__name__ .lower ()
7675 if not rclass_name in app_resources :
77- do_update_resources = True
76+ missing_resources . append (( m , rclass_name ))
7877
79- if do_update_resources :
78+ if missing_resources :
8079 print ("Updating resources.py for %s" % app .name )
8180 with open (resource_file_path , "a" ) as rfile :
8281 info = dict (
@@ -85,93 +84,91 @@ def handle_app_config(self, app, **options):
8584 date = datetime .datetime .now ()
8685 )
8786 new_models = {}
88- for model in app_models :
87+ for model , rclass_name in missing_resources :
8988 model_name = model .__name__
90- rclass_name = model_name + "Resource"
9189 resource_name = model .__name__ .lower ()
92- if not rclass_name in app_resources :
93- imports = collections .defaultdict (lambda : collections .defaultdict (list ))
94- print ("Adding resource class for %s" % model_name )
95- foreign_keys = []
96- plain_names = []
97- fk_names = []
98- m2m_names = []
99- #debug.pprint('dir(model)')
100- for field in model ._meta .fields :
101- if isinstance (field , (models .ForeignKey , models .OneToOneField )):
102- #debug.show('field.name')
103- #debug.pprint('dir(field.rel.to)')
104- #exit()
105- rel_app = field .rel .to ._meta .app_label
106- rel_model_name = field .rel .to .__name__
107- if rel_model_name == model_name :
108- # foreign key to self class -- quote
109- # the rmodel_name
110- rmodel_name = "'%s.resources.%sResource'" % (app .name , rel_model_name )
111- else :
112- rmodel_name = rel_model_name + "Resource"
113- foreign_keys .append (dict (
114- field = field ,
115- name = field .name ,
116- app = rel_app ,
117- module = rel_app .split ('.' )[- 1 ],
118- model = field .rel .to ,
119- model_name = rel_model_name ,
120- rmodel_name = rmodel_name ,
121- resource_name = field .rel .to .__name__ .lower (),
122- ))
123- imports [rel_app ]["module" ] = rel_app
124- imports [rel_app ]["names" ].append (rel_model_name )
125- fk_names .append (field .name )
90+ imports = collections .defaultdict (lambda : collections .defaultdict (list ))
91+ print ("Adding resource class for %s" % model_name )
92+ foreign_keys = []
93+ plain_names = []
94+ fk_names = []
95+ m2m_names = []
96+ #debug.pprint('dir(model)')
97+ for field in model ._meta .fields :
98+ if isinstance (field , (models .ForeignKey , models .OneToOneField )):
99+ #debug.show('field.name')
100+ #debug.pprint('dir(field.rel.to)')
101+ #exit()
102+ rel_app = field .rel .to ._meta .app_label
103+ rel_model_name = field .rel .to .__name__
104+ if rel_model_name == model_name :
105+ # foreign key to self class -- quote
106+ # the rmodel_name
107+ rmodel_name = "'%s.resources.%sResource'" % (app .name , rel_model_name )
108+ else :
109+ rmodel_name = rel_model_name + "Resource"
110+ foreign_keys .append (dict (
111+ field = field ,
112+ name = field .name ,
113+ app = rel_app ,
114+ module = rel_app .split ('.' )[- 1 ],
115+ model = field .rel .to ,
116+ model_name = rel_model_name ,
117+ rmodel_name = rmodel_name ,
118+ resource_name = field .rel .to .__name__ .lower (),
119+ ))
120+ imports [rel_app ]["module" ] = rel_app
121+ imports [rel_app ]["names" ].append (rel_model_name )
122+ fk_names .append (field .name )
123+ else :
124+ plain_names .append (field .name )
125+ m2m_keys = []
126+ for field in model ._meta .many_to_many :
127+ #debug.show('field.name')
128+ #debug.pprint('dir(field.rel.to)')
129+ #exit()
130+ rel_app = field .rel .to ._meta .app_label
131+ rel_model_name = field .rel .to .__name__
132+ if rel_model_name == model_name :
133+ # foreign key to self class -- quote
134+ # the rmodel_name
135+ rmodel_name = "'%s.resources.%sResource'" % (app .name , rel_model_name )
126136 else :
127- plain_names .append (field .name )
128- m2m_keys = []
129- for field in model ._meta .many_to_many :
130- #debug.show('field.name')
131- #debug.pprint('dir(field.rel.to)')
132- #exit()
133- rel_app = field .rel .to ._meta .app_label
134- rel_model_name = field .rel .to .__name__
135- if rel_model_name == model_name :
136- # foreign key to self class -- quote
137- # the rmodel_name
138- rmodel_name = "'%s.resources.%sResource'" % (app .name , rel_model_name )
139- else :
140- rmodel_name = rel_model_name + "Resource"
141- m2m_keys .append (dict (
142- field = field ,
143- name = field .name ,
144- app = rel_app ,
145- module = rel_app .split ('.' )[- 1 ],
146- model = field .rel .to ,
147- model_name = rel_model_name ,
148- rmodel_name = rmodel_name ,
149- resource_name = field .rel .to .__name__ .lower (),
150- ))
151- imports [rel_app ]["module" ] = rel_app
152- imports [rel_app ]["names" ].append (rel_model_name )
153- m2m_names .append (field .name )
154- # some special import cases
155- if "auth" in imports :
156- imports ["auth" ]["module" ] = 'utils'
157- if "contenttypes" in imports :
158- imports ["contenttypes" ]["module" ] = 'utils'
159- for k in imports :
160- imports [k ]["names" ] = set (imports [k ]["names" ])
161- new_models [model_name ] = dict (
162- app = app .name .split ('.' )[- 1 ],
163- model = model ,
164- fields = model ._meta .fields ,
165- m2m_fields = model ._meta .many_to_many ,
166- name = model_name ,
167- imports = [ v for k ,v in imports .items () ],
168- foreign_keys = foreign_keys ,
169- m2m_keys = m2m_keys ,
170- resource_name = resource_name ,
171- plain_names = plain_names ,
172- fk_names = fk_names ,
173- m2m_names = m2m_names ,
174- )
137+ rmodel_name = rel_model_name + "Resource"
138+ m2m_keys .append (dict (
139+ field = field ,
140+ name = field .name ,
141+ app = rel_app ,
142+ module = rel_app .split ('.' )[- 1 ],
143+ model = field .rel .to ,
144+ model_name = rel_model_name ,
145+ rmodel_name = rmodel_name ,
146+ resource_name = field .rel .to .__name__ .lower (),
147+ ))
148+ imports [rel_app ]["module" ] = rel_app
149+ imports [rel_app ]["names" ].append (rel_model_name )
150+ m2m_names .append (field .name )
151+ # some special import cases
152+ if "auth" in imports :
153+ imports ["auth" ]["module" ] = 'utils'
154+ if "contenttypes" in imports :
155+ imports ["contenttypes" ]["module" ] = 'utils'
156+ for k in imports :
157+ imports [k ]["names" ] = set (imports [k ]["names" ])
158+ new_models [model_name ] = dict (
159+ app = app .name .split ('.' )[- 1 ],
160+ model = model ,
161+ fields = model ._meta .fields ,
162+ m2m_fields = model ._meta .many_to_many ,
163+ name = model_name ,
164+ imports = [ v for k ,v in imports .items () ],
165+ foreign_keys = foreign_keys ,
166+ m2m_keys = m2m_keys ,
167+ resource_name = resource_name ,
168+ plain_names = plain_names ,
169+ fk_names = fk_names ,
170+ m2m_names = m2m_names ,
171+ )
175172
176173 # Sort resources according to internal FK reference depth
177174 new_model_list = []
@@ -212,6 +209,8 @@ def handle_app_config(self, app, **options):
212209 if rfile .tell () == 0 :
213210 print ("Writing resource file head" )
214211 rfile .write (render (resource_head_template , info ))
212+ else :
213+ print ("\n NOTE: Not writing resource file head.\n You may have to update the import from %s.models" % app .name )
215214
216215 info .update (dict (models = new_model_list ))
217216 rfile .write (render (resource_class_template , info ))
0 commit comments