QGIS e i changelog 3.12: scraping da repo GitHub

Ogni 4 mesi circa, la comunità di QGIS.org, rilascia una nuova versione del software e, contestualmente, vengono pubblicate i changelog cioè l’insieme di tutte le nuove funzionalità con una descrizione, screenshot e/o gif animate.

Introduzione

La pubblicazione dei changelog è curata da  Kartoza (Pty) Ltd ed in particolare da Tim Sutton (ex-chair di QGIS e oggi membro onorario del PSC).

La raccolta delle nuove funzionalità non è semplice ed immediata in quanto il repository è unico e tutte le PR si trovano nello stesso posto. L’unico modo per poter selezionare correttamente le PR merged è attraverso i label e i milestone.

Ogni developer, che ha una nuova idea, contestualmente all’apertura di una PR dovrebbe assegnare alcune label di fondamentale importanza che classificano la pull request; esempio, se trattasi di una nuova caratteristica deve finire nei changelog, allora è abbligatorio la label Feature. Poi vengono aggiunte altre label per classificare la tipologia: Expressions, Simbology, Processing, Data Provider, ecc… e viene assegnata anche (ma non sempre) la milestone.

Come descritto sopra, tutto è lasciato alla sensibilità del developer, se questi non mettesse i label opportuni, diventerebbe difficile la ricerca delle nuove Feature. Molto spesso interviene Nyall Dawson (uno dei più attivi developer di QGIS e non solo) e aggiunge la label fondamentale Feature e assegna la milestone.

Da poco tempo, Tim Sutton, ha proposto di usare anche la label changelog per una rapida ricerca.

Dopo questa doverosa introduzione (scusate la lunghezza) ad oggi, mentre sto scrivendo, NON è ancora completa la pagina dei changelog QGIS 3.12 nonostante QGIS sia disponibile già da quattro giorni, ecco uno screenshot:

visidata

Come “grattare” le nuove feature dal repo di QGIS??

Filtro GitHub

Per estrapolare tutte le nuove Feature, degne di far parte dei changelog, occorre utilizzare la sezione Pull Request del repository GitHub di QGIS:

repo QGIS – Pull Request

e sfruttare il potente motore del filtro delle PR:

il filtro usato è:

is:pr is:closed label:feature merged:2019-10-25T00:00:00Z..2020-02-21T00:00:00Z

dove:

  • is:pr cerco solo PR (Pull Request);
  • is_closed cerco solo PR chiuse;
  • label:feature cerco PR con label feature;
  • merged:2019-10-25T00:00:00Z..2020-02-21T00:00:00Z cerco PR in questo intervallo temporale (circa 4 mesi).

ecco il risultato:

ottengo 71 Pull request mergiate, contro i 37 presenti (in questo momento) nei changelog.

Scraping dati

Ottenute le pagine web (risultato del filtro):

ecco URL:

https://github.com/qgis/QGIS/pulls?page=1&q=is%3Apr+is%3Aclosed+label%3Afeature+merged%3A2019-10-25T00%3A00%3A00Z..2020-02-21T00%3A00%3A00Z&utf8=%E2%9C%93

dove:

  • https://github.com/qgis/QGIS/pulls? è la URL delle pulls;
  • page=1 indica il numero della pagina (sono tre);
  • q=is%3Apr+is%3Aclosed+label%3Afeature+merged%3A2019-10-25T00%3A00%3A00Z..2020-02-21T00%3A00%3A00Z&utf8=%E2%9C%93 è il filtro.

lo script utilizzato per lo scraping (che restituisce un file CSV):

#!/bin/bash
# filtro github: is:pr is:closed label:feature merged:2019-10-25T00:00:00Z..2020-02-21T00:00:00Z 
set -x

rm *.csv

for p in {1..3}
do
    curl "https://github.com/qgis/QGIS/pulls?page=$p&q=is%3Apr+is%3Aclosed+label%3Afeature+merged%3A2019-10-25T00%3A00%3A00Z..2020-02-21T00%3A00%3A00Z&utf8=%E2%9C%93" | scrape -be ".pr-md-2"  |xq '.html.body.div[]|{pr:.a["@href"]?,titolo:.a["#text"]?,tag:[.span[1].a[]["#text"]?],autore:.div.span[0].a["#text"]?,milestone:.div.span[2]?.a["@aria-label"]?,datetime:.div.span[0]["relative-time"]["@datetime"]}' | mlr --j2c unsparsify >pag"$p".csv
done

mlr --csv unsparsify *.csv >merge.csv
rm pag*.csv
vd merge.csv

lo script, tramite un loop (for) scarica (curl) in HTML, gratta (scrape) la parte di interesse, trasforma (xq) HTML in JSON e trasforma (mlr) JSON in CSV ; successivamente, unisce (mlr) i tre file CSV in un unico file merge.csv:

visidata: merge.csv

con xq converto in JSON questi valori:

  • il numero (campo pr);
  • il titolo;
  • e i tag presenti, possono variare (tag:0, tag:1, tag:2; tag:3);
  • l’autore;
  • milestone
  • datatime
esempio di PR con numero, titolo, tags, autore, milestone e datatime

Pulizia dati con VisiData

L’output dello script è un file CSV, risultato di una unione di tre file CSV (merge.csv) e si presenta cosi:

  • nel campo titolo occorre fare pulizia togliendo tutto ciò che è tra parentesi quadre, per esempio [feature]
visidata

portarsi (usando le frecce) nel campo titolo e digitare g* e subito dopo scrivere l’espressione regex : ^\[.+\] / Invio.

  • concatenare i campi tag_0, tag_1, tag_2, tag_3 in un unico campo tags, con valori separati da ;

posizionare il focus (usando le frecce) dove si desidera aggiungere il nuovo campo tags e poi digitare = e a seguire, scrivere tag_0 + ';' + tag_1 + ';' + tag_2 + ';' + tag_3 Invio

visidata
  • per modificare il nome di un campo, digitare ^ e poi scrivere il nome del campo tags
  • per nascondere i campi non utili, digitare - sul campo;
  • per salvare, digitare ctrl + s e il nome.csv;
visidata
  • ultima correzione, togliamo i ; in eccesso: sul campo tags digitare g* e posi scrivere ;{1,3}$/ Invio;
  • per salvare in formato csv, digitare ctrl+s e poi scrivere il nome.csv

Aggiungere link alle PR, usando Visidata

Per aggiungere un link, per ogni PR, al file CSV in modo che sia cliccabile e punti direttamente alla PR nel repo di QGIS, occorre fare un semplice trova e sostituiscine campo pr in questo modo:

  1. posizionarsi nel primo campo pr
  2. digitare g* che avvia la ricerca tramite regex
  3. scrivere la stringa che trova e sostituisce:
(.+\/)(.+)/[\2](https://github.com/qgis/QGIS/pull/\2)

ecco il risultato:

visidata

Per convertire il file csv in md (markdown), uso miller:

mlr —c2m cat input.csv >output.md

qui il gist: https://gist.github.com/pigreco/b0788026703cf4dc9ce6272e89e7a2a3


NOTE FINALI: QGIS è un software Open Source e tutta la comunità, compreso gli sviluppatori, sono volontari e dedicano il loro tempo libero a migliorare il progetto, quindi è normale che le PR possano essere non ben etichettare e changelog non completi.


Riferimenti utili

Ringraziamenti


Se il blog post vi è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!

SE IL POST VI È STATO UTILE CONTRIBUITE A MANTENERLO AGGIORNATO PAYPAL


Pubblicità

2 pensieri su “QGIS e i changelog 3.12: scraping da repo GitHub

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.