mirror of
https://github.com/DRYTRIX/TimeTracker.git
synced 2026-05-17 10:29:49 -05:00
6881e554ce
Audit logs were not recording any changes because after_flush runs after SQL is emitted; by then session.new, session.dirty, and session.deleted can be cleared and attribute history for updates is often consumed, so the handler saw nothing to log. Changes: - Add receive_before_flush: process session.dirty (updates) and session.deleted (deletes) while history is still valid; stash session.new (creates) in session.info for after_flush. - Simplify receive_after_flush: only handle pending creates from session.info (instances now have ids), then session.flush() so audit rows are in the same transaction. - Register receive_before_flush for before_flush on Session, sessionmaker class, and SignallingSession. - Make receive_before_flush accept (session, flush_context, instances) to match SQLAlchemy's before_flush signature. - Remove db.session.flush() from AuditLog.log_change to avoid nested flush; rely on main flush or explicit flush in after_flush. - check_audit_logging.py: use entity_type='TimeEntry' to match get_entity_type (model __class__.__name__). - test_audit_logging: assert at least one AuditLog for create/update/ delete; use test_client for create; fix update to merge then mutate.