ShiErFeng/shierfeng-fastapi-backend/cli/metadata/option_specs.py
2026-07-24 09:43:10 +08:00

37 lines
1.2 KiB
Python

from dataclasses import dataclass
from pathlib import Path
DEFAULT_ENVIRONMENTS = ('dev', 'prod', 'dockermy', 'dockerpg')
@dataclass(frozen=True)
class EnvironmentOptionService:
"""
CLI 环境选项服务。
该服务负责发现当前项目下可用的环境名称集合,供 completion、
wizard 和诊断信息等场景复用。
:param default_environments: 默认内置环境名称列表
"""
default_environments: tuple[str, ...] = DEFAULT_ENVIRONMENTS
def discover_env_names(self, project_dir: Path | None = None) -> list[str]:
"""
发现当前项目可用的环境名称列表。
:param project_dir: 后端项目目录,默认使用当前工作目录
:return: 去重且排序后的环境名称列表
"""
resolved_project_dir = (project_dir or Path.cwd()).resolve()
env_names = set(self.default_environments)
for env_file in resolved_project_dir.glob('.env.*'):
suffix = env_file.name.removeprefix('.env.').strip()
if suffix:
env_names.add(suffix)
return sorted(env_names)
ENVIRONMENT_OPTION_SERVICE = EnvironmentOptionService()