diff --git a/atst/models/mixins/auditable.py b/atst/models/mixins/auditable.py index 642dd11a..9606b2d7 100644 --- a/atst/models/mixins/auditable.py +++ b/atst/models/mixins/auditable.py @@ -3,8 +3,6 @@ from flask import g from sqlalchemy.orm import class_mapper from sqlalchemy.orm.attributes import get_history -from atst.database import db -from atst.models.workspace_role import WorkspaceRole from atst.models.audit_event import AuditEvent from atst.utils import camel_to_snake, getattr_path @@ -13,38 +11,6 @@ ACTION_UPDATE = "update" ACTION_DELETE = "delete" -class AuditableWorkspaceRole(AuditableMixin): - target = target - changed_state = get_changed_state() - event_details = get_event_details() - - @classmethod - def get_changed_state(self, resource): - previous_state = {} - inspr = inspect(target) - attrs = class_mapper(target.__class__).column_attrs - for attr in attrs: - history = getattr(inspr.attrs, attr.key).history - if history.has_changes(): - previous_state[attr.key] = get_history(target, attr.key)[2].pop() - - from_role = previous_role["role"] - to_role = target.role_displayname - return {"role": [from_role, to_role]} - - @classmethod - def get_event_details(self): - # get user that is being updated - # does this need to query the db? - ws_role_id = target.auditable_request_id() - ws_role = ( - db.session.query(WorkspaceRole) - .filter(WorkspaceRole.id == ws_role_id) - .first() - ) - return {"user": ws_role.user_name} - - class AuditableMixin(object): @staticmethod def create_audit_event(connection, resource, action): @@ -105,7 +71,7 @@ class AuditableMixin(object): return getattr_path(self, "history") def auditable_event_details(self): - return getattr_path(self, "auditable_event_details") + return getattr_path(self, "event_details") def auditable_resource_type(self): return camel_to_snake(type(self).__name__) diff --git a/atst/models/workspace_role.py b/atst/models/workspace_role.py index 2942e448..b536179a 100644 --- a/atst/models/workspace_role.py +++ b/atst/models/workspace_role.py @@ -10,6 +10,7 @@ from atst.database import db from atst.models.environment_role import EnvironmentRole from atst.models.project import Project from atst.models.environment import Environment +from atst.models.role import Role class Status(Enum): @@ -43,14 +44,15 @@ class WorkspaceRole(Base, mixins.TimestampsMixin, mixins.AuditableMixin): @property def history(self): - previous_state = AuditableMixin.get_history(self) - from_role = previous_role["role"] + previous_state = mixins.AuditableMixin.get_history(self) + from_role_id = previous_state["role_id"] + from_role = db.session.query(Role).filter(Role.id == from_role_id).one() to_role = self.role_displayname - return {"role": [from_role, to_role]} + return {"role": [from_role.display_name, to_role]} @property - def auditable_event_details(self): - return {"updated_user": self.user_name, "updated_user_id" = self.user_id} + def event_details(self): + return {"updated_user": self.user_name, "updated_user_id": str(self.user_id)} @property def latest_invitation(self):