From af7bb2a4198de3834193bc6bb6968e019aed2cdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Am=C3=A9lie=20Rondot?= Date: Sat, 10 Feb 2024 17:17:48 +0100 Subject: [PATCH] Refacto: introduce intermediary methods to create cells in case of primary key constraint and considering case-sensitivity --- frictionless/resources/table.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/frictionless/resources/table.py b/frictionless/resources/table.py index e59f921d29..8a8882bf95 100644 --- a/frictionless/resources/table.py +++ b/frictionless/resources/table.py @@ -413,18 +413,29 @@ def primary_key_cells( self, row: Row, case_sensitive: bool - ) -> Tuple[Row, Any]: + ) -> Tuple[str, Any]: """Create a tuple containg all cells related to primary_key """ + return tuple(row[label] for label in + self.labels_related_to_primary_key(row, case_sensitive)) + + def labels_related_to_primary_key( + self, + row: Row, + case_sensitive: bool, + ) -> List[str]: + """Create a list of TabelResource labels which correspond to the + primary_key schema considering case-sensitivity + """ if case_sensitive: - cells = tuple(row[name] for name in self.schema.primary_key) - else: # Ignore case - lower_primary_keys = [ + labels_primary_key = self.schema.primary_key + else: + lower_primary_key = [ pk.lower() for pk in self.schema.primary_key ] - labels_primary_key = [label for label in row.field_names if label.lower() in lower_primary_keys] - cells = tuple(row[label] for label in labels_primary_key) - return cells + labels_primary_key = [label for label in row.field_names + if label.lower() in lower_primary_key] + return labels_primary_key # Read def read_cells(self, *, size: Optional[int] = None) -> List[List[Any]]: