app.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import json
  2. import logging
  3. import os
  4. from datetime import datetime
  5. from flask import Flask
  6. from werkzeug.middleware.proxy_fix import ProxyFix
  7. # --- Configuration -----------------------------------------------------------
  8. _config_path = os.environ.get(
  9. "BACKUPMANAGER_CONFIG",
  10. os.path.join(os.path.dirname(os.path.abspath(__file__)), "config.py"),
  11. )
  12. app = Flask(__name__)
  13. app.config.from_pyfile(_config_path)
  14. app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + app.config["DB_PATH"]
  15. app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
  16. app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_prefix=1)
  17. app.jinja_env.filters["fromjson"] = json.loads
  18. os.makedirs(os.path.dirname(app.config["LOG_PATH"]), exist_ok=True)
  19. logging.basicConfig(
  20. filename=app.config["LOG_PATH"],
  21. level=logging.INFO,
  22. format="%(asctime)s %(levelname)s %(message)s",
  23. )
  24. # --- Extensions --------------------------------------------------------------
  25. from db import db, Job
  26. db.init_app(app)
  27. from scheduler import init_scheduler, schedule_job
  28. # --- Blueprints --------------------------------------------------------------
  29. from blueprints.jobs import bp as bp_jobs
  30. from blueprints.destinations import bp as bp_dest
  31. from blueprints.network import bp as bp_network
  32. from blueprints.settings import bp as bp_cfg
  33. from blueprints.api import bp as bp_api
  34. app.register_blueprint(bp_jobs)
  35. app.register_blueprint(bp_dest)
  36. app.register_blueprint(bp_network)
  37. app.register_blueprint(bp_cfg)
  38. app.register_blueprint(bp_api)
  39. # --- Context processor -------------------------------------------------------
  40. @app.context_processor
  41. def _inject_globals():
  42. return {
  43. "instance_name": app.config.get("INSTANCE_NAME", ""),
  44. "now": datetime.utcnow(),
  45. }
  46. # --- Démarrage ---------------------------------------------------------------
  47. with app.app_context():
  48. db.create_all()
  49. init_scheduler(app)
  50. for _job in Job.query.filter_by(enabled=True).all():
  51. schedule_job(_job)