获取Python中的Trac项目列表

时间:2010-09-03 08:41:59

标签: python project-management trac

是否有可能在Python中使用trac模块以获取给定目录中所有项目的列表?如果可能的话,也可以获得类似描述的内容。我似乎无法弄明白该怎么做。

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

使用TRAC_ENV_PARENT_DIR环境变量几乎可以满足您的需求:它将为您创建索引页面。请参阅此处有关“使用多​​个项目”的部分:http://trac.edgewall.org/wiki/TracCgi#Apacheweb-serverconfiguration

答案 1 :(得分:1)

您可以编写以下内容:

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_dirget_trac_projects_from_dir,无论您认为哪种方式最适合您。

或者您可以使用模块get_enviroments中的trac.web.main函数,但只能替代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'}