in src/olympia/devhub/views.py [0:0]
def version_edit(request, addon_id, addon, version_id):
version = get_object_or_404(addon.versions.all(), pk=version_id)
posting = request.method == 'POST'
static_theme = addon.type == amo.ADDON_STATICTHEME
version_form = (
forms.VersionForm(
request.POST or None,
request.FILES or None,
instance=version,
)
if not static_theme
else None
)
data = {}
has_source = version_form and version_form['source'].data
if version_form:
data['version_form'] = version_form
if has_source and posting:
timer = StopWatch('devhub.views.version_edit.')
timer.start()
log.info(
'version_edit, form populated, addon.slug: %s, version.id: %s',
addon.slug,
version.id,
)
timer.log_interval('1.form_populated')
is_admin = acl.action_allowed_for(request.user, amo.permissions.REVIEWS_ADMIN)
if not static_theme and addon.can_set_compatibility:
qs = version.apps.all().select_related('min', 'max')
compat_form = forms.CompatFormSet(
request.POST or None, queryset=qs, form_kwargs={'version': version}
)
data['compat_form'] = compat_form
if request.method == 'POST' and all([form.is_valid() for form in data.values()]):
if has_source:
log.info(
'version_edit, form validated, addon.slug: %s, version.id: %s',
addon.slug,
version.id,
)
timer.log_interval('2.form_validated')
if 'compat_form' in data:
for compat in data['compat_form'].save(commit=False):
if data['compat_form'].has_changed():
compat.originated_from = amo.APPVERSIONS_ORIGINATED_FROM_DEVELOPER
compat.version = version
compat.save()
for compat in data['compat_form'].deleted_objects:
compat.delete()
for form in data['compat_form'].forms:
if isinstance(form, forms.CompatForm) and 'max' in form.changed_data:
_log_max_version_change(addon, version, form.instance)
if 'version_form' in data:
data['version_form'].save()
if has_source:
log.info(
'version_edit, form saved, addon.slug: %s, version.id: %s',
addon.slug,
version.id,
)
timer.log_interval('3.form_saved')
if 'approval_notes' in version_form.changed_data:
ActivityLog.objects.create(
amo.LOG.NOTES_FOR_REVIEWERS_CHANGED, addon, version, request.user
)
if (
'source' in version_form.changed_data
and version_form.cleaned_data['source']
):
version.flag_if_sources_were_provided(request.user)
messages.success(request, gettext('Changes successfully saved.'))
result = redirect('devhub.versions.edit', addon.slug, version_id)
if has_source:
log.info(
'version_edit, redirecting to next view, '
+ 'addon.slug: %s, version.id: %s',
addon.slug,
version.id,
)
timer.log_interval('4.redirecting_to_next_view')
return result
data.update(
{
'addon': addon,
'version': version,
'is_admin': is_admin,
'choices': File.STATUS_CHOICES,
'files': (version.file,),
}
)
if has_source and posting:
log.info(
'version_edit, validation failed, re-displaying the template, '
+ 'addon.slug: %s, version.id: %s',
addon.slug,
version.id,
)
timer.log_interval('5.validation_failed_re-displaying_the_template')
return TemplateResponse(request, 'devhub/versions/edit.html', context=data)