def _submit_source()

in src/olympia/devhub/views.py [0:0]


def _submit_source(request, addon, version, submit_page, next_view):
    posting = request.method == 'POST'
    redirect_args = (
        [addon.slug, version.pk]
        if version and submit_page == 'version'
        else [addon.slug]
    )
    if addon.type != amo.ADDON_EXTENSION:
        return redirect(next_view, *redirect_args)
    source_form = forms.SourceForm(
        request.POST or None,
        request.FILES or None,
        instance=version,
        request=request,
    )
    has_source = source_form.data.get('has_source') == 'yes'
    if has_source and posting:
        timer = StopWatch('devhub.views._submit_source.')
        timer.start()
        log.info(
            '_submit_source, form populated, addon.slug: %s, version.pk: %s',
            addon.slug,
            version.pk,
        )
        timer.log_interval('1.form_populated')

    if request.method == 'POST' and source_form.is_valid():
        if has_source:
            log.info(
                '_submit_source, form validated, addon.slug: %s, version.pk: %s',
                addon.slug,
                version.pk,
            )
            timer.log_interval('2.form_validated')
        if source_form.cleaned_data.get('source'):
            source_form.save()
            version.flag_if_sources_were_provided(request.user)
            log.info(
                '_submit_source, form saved, addon.slug: %s, version.pk: %s',
                addon.slug,
                version.pk,
            )
            timer.log_interval('3.form_saved')

        result = redirect(next_view, *redirect_args)
        if has_source:
            log.info(
                '_submit_source, redirecting to next view, '
                + 'addon.slug: %s, version.pk: %s',
                addon.slug,
                version.pk,
            )
            timer.log_interval('4.redirecting_to_next_view')
        return result
    context = {
        'source_form': source_form,
        'addon': addon,
        'version': version,
        'submit_page': submit_page,
        'max_upload_size': settings.MAX_UPLOAD_SIZE,
    }
    if has_source and posting:
        log.info(
            '_submit_source, validation failed, re-displaying the template, '
            + 'addon.slug: %s, version.pk: %s',
            addon.slug,
            version.pk,
        )
        timer.log_interval('5.validation_failed_re-displaying_the_template')
    return TemplateResponse(
        request, 'devhub/addons/submit/source.html', context=context
    )