Skip to content

Commit

Permalink
Make lookup ABC resilient to field lists as tuple/list mix, see #HEA-141
Browse files Browse the repository at this point in the history
  • Loading branch information
chrispreee committed Jan 17, 2024
1 parent a8bcb67 commit 7f45ef0
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions apps/common/lookups.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ class Lookup(ABC):

def __init__(self, filters: dict = {}):
# Make sure we don't have any fields in multiple categories
assert len(set(self.id_fields + self.parent_fields + self.lookup_fields)) == len(self.id_fields) + len(
assert len(set((*self.id_fields, *self.parent_fields, *self.lookup_fields))) == len(self.id_fields) + len(
self.parent_fields
) + len(self.lookup_fields), "id_fields, parent_fields and lookup_fields must not contain duplicate entries"

Expand All @@ -80,7 +80,7 @@ def __init__(self, filters: dict = {}):
self.filters = filters

def get_queryset_columns(self):
return self.lookup_fields + self.parent_fields + self.id_fields
return [*self.lookup_fields, *self.parent_fields, *self.id_fields]

def get_queryset(self):
"""
Expand Down Expand Up @@ -127,7 +127,7 @@ def prepare_lookup_df(self):
df = self.get_lookup_df()

# Melt the non-id columns
df = df.melt(id_vars=self.id_fields + self.parent_fields, value_name="lookup_key").drop(
df = df.melt(id_vars=[*self.id_fields, *self.parent_fields], value_name="lookup_key").drop(
["variable"], axis="columns"
)

Expand All @@ -147,7 +147,7 @@ def prepare_lookup_df(self):

df = df.drop_duplicates()

df = df.sort_values(by=self.id_fields + self.parent_fields)
df = df.sort_values(by=[*self.id_fields, *self.parent_fields])

if not self.composite_key:
df = df.rename(columns={self.id_fields[0]: "lookup_value"})
Expand Down Expand Up @@ -216,7 +216,7 @@ def do_lookup(
right_fields.append("lookup_key")

# Set up the fields we need in the lookup dataframe
lookup_fields = ["lookup_value"] + right_fields
lookup_fields = ["lookup_value", *right_fields]

# Get the lookup dataframe, dropping duplicates to eliminate duplicates caused by
# lookup key and primary key when there isn't actually a lookup_column to need them
Expand Down

0 comments on commit 7f45ef0

Please sign in to comment.