是否可以执行类似于在 Python 中使用 trac 模块的操作来获取给定目录中所有项目的列表?如果可能的话,最好也能得到像描述这样的东西。我似乎不知道该怎么做。
感谢您提供的任何帮助。
最佳答案
您可以编写如下脚本:
import trac.admin.console
import trac.config
import os
def _get_project_options(envdir):
confpath = os.path.join(envdir, 'conf/trac.ini')
config = trac.config.Configuration(confpath)
return dict([x for x in config.options(u'project')])
def _get_project_name(envdir):
admin = trac.admin.console.TracAdmin(envdir)
if admin.env_check():
options = _get_project_options(envdir)
return options[u'name']
else:
return None
def iter_trac_projects_from_dir(dirname):
for which in os.listdir(dirname):
if not which in ('.', '..') and os.path.isdir(dirname):
envdirname = os.path.join(dirname, which)
project_name = _get_project_name(envdirname)
if project_name:
yield (project_name, envdirname)
def get_trac_projects_from_dir(dirname):
return [pr for pr in iter_trac_projects_from_dir(dirname)]
然后您可以使用您认为最适合的 iter_trac_projects_from_dir
或 get_trac_projects_from_dir
。
或者,您可以使用模块 trac.web.main
中的函数 get_enviroments
,但只能作为 os.listdir
的替代方案 - 您会仍然需要检查每个所谓的 env 是否确实是一个 trac 环境。看看为什么:
>>> import trac.web.main
>>> env = {'trac.env_parent_dir':
... '/home/manu/tmp'}
>>> trac.web.main.get_environments(env)
{'test': '/home/manu/tmp/test', 'no-a-real-trac-project': '/home/manu/tmp/no-a-real-trac-project', 'test2': '/home/manu/tmp/test2'}
关于python - 获取 Python 中的 Trac 项目列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3634183/