"""Info retrieval for CLI commands."""fromfunctoolsimportlru_cachefrompathlibimportPathfromtypingimportAnyimporttomlifrompoiesis.api.constantsimportget_poiesis_api_constantsfrompoiesis.constantsimportget_poiesis_constantsapi_constants=get_poiesis_api_constants()constants=get_poiesis_constants()
[docs]@lru_cachedefget_version()->str:"""Get version from pyproject.toml."""ifpyproject_data:=get_pyproject_data():version:str=pyproject_data.get("project",{}).get("version","UNKNOWN")returnversionelse:return"UNKNOWN"
[docs]@lru_cachedefget_pyproject_data()->dict[str,Any]:"""Get all data from pyproject.toml. Returns: Dictionary with pyproject.toml data or None if not found """try:possible_paths=[Path("pyproject.toml"),Path(__file__).parent.parent.parent/"pyproject.toml",]forpathinpossible_paths:ifpath.exists():withopen(path,"rb")asf:returntomli.load(f)return{}exceptException:return{}
[docs]@lru_cachedefget_basic_info()->dict[str,Any]:"""Get basic information about the project. Returns: Dictionary with basic information about the project. """info:dict[str,Any]={"version":get_version(),}ifpyproject_data:=get_pyproject_data():project_data=pyproject_data.get("project",{})if"authors"inproject_data:info["authors"]=", ".join(author.get("name","")forauthorinproject_data["authors"])if"maintainers"inproject_data:info["maintainers"]=", ".join(maintainer.get("name","")formaintainerinproject_data["maintainers"])if"urls"inproject_dataand"Repository"inproject_data["urls"]:info["repository"]=project_data["urls"]["Repository"]if"urls"inproject_dataand"Documentation"inproject_data["urls"]:info["documentation"]=project_data["urls"]["Documentation"]if"license"inproject_data:info["license"]=project_data["license"]info|={"TES version":api_constants.TES_VERSION,"TES spec hash":api_constants.SPEC_GIT_HASH,"environment":constants.ENVIRONMENT,}# Format keys (e.g., "tes version") and sort for displayreturndict(sorted({k.replace("_"," ").title():vfork,vininfo.items()}.items()))