__init__.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. """Flask application factory for Work Statistics System."""
  2. from flask import Flask
  3. from flask_sqlalchemy import SQLAlchemy
  4. from flask_cors import CORS
  5. db = SQLAlchemy()
  6. def create_app(config_name='default'):
  7. """Create and configure the Flask application.
  8. Args:
  9. config_name: Configuration name ('default', 'testing', 'production')
  10. Returns:
  11. Configured Flask application instance
  12. """
  13. app = Flask(__name__)
  14. # Load configuration
  15. from app.config import config
  16. app.config.from_object(config[config_name])
  17. # Initialize extensions
  18. db.init_app(app)
  19. CORS(app)
  20. # Register API routes
  21. from app.routes import register_routes
  22. register_routes(app)
  23. # Create database tables and initialize default admin
  24. with app.app_context():
  25. db.create_all()
  26. _init_default_admin()
  27. return app
  28. def _init_default_admin():
  29. """Initialize default admin account if none exists.
  30. This ensures there is always at least one admin account
  31. available for login when the application starts.
  32. """
  33. from flask import current_app
  34. from app.services.admin_service import AdminService
  35. # Skip default admin creation in testing mode
  36. if current_app.config.get('TESTING', False):
  37. return
  38. created, message = AdminService.create_default_admin()
  39. if created:
  40. print(f"[Init] {message}")
  41. # Silently skip if admins already exist