mirror of
https://github.com/GSA/notifications-api.git
synced 2026-02-02 09:26:08 -05:00
Verify that attribute exists on *History model when versioning objects
When createing a history instance of the updated object `create_history` sets attributes using `setattr`. Since SQLAlchemy model instances are Python objects they don't prevent new attributes being created by setattr, which means that if history models are missing some of the columns the attributes will still be assigned, but their values will not be persisted by SQLAlchemy since database columns for them do not exist. To avoid this, we check that the attribute is defined on the `history_cls` and raise an error if it isn't.
This commit is contained in:
@@ -219,6 +219,8 @@ def create_history(obj, history_cls=None):
|
||||
data['created_at'] = obj.created_at
|
||||
|
||||
for key, value in data.items():
|
||||
if not hasattr(history_cls, key):
|
||||
raise AttributeError("{} has no attribute '{}'".format(history_cls.__name__, key))
|
||||
setattr(history, key, value)
|
||||
|
||||
return history
|
||||
|
||||
Reference in New Issue
Block a user