Files
gurix f1d8bae6a1 refactor: split monolithic app.py into modular Flask application with factory pattern
- Created app/ package with 6 modules:
  - __init__.py: Application factory (create_app function)
  - routes.py: All route handlers (473 lines)
  - models.py: Data persistence layer (41 lines)
  - validators.py: Input validation functions (48 lines)
  - email_service.py: Email sending functions (85 lines)
  - utils.py: Utility functions (30 lines)

- Implemented Flask application factory pattern
- Created run.py as minimal entry point
- Updated all test imports to use new module structure
- Fixed template/static folder paths for package structure

- All 102 tests passing
- Improved maintainability with clear separation of concerns
- Follows Flask best practices for scalable applications
2025-12-27 22:36:05 +01:00

31 lines
935 B
Python

"""
Utility functions for the Flask job application system.
"""
from datetime import datetime
from flask import session, current_app
def check_rate_limit():
"""
Check if user is submitting forms too quickly.
Returns (allowed: bool, wait_seconds: int)
"""
now = datetime.now()
last_submit_str = session.get('last_submission_time')
if last_submit_str:
try:
last_submit = datetime.fromisoformat(last_submit_str)
elapsed = (now - last_submit).total_seconds()
if elapsed < current_app.config['RATE_LIMIT_SECONDS']:
wait_seconds = int(current_app.config['RATE_LIMIT_SECONDS'] - elapsed) + 1
return False, wait_seconds
except (ValueError, TypeError):
# Invalid timestamp, allow submission
pass
# Update last submission time
session['last_submission_time'] = now.isoformat()
return True, 0