Skip to content

Commit 8910184

Browse files
Copilotmykaul
andcommitted
Reuse decode_val function in exception handler
Per review feedback, refactored to reuse decode_val() in exception handler: - Moved try/except blocks inside each branch (encryption enabled/disabled) - Exception handler now calls decode_val() when column_encryption_policy exists - Eliminates code duplication by reusing the decode_val function - Maintains same error reporting behavior This makes the code cleaner and more maintainable. Co-authored-by: mykaul <[email protected]>
1 parent 92a5963 commit 8910184

File tree

1 file changed

+24
-19
lines changed

1 file changed

+24
-19
lines changed

cassandra/protocol.py

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -732,31 +732,36 @@ def decode_val(val, col_md, col_desc):
732732

733733
def decode_row(row):
734734
return tuple(decode_val(val, col_md, col_desc) for val, col_md, col_desc in zip(row, column_metadata, col_descs))
735+
736+
try:
737+
self.parsed_rows = [decode_row(row) for row in rows]
738+
except Exception:
739+
for row in rows:
740+
for val, col_md, col_desc in zip(row, column_metadata, col_descs):
741+
try:
742+
decode_val(val, col_md, col_desc)
743+
except Exception as e:
744+
raise DriverException('Failed decoding result column "%s" of type %s: %s' % (col_md[2],
745+
col_md[3].cql_parameterized_type(),
746+
str(e)))
735747
else:
736748
# Simple path without encryption - just decode raw bytes directly
737749
def decode_row(row):
738750
return tuple(col_md[3].from_binary(val, protocol_version) for val, col_md in zip(row, column_metadata))
739751

740-
try:
741-
self.parsed_rows = [decode_row(row) for row in rows]
742-
except Exception:
743-
# Create col_descs only if needed for error reporting
744-
col_descs = [ColDesc(md[0], md[1], md[2]) for md in column_metadata]
745-
for row in rows:
746-
for val, col_md, col_desc in zip(row, column_metadata, col_descs):
747-
try:
748-
# Fallback to original decode_val logic for error reporting
749-
if column_encryption_policy:
750-
uses_ce = column_encryption_policy.contains_column(col_desc)
751-
col_type = column_encryption_policy.column_type(col_desc) if uses_ce else col_md[3]
752-
raw_bytes = column_encryption_policy.decrypt(col_desc, val) if uses_ce else val
753-
col_type.from_binary(raw_bytes, protocol_version)
754-
else:
752+
try:
753+
self.parsed_rows = [decode_row(row) for row in rows]
754+
except Exception:
755+
# Create col_descs only if needed for error reporting
756+
col_descs = [ColDesc(md[0], md[1], md[2]) for md in column_metadata]
757+
for row in rows:
758+
for val, col_md, col_desc in zip(row, column_metadata, col_descs):
759+
try:
755760
col_md[3].from_binary(val, protocol_version)
756-
except Exception as e:
757-
raise DriverException('Failed decoding result column "%s" of type %s: %s' % (col_md[2],
758-
col_md[3].cql_parameterized_type(),
759-
str(e)))
761+
except Exception as e:
762+
raise DriverException('Failed decoding result column "%s" of type %s: %s' % (col_md[2],
763+
col_md[3].cql_parameterized_type(),
764+
str(e)))
760765

761766
def recv_results_prepared(self, f, protocol_version, user_type_map):
762767
self.query_id = read_binary_string(f)

0 commit comments

Comments
 (0)