65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
from datetime import datetime
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.models import SystemSetting
|
|
|
|
PDF_GENERATION_CONCURRENCY_KEY = "pdf_generation_concurrency_limit"
|
|
DEFAULT_PDF_GENERATION_CONCURRENCY = 2
|
|
MIN_PDF_GENERATION_CONCURRENCY = 1
|
|
MAX_PDF_GENERATION_CONCURRENCY = 10
|
|
|
|
|
|
def ensure_default_settings(db: Session) -> None:
|
|
if not db.get(SystemSetting, PDF_GENERATION_CONCURRENCY_KEY):
|
|
db.add(
|
|
SystemSetting(
|
|
key=PDF_GENERATION_CONCURRENCY_KEY,
|
|
value=str(DEFAULT_PDF_GENERATION_CONCURRENCY),
|
|
description="PDF证书同时生成数量限制",
|
|
)
|
|
)
|
|
|
|
|
|
def get_pdf_generation_concurrency_limit(db: Session) -> int:
|
|
setting = db.get(SystemSetting, PDF_GENERATION_CONCURRENCY_KEY)
|
|
return _coerce_limit(setting.value if setting else None)
|
|
|
|
|
|
def get_pdf_settings(db: Session) -> dict[str, object]:
|
|
ensure_default_settings(db)
|
|
setting = db.get(SystemSetting, PDF_GENERATION_CONCURRENCY_KEY)
|
|
return {
|
|
"pdf_generation_concurrency_limit": get_pdf_generation_concurrency_limit(db),
|
|
"updated_at": setting.updated_at if setting else None,
|
|
}
|
|
|
|
|
|
def update_pdf_generation_concurrency_limit(db: Session, value: int) -> dict[str, object]:
|
|
limit = _coerce_limit(value)
|
|
ensure_default_settings(db)
|
|
setting = db.get(SystemSetting, PDF_GENERATION_CONCURRENCY_KEY)
|
|
if setting is None:
|
|
setting = SystemSetting(
|
|
key=PDF_GENERATION_CONCURRENCY_KEY,
|
|
value=str(limit),
|
|
description="PDF证书同时生成数量限制",
|
|
)
|
|
db.add(setting)
|
|
else:
|
|
setting.value = str(limit)
|
|
setting.updated_at = datetime.utcnow()
|
|
db.flush()
|
|
return {
|
|
"pdf_generation_concurrency_limit": limit,
|
|
"updated_at": setting.updated_at,
|
|
}
|
|
|
|
|
|
def _coerce_limit(value: object) -> int:
|
|
try:
|
|
limit = int(value)
|
|
except (TypeError, ValueError):
|
|
limit = DEFAULT_PDF_GENERATION_CONCURRENCY
|
|
return max(MIN_PDF_GENERATION_CONCURRENCY, min(MAX_PDF_GENERATION_CONCURRENCY, limit))
|