是否可以像在Python中使用trac模塊一樣來獲取給定目錄中所有項目的列表?如果可能的話,獲得類似描述的東西也是很好的。我似乎無法弄清楚如何去做。在Python中獲取Trac項目清單
感謝您提供的任何幫助。
是否可以像在Python中使用trac模塊一樣來獲取給定目錄中所有項目的列表?如果可能的話,獲得類似描述的東西也是很好的。我似乎無法弄清楚如何去做。在Python中獲取Trac項目清單
感謝您提供的任何幫助。
您可以腳本是這樣的:
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
- 你仍然要檢查每個涉嫌包膜是否是一個真正的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'}
使用TRAC_ENV_PARENT_DIR
環境變量幾乎可以確實滿足您的需求:它將爲您創建索引頁。請參閱有關部分「使用多個項目」在這裏:http://trac.edgewall.org/wiki/TracCgi#Apacheweb-serverconfiguration
請注意,_get_project_options返回所有選項。你也可以在那裏獲得描述。 – manu 2010-09-03 14:26:13