This commit is contained in:
zandercymatics 2024-09-30 09:08:01 -06:00
parent df3f37bf40
commit 7602629dc5
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
3 changed files with 51 additions and 42 deletions

View file

@ -20,7 +20,11 @@ from epplibwrapper.errors import ErrorCode, RegistryError
from registrar.models.user_domain_role import UserDomainRole from registrar.models.user_domain_role import UserDomainRole
from waffle.admin import FlagAdmin from waffle.admin import FlagAdmin
from waffle.models import Sample, Switch from waffle.models import Sample, Switch
from registrar.utility.admin_helpers import get_all_action_needed_reason_emails, get_action_needed_reason_default_email, get_field_links_as_list from registrar.utility.admin_helpers import (
get_all_action_needed_reason_emails,
get_action_needed_reason_default_email,
get_field_links_as_list,
)
from registrar.models import Contact, Domain, DomainRequest, DraftDomain, User, Website, SeniorOfficial from registrar.models import Contact, Domain, DomainRequest, DraftDomain, User, Website, SeniorOfficial
from registrar.utility.constants import BranchChoices from registrar.utility.constants import BranchChoices
from registrar.utility.errors import FSMDomainRequestError, FSMErrorCodes from registrar.utility.errors import FSMDomainRequestError, FSMErrorCodes

View file

@ -335,6 +335,7 @@ def get_url_name(path):
logger.error(f"No matching URL name found for path: {path}") logger.error(f"No matching URL name found for path: {path}")
return None return None
def value_of_attribute(obj, attribute_name: str): def value_of_attribute(obj, attribute_name: str):
"""Returns the value of getattr if the attribute isn't callable. """Returns the value of getattr if the attribute isn't callable.
If it is, execute the underlying function and return that result instead.""" If it is, execute the underlying function and return that result instead."""

View file

@ -41,49 +41,53 @@ def get_action_needed_reason_default_email(request, domain_request, action_neede
def get_field_links_as_list( def get_field_links_as_list(
queryset, model_name, attribute_name=None, link_info_attribute=None, separator=None, msg_for_none="-", queryset,
): model_name,
""" attribute_name=None,
Generate HTML links for items in a queryset, using a specified attribute for link text. link_info_attribute=None,
separator=None,
msg_for_none="-",
):
"""
Generate HTML links for items in a queryset, using a specified attribute for link text.
Args: Args:
queryset: The queryset of items to generate links for. queryset: The queryset of items to generate links for.
model_name: The model name used to construct the admin change URL. model_name: The model name used to construct the admin change URL.
attribute_name: The attribute or method name to use for link text. If None, the item itself is used. attribute_name: The attribute or method name to use for link text. If None, the item itself is used.
link_info_attribute: Appends f"({value_of_attribute})" to the end of the link. link_info_attribute: Appends f"({value_of_attribute})" to the end of the link.
separator: The separator to use between links in the resulting HTML. separator: The separator to use between links in the resulting HTML.
If none, an unordered list is returned. If none, an unordered list is returned.
msg_for_none: What to return when the field would otherwise display None. msg_for_none: What to return when the field would otherwise display None.
Defaults to `-`. Defaults to `-`.
Returns: Returns:
A formatted HTML string with links to the admin change pages for each item. A formatted HTML string with links to the admin change pages for each item.
""" """
links = [] links = []
for item in queryset: for item in queryset:
# This allows you to pass in attribute_name="get_full_name" for instance. # This allows you to pass in attribute_name="get_full_name" for instance.
if attribute_name: if attribute_name:
item_display_value = value_of_attribute(item, attribute_name) item_display_value = value_of_attribute(item, attribute_name)
else:
item_display_value = item
if item_display_value:
change_url = reverse(f"admin:registrar_{model_name}_change", args=[item.pk])
link = f'<a href="{change_url}">{escape(item_display_value)}</a>'
if link_info_attribute:
link += f" ({value_of_attribute(item, link_info_attribute)})"
if separator:
links.append(link)
else:
links.append(f"<li>{link}</li>")
# If no separator is specified, just return an unordered list.
if separator:
return format_html(separator.join(links)) if links else msg_for_none
else: else:
links = "".join(links) item_display_value = item
return format_html(f'<ul class="add-list-reset">{links}</ul>') if links else msg_for_none
if item_display_value:
change_url = reverse(f"admin:registrar_{model_name}_change", args=[item.pk])
link = f'<a href="{change_url}">{escape(item_display_value)}</a>'
if link_info_attribute:
link += f" ({value_of_attribute(item, link_info_attribute)})"
if separator:
links.append(link)
else:
links.append(f"<li>{link}</li>")
# If no separator is specified, just return an unordered list.
if separator:
return format_html(separator.join(links)) if links else msg_for_none
else:
links = "".join(links)
return format_html(f'<ul class="add-list-reset">{links}</ul>') if links else msg_for_none