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:

Un elenco di bug segnalati

Concludo segnalando, a chi fosse interessato allo sviluppo delle funzionalità del wiki, l’indirizzo del repository degli amministratori del Gruppo documentazione italiano.

Facebook Twitter Linkedin Plusone Pinterest Email

4 pensieri su “Una nuova macro per il wiki di Ubuntu-it

  1. Pingback: ubuntu 12.04 unity

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *