applications: move scandeps to be a method (#70501)
This commit is contained in:
parent
0165713e53
commit
1475e2b72e
|
@ -68,6 +68,35 @@ class Application(models.Model):
|
|||
self.slug = slug
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
def scandeps(self):
|
||||
self.relation_set.filter(auto_dependency=True).delete()
|
||||
relations = self.relation_set.select_related('element')
|
||||
elements = {(x.element.type, x.element.slug): (x.element, x) for x in relations}
|
||||
finished = False
|
||||
while not finished:
|
||||
finished = True
|
||||
for el in [x[0] for x in elements.values()]:
|
||||
dependencies_url = el.cache['urls'].get('dependencies')
|
||||
if not dependencies_url:
|
||||
continue
|
||||
response = requests.get(dependencies_url)
|
||||
for dependency in response.json()['data']:
|
||||
if (dependency['type'], dependency['id']) in elements:
|
||||
continue
|
||||
finished = False
|
||||
element, created = Element.objects.get_or_create(
|
||||
type=dependency['type'], slug=dependency['id'], defaults={'name': dependency['text']}
|
||||
)
|
||||
element.name = dependency['text']
|
||||
element.cache = dependency
|
||||
element.save()
|
||||
relation, created = Relation.objects.get_or_create(application=self, element=element)
|
||||
if created:
|
||||
relation.auto_dependency = True
|
||||
relation.save()
|
||||
elements[(element.type, element.slug)] = (element, relation)
|
||||
return elements
|
||||
|
||||
|
||||
class Element(models.Model):
|
||||
type = models.CharField(max_length=25, verbose_name=_('Type'))
|
||||
|
|
|
@ -186,39 +186,9 @@ class AppDeleteElementView(DeleteView):
|
|||
delete_element = AppDeleteElementView.as_view()
|
||||
|
||||
|
||||
def scan(app_slug):
|
||||
app = Application.objects.get(slug=app_slug)
|
||||
app.relation_set.filter(auto_dependency=True).delete()
|
||||
relations = app.relation_set.select_related('element')
|
||||
elements = {(x.element.type, x.element.slug): (x.element, x) for x in relations}
|
||||
finished = False
|
||||
while not finished:
|
||||
finished = True
|
||||
for el in [x[0] for x in elements.values()]:
|
||||
dependencies_url = el.cache['urls'].get('dependencies')
|
||||
if not dependencies_url:
|
||||
continue
|
||||
response = requests.get(dependencies_url)
|
||||
for dependency in response.json()['data']:
|
||||
if (dependency['type'], dependency['id']) in elements:
|
||||
continue
|
||||
finished = False
|
||||
element, created = Element.objects.get_or_create(
|
||||
type=dependency['type'], slug=dependency['id'], defaults={'name': dependency['text']}
|
||||
)
|
||||
element.name = dependency['text']
|
||||
element.cache = dependency
|
||||
element.save()
|
||||
relation, created = Relation.objects.get_or_create(application=app, element=element)
|
||||
if created:
|
||||
relation.auto_dependency = True
|
||||
relation.save()
|
||||
elements[(element.type, element.slug)] = (element, relation)
|
||||
return elements
|
||||
|
||||
|
||||
def scandeps(request, app_slug):
|
||||
scan(app_slug)
|
||||
app = Application.objects.get(slug=app_slug)
|
||||
app.scandeps()
|
||||
|
||||
return HttpResponseRedirect(reverse('application-manifest', kwargs={'app_slug': app_slug}))
|
||||
|
||||
|
@ -237,7 +207,7 @@ class GenerateView(FormView):
|
|||
|
||||
def form_valid(self, form):
|
||||
app = self.app
|
||||
elements = scan(app.slug)
|
||||
elements = app.scandeps()
|
||||
|
||||
version = (
|
||||
app.version_set.filter(number=form.cleaned_data['number'])
|
||||
|
|
Loading…
Reference in New Issue