From c26ba974baa50a8f95e0b112f7cab90d007f3302 Mon Sep 17 00:00:00 2001 From: Jennifer Richards Date: Tue, 22 Oct 2024 12:51:16 -0300 Subject: [PATCH] refactor: use form for search_submission (#8065) * refactor: use form for search_submission * chore: remove lint * style: Black --- ietf/submit/forms.py | 10 +++ ietf/submit/views.py | 93 ++++++++++++++------ ietf/templates/submit/search_submission.html | 8 +- 3 files changed, 77 insertions(+), 34 deletions(-) diff --git a/ietf/submit/forms.py b/ietf/submit/forms.py index 2781d3365..bed87b77c 100644 --- a/ietf/submit/forms.py +++ b/ietf/submit/forms.py @@ -659,3 +659,13 @@ class MessageModelForm(forms.ModelForm): self.fields['frm'].label='From' self.fields['frm'].widget.attrs['readonly'] = True self.fields['reply_to'].widget.attrs['readonly'] = True + + +class SubmissionSearchForm(forms.Form): + """Form used for search_submission""" + + name = forms.CharField(max_length=255, required=True, label="I-D name") + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.fields["name"].widget.attrs["placeholder"] = "draft-..." diff --git a/ietf/submit/views.py b/ietf/submit/views.py index 3f745741e..f710bdeb0 100644 --- a/ietf/submit/views.py +++ b/ietf/submit/views.py @@ -26,17 +26,47 @@ from ietf.group.utils import group_features_group_filter from ietf.ietfauth.utils import has_role, role_required from ietf.mailtrigger.utils import gather_address_lists from ietf.person.models import Email -from ietf.submit.forms import (SubmissionAutoUploadForm, AuthorForm, SubmitterForm, EditSubmissionForm, - PreapprovalForm, ReplacesForm, SubmissionManualUploadForm) +from ietf.submit.forms import ( + SubmissionAutoUploadForm, + AuthorForm, + SubmitterForm, + EditSubmissionForm, + PreapprovalForm, + ReplacesForm, + SubmissionManualUploadForm, + SubmissionSearchForm, +) from ietf.submit.mail import send_full_url, send_manual_post_request -from ietf.submit.models import (Submission, Preapproval, SubmissionExtResource, - DraftSubmissionStateName ) -from ietf.submit.tasks import process_uploaded_submission_task, process_and_accept_uploaded_submission_task, poke -from ietf.submit.utils import ( approvable_submissions_for_user, preapprovals_for_user, - recently_approved_by_user, validate_submission, create_submission_event, docevent_from_submission, - post_submission, cancel_submission, rename_submission_files, remove_submission_files, - get_submission, save_files, clear_existing_files, accept_submission, accept_submission_requires_group_approval, - accept_submission_requires_prev_auth_approval, update_submission_external_resources) +from ietf.submit.models import ( + Submission, + Preapproval, + SubmissionExtResource, + DraftSubmissionStateName, +) +from ietf.submit.tasks import ( + process_uploaded_submission_task, + process_and_accept_uploaded_submission_task, + poke, +) +from ietf.submit.utils import ( + approvable_submissions_for_user, + preapprovals_for_user, + recently_approved_by_user, + validate_submission, + create_submission_event, + docevent_from_submission, + post_submission, + cancel_submission, + rename_submission_files, + remove_submission_files, + get_submission, + save_files, + clear_existing_files, + accept_submission, + accept_submission_requires_group_approval, + accept_submission_requires_prev_auth_approval, + update_submission_external_resources, +) from ietf.stats.utils import clean_country_name from ietf.utils.accesstoken import generate_access_token from ietf.utils.log import log @@ -195,24 +225,33 @@ def api_submit_tombstone(request): def tool_instructions(request): return render(request, 'submit/tool_instructions.html', {'selected': 'instructions'}) + def search_submission(request): - error = None - name = None - if request.method == 'POST': - name = request.POST.get('name', '') - submission = Submission.objects.filter(name=name).order_by('-pk').first() - if submission: - return redirect(submission_status, submission_id=submission.pk) - else: - if re.search(r'-\d\d$', name): - submission = Submission.objects.filter(name=name[:-3]).order_by('-pk').first() - if submission: - return redirect(submission_status, submission_id=submission.pk) - error = 'No valid submission found for %s' % name - return render(request, 'submit/search_submission.html', - {'selected': 'status', - 'error': error, - 'name': name}) + if request.method == "POST": + form = SubmissionSearchForm(request.POST) + if form.is_valid(): + name = form.cleaned_data["name"] + submission = Submission.objects.filter(name=name).order_by("-pk").first() + if submission: + return redirect(submission_status, submission_id=submission.pk) + else: + if re.search(r"-\d\d$", name): + submission = ( + Submission.objects.filter(name=name[:-3]) + .order_by("-pk") + .first() + ) + if submission: + return redirect(submission_status, submission_id=submission.pk) + form.add_error(None, f"No valid submission found for {name}") + else: + form = SubmissionSearchForm() + return render( + request, + "submit/search_submission.html", + {"selected": "status", "form": form}, + ) + def can_edit_submission(user, submission, access_token): key_matched = access_token and submission.access_token() == access_token diff --git a/ietf/templates/submit/search_submission.html b/ietf/templates/submit/search_submission.html index 3f827abbe..807d6d7d8 100644 --- a/ietf/templates/submit/search_submission.html +++ b/ietf/templates/submit/search_submission.html @@ -12,14 +12,8 @@
{% csrf_token %}
- - + {% bootstrap_form form %}
- {% if error %} -

- {{ error }} -

- {% endif %}
{% endblock %} \ No newline at end of file