in src/olympia/devhub/views.py [0:0]
def _submit_details(request, addon, version):
static_theme = addon.type == amo.ADDON_STATICTHEME
if version:
skip_details_step = version.channel == amo.CHANNEL_UNLISTED or (
static_theme and addon.has_complete_metadata()
)
if skip_details_step:
# Nothing to do here.
return redirect('devhub.submit.version.finish', addon.slug, version.pk)
latest_version = version
else:
# Figure out the latest version early in order to pass the same
# instance to each form that needs it (otherwise they might overwrite
# each other).
latest_version = addon.find_latest_version(channel=amo.CHANNEL_LISTED)
if not latest_version:
# No listed version ? Then nothing to do in the listed submission
# flow.
return redirect('devhub.submit.finish', addon.slug)
forms_list = []
context = {
'addon': addon,
'version': version,
'sources_provided': latest_version.sources_provided,
'submit_page': 'version' if version else 'addon',
}
post_data = request.POST if request.method == 'POST' else None
show_all_fields = not version or not addon.has_complete_metadata()
if show_all_fields:
if waffle.switch_is_active('content-optimization'):
describe_form = forms.DescribeFormContentOptimization(
post_data,
instance=addon,
request=request,
version=version,
should_auto_crop=True,
)
else:
describe_form = forms.DescribeForm(
post_data, instance=addon, request=request, version=version
)
cat_form = forms.CategoryForm(post_data, addon=addon, request=request)
policy_form = forms.PolicyForm(post_data, addon=addon)
license_form = forms.LicenseForm(
post_data, version=latest_version, prefix='license'
)
context.update(license_form.get_context())
context.update(
describe_form=describe_form,
cat_form=cat_form,
policy_form=policy_form,
)
forms_list.extend(
[describe_form, cat_form, policy_form, context['license_form']]
)
if not static_theme:
# Static themes don't need this form
reviewer_form = forms.VersionForm(post_data, instance=latest_version)
context.update(reviewer_form=reviewer_form)
forms_list.append(reviewer_form)
if request.method == 'POST' and all(form.is_valid() for form in forms_list):
if show_all_fields:
addon = describe_form.save()
cat_form.save()
policy_form.save()
license_form.save(log=False)
if not static_theme:
reviewer_form.save()
addon.update_status()
signals.submission_done.send(sender=addon)
elif not static_theme:
reviewer_form.save()
if not version:
return redirect('devhub.submit.finish', addon.slug)
else:
return redirect('devhub.submit.version.finish', addon.slug, version.id)
template = 'devhub/addons/submit/%s' % (
'describe.html' if show_all_fields else 'describe_minimal.html'
)
return TemplateResponse(request, template, context=context)