Che sapore ha il mio codice?

come validare la bontà dei nostri pacchetti Python e prodotti per Plone prima di distribuirli su plone.org o pypi

Rilasciare sofwtare per Python e Plone è diventato sempre più facile grazie all'uso di strumenti che automatizzano le noiose procedure di cambio di versione, tag, upload ecc.

Tra i tool indispensabili che uso ogni volta che devo rilasciare un pacchetto c'è zest.releaser. Grazie a questo strumento è possibile rilasciare in modo semplice i propri prodotti per Plone sia su plone.org che su pypi o ancora su un proprio server pypi.

Nonostante il rilascio di un prodotto sia facile, prima di distribuire un software è molto importante verificare anche che esso non sia semplicemente funzionante ma includa tutte le informazioni utili per chi vorrà utilizzarlo. Fortunatamente qualcuno ci ha già pensato ed ecco che esistono alcuni prodotti che ci autano anche in questa impresa.

Pyroma

Rileggendo un recente post di Lennard Regebro, noto personaggio all'interno dell'ambiente Python ed in particolare della community Plone, ho scoperto un'interessante pacchetto che ha rilasciato qualche mese fa.

Come dice il readme, Pyroma è un prodotto utile per comprendere se il nostro software Python è stato creato in accordo con le best practices dell'ecosistema dei pacchetti per Python.

L'uso del tool è semplicissimo e anche l'output del programma è intelligibile. Una volta installato (consiglio di installarlo in un virtualenv dedicato) avremo a disposizione uno script dallo stesso nome: pyroma. Io l'ho provato subito sui pacchetti del core di collective.geo ed ho avuto i seguenti risultati:

(pyroma)giorgio@scarola:~/cgeo/plone43/src/collective.geo.geographer$ pyroma .
------------------------------
Checking .
Found collective.geo.geographer
------------------------------
You should specify what Python versions you support.
Setuptools and Distribute support running tests. By specifying a test suite, it's easy to find and run tests both for automated tools and humans.
This package is not set up to run tests.
------------------------------
Final rating: 8/10
Philadelphia
------------------------------

La cosa divertente è che pyroma classifica il tuo pacchetto con un formaggio seguendo una classificazione basata sulla puzza...

I possibili risultati sono quindi i seguenti:

  1. I don't think that's really cheese
  2. Vieux Bologne
  3. Limburger
  4. Gorgonzola
  5. Stilton
  6. Brie
  7. Compté
  8. Jarlsberg
  9. Philadelphia
  10. Cottage Cheese
  11. Your cheese is so fresh most people think it's a cream: Mascarpone

Altri strumenti utili

Esistono altri strumenti utili che controllano la bontà dei pacchetti rilasciati su pypi.

zopyx.trashfinder, creato da Andreas Jung per verificare che i pacchetti con un determintato namespace, rilasciati su pypi, contengano alcune informazioni utili quali, descrizione, tag, autore, maintainer. Alcune informazioni in più le trovate su questo blog post.

cheesecake, uno strumento molto utile che controlla i pacchetti rilasciati secondo differenti aspetti ed associa un punteggio ad ognuno. Ho provato anche questo sui pacchetti di collective.geo e questo è il risultato:

giorgio@scarola:~$ cheesecake_index -n collective.geo.geographer
py_pi_download .........................  45  (downloaded package collective.geo.geographer-1.4.tar.gz following 2 links from PyPI)
unpack .................................  25  (package unpacked successfully)
unpack_dir .............................  15  (unpack directory is collective.geo.geographer-1.4 as expected)
setup.py ...............................  25  (setup.py found)
install ................................  50  (package installed in /var/folders/Ah/AhTh2wfDGx0rODJ73XygNE+++TM/-Tmp-/cheesecakeyTZ9R5/tmp_install_collective.geo.geographer-1.4)
generated_files ........................   0  (0 .pyc and 0 .pyo files found)
---------------------------------------------
INSTALLABILITY INDEX (ABSOLUTE) ........ 160
INSTALLABILITY INDEX (RELATIVE) ........  97  (160 out of a maximum of 165 points is 97%)
required_files ......................... 140  (3 files and 2 required directories found)
docstrings .............................  35  (found 15/43=34.88% objects with docstrings)
formatted_docstrings ...................   0  (found 0/43=0.00% objects with formatted docstrings)
---------------------------------------------
DOCUMENTATION INDEX (ABSOLUTE) ......... 175
DOCUMENTATION INDEX (RELATIVE) .........  50  (175 out of a maximum of 350 points is 50%)
unit_tested ............................  30  (has unit tests)
pylint .................................   0  (encountered an error during pylint execution)
---------------------------------------------
CODE KWALITEE INDEX (ABSOLUTE) .........  30
CODE KWALITEE INDEX (RELATIVE) .........  38  (30 out of a maximum of 80 points is 38%)
=============================================
OVERALL CHEESECAKE INDEX (ABSOLUTE) .... 365
OVERALL CHEESECAKE INDEX (RELATIVE) ....  61  (365 out of a maximum of 595 points is 61%)

Un ultimo consiglio

Il sito di pypi mette a disposizione un server per poter testare il rilascio dei propri pacchetti affinché ognuno di noi possa impratichirsi con il funzionamento del rilascio.

Il server si trova a questo indirizzo: http://testpypi.python.org/pypi ed è possibile utilizzarlo sia con zest.releaser che manualmente:

giorgio@scarola:~/mypackage$ python setup.py upload -r testpypi.python.org

Altre informazioni

Share this on

Share |

On same topics

Commenti

comments powered by Disqus