2010-09-03 2 views
1

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

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

ответ

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_dir или get_trac_projects_from_dir зависимости от того, вы думаете, что лучше для вас.

В качестве альтернативы вы можете использовать функцию get_enviroments из модуля trac.web.main, но только в качестве альтернативы os.listdir - вы все равно должны проверить, является ли или нет каждый предполагаемый окр действительно среда ПРОФ. См. Почему:

>>> 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'} 
+0

Обратите внимание, что _get_project_options возвращает все параметры. Вы можете получить описание там тоже. – manu

1

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

Смежные вопросы