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.contrib.contenttypes.models import ContentType
from django.http.response import HttpResponseRedirect from django.http.response import HttpResponseRedirect
from django.urls import reverse 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 from . import models
logger = logging.getLogger(__name__) 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 # 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 # foreign_key - order_by
SortingDictInterface( # Handles fields that are sorted by 'first_name / last_name
audited_admin_item_names, SortingDict(
audited_admin_orderby_names ["submitter", "authorizing_official", "investigator", "creator", "user"],
).sorting_dict, ['first_name', 'last_name']
),
# Handles fields that are sorted by 'name' # Handles fields that are sorted by 'name'
SortingDictInterface( SortingDict(
special_audited_admin_item_names, ["domain", "requested_domain"],
special_audited_admin_orderby_names ["name"]
).sorting_dict )
] ]

View file

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