Skip to content

Commit cecd701

Browse files
perf(spp_metric_service): address gemini-code-assist review findings
- recordset subtraction instead of lambda filter for individuals - batch individual ids from memberships (avoids N+1) - check _fields membership instead of hasattr on recordsets - early return for falsy raw_value before code search
1 parent 735809d commit cecd701

2 files changed

Lines changed: 8 additions & 5 deletions

File tree

spp_metric_service/models/breakdown_service.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,9 @@ def _expand_groups_to_members(self, registrant_ids):
122122
Partner = self.env["res.partner"].sudo() # nosemgrep: odoo-sudo-without-context,odoo-sudo-on-sensitive-models
123123
records = Partner.browse(registrant_ids).exists()
124124

125-
group_ids = records.filtered("is_group").ids
126-
individual_ids = set(records.filtered(lambda r: not r.is_group).ids)
125+
groups = records.filtered("is_group")
126+
group_ids = groups.ids
127+
individual_ids = set((records - groups).ids)
127128

128129
if not group_ids:
129130
return list(individual_ids)
@@ -137,7 +138,6 @@ def _expand_groups_to_members(self, registrant_ids):
137138
]
138139
)
139140

140-
for membership in memberships:
141-
individual_ids.add(membership.individual.id)
141+
individual_ids.update(memberships.individual.ids)
142142

143143
return list(individual_ids)

spp_metric_service/models/demographic_dimension.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ def _evaluate_field(self, record):
189189
# Odoo recordset (Many2one). Empty recordset means the field is unset.
190190
if not value:
191191
return self.default_value or "unknown"
192-
if hasattr(value, "code") and value.code:
192+
if "code" in value._fields and value.code:
193193
key = str(value.code)
194194
else:
195195
key = value.display_name or str(value.id)
@@ -266,6 +266,9 @@ def _lookup_m2o_label(self, raw_value):
266266
:param raw_value: The raw dimension value (typically a code string)
267267
:returns: display_name or None if not found
268268
"""
269+
if not raw_value:
270+
return None
271+
269272
# Only handle simple field paths (one segment, no dotted traversal
270273
# like "gender_id.code" where the user explicitly chose a sub-field)
271274
if "." in self.field_path:

0 commit comments

Comments
 (0)