Skip to content

Commit c36e773

Browse files
committed
More fixes for the makeresources management command
- Legacy-Id: 13310
1 parent 405f76f commit c36e773

1 file changed

Lines changed: 88 additions & 89 deletions

File tree

ietf/api/management/commands/makeresources.py

Lines changed: 88 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@ class Meta:
4343
"{{ name }}": ALL_WITH_RELATIONS,{%endfor%}
4444
}
4545
api.{{app_label}}.register({{model.name}}Resource())
46-
{% endfor %}{% endautoescape %}
47-
"""
46+
{% endfor %}{% endautoescape %}"""
4847

4948
def 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("\nNOTE: Not writing resource file head.\nYou 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

Comments
 (0)