Una nuova macro per il wiki di Ubuntu-it
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:
Page 1 of 2 | Next page