Prendendo spunto da un articolo di Stephan Hermann, nel quale veniva mostrato il codice di una simpatica quanto utile macro per MoinMoin, ho pensato bene di sviluppare anche io una nuova macro per il wiki de’ noantri.
Invece di partire dal codice della macro originale (che è disponibile all’indirizzo dell’articolo sopra citato), vi mostro subito subito la mia piccola invenzione:
from MoinMoin import config, wikiutil projects = { "ubuntu" : "https://bugs.launchpad.net/ubuntu/+bug/%d", "debian" : "http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%d", "gnome" : "http://bugzilla.gnome.org/show_bug.cgi?id=%d", "kde" : "http://bugs.kde.org/show_bug.cgi?id=%d", "xfce" : "http://bugzilla.xfce.org/show_bug.cgi?id=%d" } projects_emblems = { "ubuntu" : "https://launchpadlibrarian.net/9608570/ubuntu_emblem.png", "debian" : "http://www.debian.org/favicon.ico", "gnome" : "https://launchpadlibrarian.net/11396521/gnome.png", "kde" : "https://launchpadlibrarian.net/7101115/klogo-official-crystal-14.png", "xfce" : "https://launchpadlibrarian.net/4040580/mouse.png" } def NoProjectSelectedException(Exception): """ The macro raises an instance of this exception when the argument doesn't contain any project valid name. """ def __init__(self, message): """ Default __init__ method. """ Exception.__init__(self, message) def args_to_dict(args): """ This method converts a string in a dictionary. It uses project's name (if valid) as key, and a list of bug ids as value. For example: The call: args_to_dict("gnome 3 4 6 ubuntu 1 9 6 kde 7 xfce") returns: {'kde': [7], 'xfce': [], 'gnome': [3, 4, 6], 'ubuntu': [1, 9, 6]} """ args_dict = dict() project_selected = None for i in projects.keys(): args_dict[i] = list() if args: args_list = args.split() for cur in args_list: if cur in projects.keys(): project_selected = cur elif project_selected != None: try: args_dict[project_selected].append(int(cur)) except ValueError: raise ValueError, u"Carattere non valido, i bug devono essere indicati con numeri interi: %s" else: raise NoProjectSelectedException, u"Nessun progetto selezionato per i bug elencati: %s" return args_dict def execute(macro,args): """ Execute method. It formats and returns the result. """ request=macro.request formatter=macro.formatter result="" try: args_dict = args_to_dict(args) except ValueError, e: raise ValueError(e.message % args) except NoProjectSelectedException, e: raise NoProjectSelectedException(e.message % args) for i in args_dict.keys(): # i = current project for j in args_dict[i]: # j = current bug id result += u'<img src="%s" />' % projects_emblems[i] # result+='<img src="https://launchpadlibrarian.net/7094128/launchpad-icon.png" /> ' # result+=formatter.url(on=1,url="http://launchpad.net/bugs/%s" % i) result+=formatter.url(on=1,url=projects[i] % j) result+=u"#%d" % j result+=formatter.url(on=0) result+=" " return result
Come tutte le macro, a partire da un input restituisce un risultato formattato secondo un modello prestabilito: in questo caso, a partire da un elenco di progetti e di relativi bug, viene restituita una riga in HTML, contenente l’icona rappresentativa del progetto affiancata dal link al servizio di bugtracking dello stesso.
Partiamo dall’input, ecco la sintassi corretta:
[[Bug(progetto1 id_bug_1 progetto2 id_bug_1 progetto3 id_bug_1 id_bug_2)]]
Semplice no? Non ci sono separatori, bisogna solo ricordare che i numeri dei bug fanno riferimento al primo progetto che li precede (non è necessario inserirli in nessun ordine particolare). In caso di errore, a seconda del tipo dello stesso, possono venire lanciate due diverse eccezioni.
Se desiderate un esempio pratico, vi basta aprire la vostra homepage sul wiki con l’editor testuale e inserire questa riga in un punto qualsiasi della pagina:
Bug segnalati: [[Bug(ubuntu 68 3 5 gnome 21 kde 9 xfce 8 debian 76)]]
Ed ecco il risultato:
Concludo segnalando, a chi fosse interessato allo sviluppo delle funzionalità del wiki, l’indirizzo del repository degli amministratori del Gruppo documentazione italiano.
A quando la macro per risolverli? 🙂
Figa, ma verrà utilizzata con frequenza: once a month 😀
Figa però… 😀
@Leo: la tua è tutta invidia! 😀
@DktrKranz: ci sta lavorando l3on, chiedi a lui
Pingback: ubuntu 12.04 unity