fix: Accept&ignore group_type for some views

This commit is contained in:
Jennifer Richards 2024-02-12 17:38:36 -04:00
parent 4c396e6645
commit 3157cf65d1
No known key found for this signature in database
GPG key ID: 9B2BF5C5ADDA6A6E
5 changed files with 41 additions and 3 deletions

View file

@ -24,6 +24,7 @@ from ietf.group.models import Group
from ietf.doc.models import DocEvent, Document
from ietf.doc.utils_search import prepare_document_table
from ietf.person.utils import lookup_persons
from ietf.utils.decorators import ignore_view_kwargs
from ietf.utils.http import is_ajax
from ietf.utils.response import permission_denied
@ -70,6 +71,7 @@ def view_list(request, email_or_name=None):
})
@login_required
@ignore_view_kwargs("group_type")
def manage_list(request, email_or_name=None, acronym=None):
# we need to be a bit careful because clist may not exist in the
# database so we can't call related stuff on it yet
@ -209,6 +211,7 @@ def untrack_document(request, name, email_or_name=None, acronym=None):
})
@ignore_view_kwargs("group_type")
def export_to_csv(request, email_or_name=None, acronym=None):
try:
clist = lookup_community_list(request, email_or_name, acronym)
@ -253,6 +256,7 @@ def export_to_csv(request, email_or_name=None, acronym=None):
return response
@ignore_view_kwargs("group_type")
def feed(request, email_or_name=None, acronym=None):
try:
clist = lookup_community_list(request, email_or_name, acronym)
@ -292,6 +296,7 @@ def feed(request, email_or_name=None, acronym=None):
@login_required
@ignore_view_kwargs("group_type")
def subscription(request, email_or_name=None, acronym=None):
try:
clist = lookup_community_list(request, email_or_name, acronym)

View file

@ -21,9 +21,11 @@ from ietf.doc.models import NewRevisionDocEvent
from ietf.doc.utils import add_state_change_event, check_common_doc_name_rules
from ietf.group.models import Group
from ietf.group.utils import can_manage_materials
from ietf.utils.decorators import ignore_view_kwargs
from ietf.utils.response import permission_denied
@login_required
@ignore_view_kwargs("group_type")
def choose_material_type(request, acronym):
group = get_object_or_404(Group, acronym=acronym)
if not group.features.has_nonsession_materials:
@ -91,6 +93,7 @@ class UploadMaterialForm(forms.Form):
return name
@login_required
@ignore_view_kwargs("group_type")
def edit_material(request, name=None, acronym=None, action=None, doc_type=None):
# the materials process is not very developed, so at the moment we
# handle everything through the same view/form

View file

@ -399,7 +399,7 @@ def edit_milestones(request, acronym, group_type=None, milestone_set="current"):
can_change_uses_milestone_dates=can_change_uses_milestone_dates))
@login_required
def reset_charter_milestones(request, group_type, acronym):
def reset_charter_milestones(request, acronym, group_type=None):
"""Reset charter milestones to the currently in-use milestones."""
group = get_group_or_404(acronym, group_type)
if not group.features.has_milestones:

View file

@ -116,6 +116,7 @@ from ietf.dbtemplate.models import DBTemplate
from ietf.mailtrigger.utils import gather_address_lists
from ietf.mailtrigger.models import Recipient
from ietf.settings import MAILING_LIST_INFO_URL
from ietf.utils.decorators import ignore_view_kwargs
from ietf.utils.response import permission_denied
from ietf.utils.text import strip_suffix
from ietf.utils import markdown
@ -2158,7 +2159,8 @@ def appeals(request, acronym, group_type=None):
),
)
def appeal_artifact(request, acronym, artifact_id, group_type=None):
@ignore_view_kwargs("group_type")
def appeal_artifact(request, acronym, artifact_id):
artifact = get_object_or_404(AppealArtifact, pk=artifact_id)
if artifact.is_markdown():
artifact_html = markdown.markdown(artifact.bits.tobytes().decode("utf-8"))
@ -2177,7 +2179,8 @@ def appeal_artifact(request, acronym, artifact_id, group_type=None):
)
@role_required("Secretariat")
def appeal_artifact_markdown(request, acronym, artifact_id, group_type=None):
@ignore_view_kwargs("group_type")
def appeal_artifact_markdown(request, acronym, artifact_id):
artifact = get_object_or_404(AppealArtifact, pk=artifact_id)
if artifact.is_markdown():
return HttpResponse(artifact.bits, content_type=artifact.content_type)

View file

@ -114,3 +114,30 @@ def memoize(func):
# we cannot set up the cache here.
return decorate(func, _memoize)
def ignore_view_kwargs(*args):
"""Ignore the specified kwargs if they are present
Usage:
@ignore_view_kwargs("ignore_arg1", "ignore_arg2")
def my_view(request, good_arg, ignore_arg1, ignore_arg2):
...
This will allow my_view() to be used in url() paths that have zero, one, or both of
ignore_arg1 and ignore_arg2 captured. These will be ignored, while good_arg will still
be captured as usual.
"""
kwargs_to_ignore = args
def decorate(view):
@wraps(view)
def wrapped(*args, **kwargs):
for kwarg in kwargs_to_ignore:
kwargs.pop(kwarg, None)
return view(*args, **kwargs)
return wrapped
return decorate