Build a hashable key from scalar identity fields.
(row, headers)
| 24 | |
| 25 | |
| 26 | def row_key(row, headers): |
| 27 | """Build a hashable key from scalar identity fields.""" |
| 28 | def _hashable(v): |
| 29 | if isinstance(v, list): |
| 30 | return tuple(sorted(str(x) for x in v)) |
| 31 | return v |
| 32 | |
| 33 | if isinstance(row, dict): |
| 34 | # Use only scalar identity fields for keying (skip list fields like team_uid) |
| 35 | id_fields = ['record_uid', 'shared_folder_uid', 'team_uid', 'email', 'vault_owner'] |
| 36 | parts = tuple(_hashable(row.get(k)) for k in id_fields if k in row and not isinstance(row.get(k), list)) |
| 37 | if parts: |
| 38 | return parts |
| 39 | return tuple((k, _hashable(v)) for k, v in sorted(row.items())) |
| 40 | if isinstance(row, (list, tuple)): |
| 41 | return tuple(_hashable(x) for x in row[:2]) |
| 42 | return (row,) |
| 43 | |
| 44 | |
| 45 | def _normalize(v): |
no test coverage detected