Compare commits

..

No commits in common. "7fa65f80ba16afb0da1548a4fc63f934b36a40cc" and "85db628921227820065d654a9dc905d343bf4ceb" have entirely different histories.

View file

@ -51,24 +51,30 @@ def _wrapped_insert(model_class: Type, data_list: dict | list, session: Session,
logger.info(f"Starting insert for {model_class.__name__}")
# Get valid field names upfront
valid_fields = {col.name for col in model_class.__table__.columns}
# Filter data proactively
filtered_data_list = []
all_dropped_fields = set()
try:
for each_json in data_list:
filtered_json = {k: v for k, v in each_json.items() if k in valid_fields}
filtered_data_list.append(filtered_json)
instance = model_class(**each_json)
session.add(instance)
session.commit() # Commits both delete + inserts atomically
logger.info("Finished wrapped insert!")
return DatabaseOperation(valid=True)
# Track dropped fields
dropped = set(each_json.keys()) - valid_fields
all_dropped_fields.update(dropped)
except TypeError as e:
"""
This is triggered when an Old client was sent unknown fields from the API in the JSON,
And it's handled inside the wrapped function because it needs access to the variables used.
"""
session.rollback()
# Log if we dropped anything
if all_dropped_fields:
logger.warning(f"Filtered unknown fields before insert: {all_dropped_fields}")
valid_fields = {col.name for col in model_class.__table__.columns}
filtered_data_list = [
{k: v for k, v in each_json.items() if k in valid_fields}
for each_json in data_list
]
dropped_fields = set().union(*(set(d.keys()) - valid_fields for d in data_list))
if dropped_fields:
logger.warning(f"Old Client Dropped unknown fields: {dropped_fields}")
try:
for filtered_json in filtered_data_list:
@ -76,22 +82,23 @@ def _wrapped_insert(model_class: Type, data_list: dict | list, session: Session,
session.add(instance)
session.commit()
logger.info("Finished wrapped insert!")
# the fix worked,
return DatabaseOperation(
valid=True,
tried_filtered=bool(all_dropped_fields),
message=f"Inserted successfully" + (f" after filtering {all_dropped_fields}" if all_dropped_fields else "")
tried_filtered=True,
message=f"Inserted after filtering {dropped_fields}"
)
except Exception as e:
# Unexpected error during insert
session.rollback()
except Exception as retry_error:
# Signal wrapper to rollback
raise WrapperRollback(DatabaseOperation(
valid=False,
error_type=DBErrorType.UNKNOWN,
message=f"Wrapped Insert Failed: {str(e)}"
error_type=DBErrorType.OLD_CLIENT_NEW_API,
tried_filtered=True,
message=str(f"Wrapped Insert Failed on Retry of a TypeError: {retry_error}")
))
# =================== Isolation Test ======================
"""
Spoof Failure of an operational error to trigger/test a migration