@@ -0,0 +1,75 @@
|
||||
"""Загрузка справочников норм RACION (БД → JSON fallback)."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from functools import lru_cache
|
||||
from pathlib import Path
|
||||
|
||||
_SEED_DIR = Path(__file__).resolve().parents[4] / "data" / "seed" / "racion"
|
||||
|
||||
|
||||
def _read_json(name: str) -> dict:
|
||||
path = _SEED_DIR / name
|
||||
if not path.exists():
|
||||
raise FileNotFoundError(f"Справочник не найден: {path}")
|
||||
return json.loads(path.read_text(encoding="utf-8"))
|
||||
|
||||
|
||||
def _load_from_db(loader_name: str) -> dict | None:
|
||||
try:
|
||||
from flask import has_app_context
|
||||
|
||||
if not has_app_context():
|
||||
return None
|
||||
from app.modules.zootech.lab.services.racion_reference import (
|
||||
load_moskwa_lactir_from_db,
|
||||
load_normy_info_from_db,
|
||||
load_piter_lactir_from_db,
|
||||
)
|
||||
|
||||
loaders = {
|
||||
"moskwa": load_moskwa_lactir_from_db,
|
||||
"piter": load_piter_lactir_from_db,
|
||||
"info": load_normy_info_from_db,
|
||||
}
|
||||
fn = loaders.get(loader_name)
|
||||
if fn is None:
|
||||
return None
|
||||
data = fn()
|
||||
return data if data else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
@lru_cache(maxsize=1)
|
||||
def load_moskwa_lactir() -> dict:
|
||||
data = _load_from_db("moskwa")
|
||||
if data:
|
||||
return data
|
||||
return _read_json("moskwa_lactir.json")
|
||||
|
||||
|
||||
@lru_cache(maxsize=1)
|
||||
def load_piter_lactir() -> dict:
|
||||
data = _load_from_db("piter")
|
||||
if data:
|
||||
return data
|
||||
return _read_json("piter_lactir.json")
|
||||
|
||||
|
||||
@lru_cache(maxsize=1)
|
||||
def load_normy_info() -> dict:
|
||||
data = _load_from_db("info")
|
||||
if data:
|
||||
return data
|
||||
try:
|
||||
return _read_json("normy_info.json")
|
||||
except FileNotFoundError:
|
||||
return {"rows": [], "mass_kg_values": [400, 450, 500, 550, 600, 650, 700, 750]}
|
||||
|
||||
|
||||
def clear_tables_cache() -> None:
|
||||
load_moskwa_lactir.cache_clear()
|
||||
load_piter_lactir.cache_clear()
|
||||
load_normy_info.cache_clear()
|
||||
Reference in New Issue
Block a user