certflow.cli.base_command 源代码

# src/certflow/cli/base_command.py
"""CLI命令基类 - 提供统一的数据库管理器初始化"""

from __future__ import annotations

import os

from dotenv import load_dotenv
from loguru import logger
from sqlalchemy.orm import Session

from certflow.utils.database import DatabaseManager, NutstoreWebDAVConfig


[文档] def get_cli_db_manager( enable_webdav: bool = True, create_tables: bool = True, sync_from_webdav: bool = True ) -> DatabaseManager: """获取 CLI 命令使用的数据库管理器 Args: enable_webdav: 是否启用 WebDAV 同步(默认 True) create_tables: 是否创建数据表(默认 True) sync_from_webdav: 是否从 WebDAV 同步(默认 True) Returns: 初始化好的数据库管理器实例 """ load_dotenv() webdav_config = None if enable_webdav: url = os.getenv("NUTSTORE_WEBDAV_URL") username = os.getenv("NUTSTORE_WEBDAV_USER") password = os.getenv("NUTSTORE_WEBDAV_PASSWORD") if all([url, username, password]): logger.info("检测到 WebDAV 配置,CLI 将启用远程同步") webdav_config = NutstoreWebDAVConfig( url=url, username=username, password=password, remote_path=os.getenv("NUTSTORE_REMOTE_PATH", "CertFlow/backups"), keep_backups=int(os.getenv("NUTSTORE_KEEP_BACKUPS", "10")), ) db_manager = DatabaseManager(webdav_config=webdav_config, auto_backup_before_sync=True) db_manager.init_db( create_tables=create_tables, sync_from_webdav=sync_from_webdav and bool(webdav_config), force_sync=False, ) # CLI 路径不自动播种:空库时给出 seed 提示安全网(只读,不自动 seed) db_manager.warn_if_base_data_empty() return db_manager
[文档] def get_cli_session(enable_webdav: bool = True) -> Session: """获取数据库会话(快捷方法) Args: enable_webdav: 是否启用 WebDAV 同步(默认 True)。 Returns: Session: SQLAlchemy 数据库会话对象。 """ return get_cli_db_manager(enable_webdav).get_session()