def _submit_details()

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)