Возможно ли сделать что-то вроде использования модуля trac в Python, чтобы получить список всех проектов в данном каталоге? Если возможно, было бы неплохо получить такие вещи, как описание. Я не могу понять, как это сделать.
Спасибо за любую помощь, которую вы можете предоставить.
Вы можете script что-то вроде этого:
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 является траковой средой. Смотрите, почему:
>>> 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'}
Использование переменной среды TRAC_ENV_PARENT_DIR
почти наверняка делает то, что вам нужно: оно создаст для вас индексную страницу. См. Раздел "Использование нескольких проектов" здесь: http://trac.edgewall.org/wiki/TracCgi#Apacheweb-serverconfiguration