"""Aplicatia Flask: fabrica, blueprint-uri, filtre Jinja.""" from __future__ import annotations from datetime import datetime from pathlib import Path from flask import Flask from . import db from .config import Config from .labels import _format_datetime, _format_weight from .logging_setup import configure_logging from .scale import create_scale def create_app(test_config: dict | None = None) -> Flask: app = Flask(__name__, instance_relative_config=False) app.config.from_object(Config) if test_config: app.config.update(test_config) instance_dir = Path(app.config["INSTANCE_DIR"]) instance_dir.mkdir(parents=True, exist_ok=True) Path(app.config["DATABASE"]).parent.mkdir(parents=True, exist_ok=True) db.register(app) create_scale(app) if not app.config.get("TESTING"): configure_logging() with app.app_context(): db.init_db() from .routes import (api, components, fields, history, label_templates, main, monitor, printing, recipes) app.register_blueprint(main.bp) app.register_blueprint(components.bp) app.register_blueprint(recipes.bp) app.register_blueprint(label_templates.bp) app.register_blueprint(fields.bp) app.register_blueprint(printing.bp) app.register_blueprint(history.bp) app.register_blueprint(monitor.bp) app.register_blueprint(api.bp) app.jinja_env.filters["weight"] = _format_weight app.jinja_env.filters["dt"] = _format_datetime @app.context_processor def inject_globals(): from .db import all_settings return { "app_settings": all_settings(), "current_year": datetime.now().year, "app_version": "0.1.0", } return app