Personal tools
mr.scripty: il MacGyver dei tuoi buildout (graffette incluse)

Ho smesso di fumare, tranne prima e dopo MacGyver (Selma)

Nov 05, 2013

mr.scripty: il MacGyver dei tuoi buildout (graffette incluse)

Oggi mi sento anni 80. All'epoca stravedevo per MacGyver. Passati tanti anni realizzi che un informatico alle prese con un buildout, MacGyver ci diventa...

Suppongo che i miei lettori già conoscano, ammirino e temano la potenza di zc.buildout.

Suppongo che i miei lettori già conoscano, ammirino e temano la potenza di MacGyver.

Buildout è proprio figo e permette di fare tante cose, posto che esista la ricetta (recipe) adatta allo scopo. Per tante operazioni le ricette sono già pronte, ma ci sono casi in cui ci si deve arrangiare.

Scrivere una recipe per buildout non è un'operazione super complicata, ma si tratta pur sempre di una cosa non immediata.

A volte è molto meglio usare una soluzione non ottimale purché sia efficace in tempi rapidi. Per questo può venire in vostro aiuto mr.scripty.

Chi è? Cosa fa?

mr.scripty è una ricetta che vi permette di eseguire codice Python, che trova specificato nelle sue opzioni, durante il buildout.

La documentazione ufficiale è molto esaustiva sulla sintassi da utilizzare e contiene tanti esempi in cui questa ricetta si mostra efficace e produttiva, ad esempio:

Io mi limito ad esempi inutili giusto per farvi cogliere le enormi potenzialità insite in questa ricetta.

Vediamolo alle prese con una cosa semplice, il buon vecchio "hello world":

[buildout]
parts = helloworld

[helloworld]
recipe=mr.scripty
main=
    ... print 'Hello world!'

Notate il codice Python preceduto dai tre punti (...). Lanciando questo buildout otterremo:

[ale@padme mr.scripty]$./bin/buildout -Nc example0.cfg
Hello world!
Installing helloworld.

Abbiamo dato la graffetta a MacGyver.

http://images3.wikia.nocookie.net/__cb20071109231952/nonciclopedia/images/thumb/7/71/Genesi_MacGyver.jpg/300px-Genesi_MacGyver.jpg

Ovviamente potete anche importare moduli Python, ad esempio os:

[ale@padme mr.scripty]$cat buildout.cfg
[buildout]
parts = parentfolder

[parentfolder]
recipe=mr.scripty
value=
    ... import os
    ... value = os.path.split(self.buildout['buildout']['directory'])[-1]
    ... print "My parent folder is %s" % value
    ... return value

[ale@padme mr.scripty]$./bin/buildout
My parent folder is mr.scripty
Installing parentfolder.

Oltre alla graffetta, MacGyver ha pure le batterie del pitone. Rabbrividiamo...

http://img713.imageshack.us/img713/4619/video1mp4snapshot002720.jpg

Mi fermo qua, credo questo sia sufficiente per invogliarvi a dare un'occhiata alla documentazione del prodotto e a tenerlo in considerazione per le vostre prossime scorribande nei file cfg.

Caveat

Concludo dicendo di non farvi prendere la mano...

I file di configurazione non sono il posto adatto per scrivere codice Python. Prima di cominciare a sviluppare codice dentro un file di configurazione del buildout pensateci due volte... E' forse più sensato scrivere un'apposita recipe? Chi prenderà in mano i vostri buildout, capirà cosa sta succedendo?

Detto questo... happy buildouting to everybody!

comments powered by Disqus