Files
2026-05-08 15:16:04 +08:00

40 lines
1.0 KiB
Python

from __future__ import annotations
from decimal import Decimal, InvalidOperation, ROUND_HALF_UP
from flask import Flask
from app.config import Config
from app.extensions import db, migrate
from app import models
from app.routes.api import api_bp
from app.routes.web import web_bp
def _format_decimal(value: object, digits: int = 4) -> str:
if value is None:
return "-"
try:
decimal_value = Decimal(str(value))
except (InvalidOperation, ValueError, TypeError):
return str(value)
quantized = decimal_value.quantize(Decimal(f"1.{'0' * digits}"), rounding=ROUND_HALF_UP)
normalized = format(quantized, "f").rstrip("0").rstrip(".")
return normalized or "0"
def create_app(config_object: type[Config] = Config) -> Flask:
app = Flask(__name__, instance_relative_config=True)
app.config.from_object(config_object)
db.init_app(app)
migrate.init_app(app, db)
app.register_blueprint(web_bp)
app.register_blueprint(api_bp)
app.jinja_env.filters["fmt_decimal"] = _format_decimal
return app