A ferramenta padrão para administrar o trac é por linha de comando: trac-admin. Sempre que eu criava um novo repositório, precisava adicionar os usuários com permissão de desenvolvedor no trac correspondente a esse repositório. Porque não facilitar as coisas?
Como o trac é feito em python, posso usar a API em um programa. Foi o que fiz. O resultado:
#!/usr/bin/python2.4
# -*- coding: iso-8859-1 -*-
import sys
import os
import trac.scripts.admin as admin
from trac.perm import PermissionSystem as Permission
import pysqlite2
class TracHelper(object):
developers = ("walter","cacilhas","torcato","will")
developersPermissions = ("WIKI_ADMIN","REPORT_ADMIN","TICKET_MODIFY")
def __init__(self,projectPath):
try:
self.projectPath = projectPath
self.env = admin.Environment(self.projectPath)
self.permissao = Permission(self.env)
except:
'Eh necessario especificar um projeto'
def addDeveloperProfile(self):
for permission in self.developersPermissions:
try:
self.permissao.grant_permission('developer',permission)
except pysqlite2.dbapi2.IntegrityError, e:
print('Já existe usuário com essa permissão')
sys.exit(1)
def addDevelopers(self):
for developer in self.developers:
try:
self.permissao.grant_permission(developer,'developer')
except pysqlite2.dbapi2.IntegrityError, e:
print('O usuário ' + developer + ' já existecom essa permissão')
sys.exit(1)
def destroyDeveloperProfile(self):
for permission in self.developersPermissions:
self.permissao.revoke_permission('developer',permission)
if __name__ == "__main__":
try:
helper = TracHelper(sys.argv[1])
except:
print('É necessário informar o caminho do Projeto')
sys.exit(1)
#helper.destroyDeveloperProfile()
helper.addDeveloperProfile()
helper.addDevelopers()
O modo de usar é simples: ./usuariostrac.py /var/trac/repositorio .
Dito isso, eis o que descubro hoje: um plugin para o trac para fazer a administração dele via web. Mas diga que não foi mais interessante o passeio pela API do trac?