Files
TimeTracker/docs/ERROR_HANDLER_IMPROVEMENTS.md
Dries Peeters 3218ab012a feat: expand client portal and approval workflows
Add new client portal pages (dashboard, approvals, notifications, documents, reports) and extend API/routes/services to support client approvals, invoices/quotes views, and related notifications.

Update email templates and docs; add/adjust tests for new models/routes.
2026-01-02 07:52:32 +01:00

4.2 KiB

Error Handler Improvements

Date: 2025-01-27
Status: Completed


Summary

Reviewed and improved critical error handlers throughout the codebase, focusing on:

  • Data integrity operations (import/export)
  • User-facing operations
  • System operations (backup/restore)
  • Dashboard and admin operations

Improvements Made

1. Import/Export Error Handlers

File: app/routes/import_export.py

Changes:

  • Replaced bare except: clauses with specific exception handling
  • Added logging for database transaction failures
  • Improved error messages for better debugging

Before:

except:
    db.session.rollback()

After:

except Exception as db_error:
    db.session.rollback()
    current_app.logger.error(f"Failed to update import record status: {db_error}")

Impact: Better error tracking and debugging for import operations.


2. Admin Dashboard Error Handler

File: app/routes/admin.py

Changes:

  • Added logging for OIDC user count failures
  • Improved error context for debugging

Before:

except Exception:
    pass

After:

except Exception as e:
    # Log error but continue - OIDC user count is not critical for dashboard display
    current_app.logger.warning(f"Failed to count OIDC users: {e}", exc_info=True)

Impact: Better visibility into dashboard initialization issues.


3. PDF Layout Error Handlers

File: app/routes/admin.py

Changes:

  • Added logging for PDF template loading failures
  • Separated error handling for HTML and CSS loading
  • Improved error context

Before:

except Exception:
    pass

After:

except Exception as e:
    # Log but continue - template parsing failure is not critical
    current_app.logger.debug(f"Failed to parse PDF template HTML: {e}")

Impact: Better debugging for PDF layout issues.


4. Backup/Restore Error Handlers

File: app/utils/backup.py

Changes:

  • Added logging for progress callback failures
  • Added logging for manifest reading failures
  • Improved error context

Before:

except Exception:
    pass

After:

except Exception as e:
    # Log but continue - progress callback failure is not critical
    logger.debug(f"Progress callback failed: {e}")

Impact: Better visibility into backup/restore operations.


Error Handler Categories

Acceptable pass Statements

The following categories of pass statements are acceptable and do not need improvement:

  1. Date Parsing in Filters (expenses.py, payments.py)

    • Invalid dates in filter parameters are silently ignored
    • User gets feedback via flash messages
    • Status: Acceptable
  2. Cleanup Operations (backup.py)

    • Temp directory cleanup failures
    • Connection disposal failures
    • Status: Acceptable (cleanup failures don't affect core functionality)
  3. Optional Features (main.py)

    • Donation tracking table may not exist
    • Fallback values provided
    • Status: Acceptable

Remaining pass Statements

Most remaining pass statements are in:

  • Exception handlers for optional features - Acceptable
  • Cleanup operations - Acceptable
  • Filter parsing - Acceptable (with user feedback)

Total Critical Improvements: 4 areas improved


Recommendations

Completed

  1. Improved import/export error handling
  2. Improved admin dashboard error handling
  3. Improved PDF layout error handling
  4. Improved backup/restore error handling

Future Enhancements (Low Priority)

  1. Consider adding error monitoring (Sentry) integration for production
  2. Add user-friendly error messages for common failures
  3. Consider adding retry logic for transient failures

Conclusion

Critical error handlers have been improved with:

  • Better logging
  • More specific exception handling
  • Improved error context

The remaining pass statements are in acceptable locations where silent failures are appropriate (cleanup, optional features, filter parsing).

Overall Status: Complete - Critical error handlers improved.


Last Updated: 2025-01-27