Получение списка проектов Trac на Python - PullRequest
1 голос
/ 03 сентября 2010

Можно ли сделать что-то вроде использования модуля trac в Python для получения списка всех проектов в данном каталоге? Если возможно, было бы неплохо получить такие вещи, как описание, тоже. Кажется, я не могу понять, как это сделать.

Спасибо за любую помощь, которую вы можете предоставить.

Ответы [ 2 ]

1 голос
/ 03 сентября 2010

Вы можете написать что-то вроде этого:

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'}
1 голос
/ 03 сентября 2010

Использование переменной окружения TRAC_ENV_PARENT_DIR почти наверняка сделает то, что вам нужно: она создаст страницу индекса для вас. Смотрите раздел об «использовании нескольких проектов» здесь: http://trac.edgewall.org/wiki/TracCgi#Apacheweb-serverconfiguration

...