代码之家  ›  专栏  ›  技术社区  ›  Evan Fosmark

获取Python中Trac项目的列表

  •  1
  • Evan Fosmark  · 技术社区  · 14 年前

    是否可以像在Python中使用trac模块那样获得给定目录中所有项目的列表?如果可能的话,这将是很好的事情,像描述了。我好像不知道怎么做。

    谢谢你的帮助。

    2 回复  |  直到 14 年前
        1
  •  1
  •   manu    14 年前

    您可以编写如下脚本:

    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 你认为对你最好的。

    或者您可以使用函数 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'}
    
        2
  •  1
  •   Ivo    14 年前