Fixe some linting issues / comments

This commit is contained in:
zandercymatics 2023-08-17 09:54:16 -06:00
parent 1371837103
commit ed26035763
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
2 changed files with 33 additions and 31 deletions

View file

@ -4,29 +4,26 @@ from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.contenttypes.models import ContentType
from django.http.response import HttpResponseRedirect
from django.urls import reverse
from registrar.models.utility.admin_form_order_helper import AdminFormOrderHelper, SortingDictInterface # noqa
from registrar.models.utility.admin_form_order_helper import AdminFormOrderHelper, SortingDict
# Split up for the linter
from registrar.models.utility.admin_form_order_helper import SortingDict
from . import models
logger = logging.getLogger(__name__)
# The linter does not like the length of SortingDictInterface, so these are split here
audited_admin_item_names = ["submitter", "authorizing_official",
"investigator", "creator", "user"]
audited_admin_orderby_names = ['first_name', 'last_name']
special_audited_admin_item_names = ["domain", "requested_domain"]
special_audited_admin_orderby_names = ["name"]
# Used to keep track of how we want to order_by certain FKs
foreignkey_orderby_dict: list[SortingDictInterface] = [
foreignkey_orderby_dict: list[SortingDict] = [
# foreign_key - order_by
SortingDictInterface(
audited_admin_item_names,
audited_admin_orderby_names
).sorting_dict,
# Handles fields that are sorted by 'first_name / last_name
SortingDict(
["submitter", "authorizing_official", "investigator", "creator", "user"],
['first_name', 'last_name']
),
# Handles fields that are sorted by 'name'
SortingDictInterface(
special_audited_admin_item_names,
special_audited_admin_orderby_names
).sorting_dict
SortingDict(
["domain", "requested_domain"],
["name"]
)
]

View file

@ -5,16 +5,14 @@ from django.forms import ModelChoiceField
logger = logging.getLogger(__name__)
class SortingDictInterface:
_model_list: Dict[type, type] = {}
_sort_list: list[type] = []
sorting_dict: Dict[type, type] = {}
class SortingDict:
_sorting_dict: Dict[type, type] = {}
# _model_list and _sort_list can be
# any length, and will be called multiple times.
# We want the perf advantage of a dictionary,
# while making creating new SortingDictInterface
# items pretty straight forward and easy (aka as a list)
# model_list can be will be called multiple times.
# Not super necessary, but it'd be nice
# to have the perf advantage of a dictionary,
# while minimizing typing when
# adding a new SortingDict (input as a list)
def convert_list_to_dict(self, value_list):
dictionary: Dict[type, type] = {}
for item in value_list:
@ -22,30 +20,37 @@ class SortingDictInterface:
return dictionary
def __init__(self, model_list, sort_list):
self.sorting_dict = {
self._sorting_dict = {
"dropDownSelected": self.convert_list_to_dict(model_list),
"sortBy": sort_list
}
def get_dict(self):
# This should never happen so we need to log this
if self._sorting_dict is None:
raise ValueError("_sorting_dict was None")
return self._sorting_dict
class AdminFormOrderHelper():
"""A helper class to order a dropdown field in Django Admin,
takes the fields you want to order by as an array"""
# Used to keep track of how we want to order_by certain FKs
_sorting_dict: list[SortingDictInterface] = []
_sorting_list: list[SortingDict] = []
def __init__(self, sort):
self._sorting_dict = sort
self._sorting_list = sort
def get_ordered_form_field(self, form_field, db_field) -> (ModelChoiceField | None):
"""Orders the queryset for a ModelChoiceField
based on the order_by_dict dictionary"""
_order_by_list = []
for item in self._sorting_dict:
drop_down_selected = item["dropDownSelected"]
sort_by = item["sortBy"]
for item in self._sorting_list:
item_dict = item.get_dict()
drop_down_selected = item_dict.get("dropDownSelected")
sort_by = item_dict.get("sortBy")
if db_field.name in drop_down_selected:
_order_by_list = sort_by