[Gfoss] [QGIS] Script per gestire i layer corrotti (=spostati in altro percorso) in Qgis

Amedeo Fadini amefad a gmail.com
Gio 18 Giu 2015 17:22:18 CEST


Ciao Luigi,

2015-06-18 0:19 GMT+02:00 Luigi Pirelli <luipir a gmail.com>:
> consiglio di usare il wrapper ll'xml del progetto:
> http://qgis.org/api/classQgsProject.html sgrapparsi all'handlaer
> QgsProjectBadLayerHandler
[...]
> mi sembra prossa essere un buon plugin utile a tutti.

Ottime indicazioni Luigi, spero che avremo tempo di metterci mano più
seriamente, per ora basta lo script a riga di comando.


> piccola riflessione generale sul SW libero e non... bello, pero' come
> faccio a comptere con con stagisti pagati dallo stato a cui io pago le
> tasse? ricordo un progetto per una regione del nord italia su qgis che
> abbiamo offerto il giusto e lo vince una sconosciuta ditta
> (sconosciuta per il mondo del sw libero e di qgis) con un ribasso
> impressionante (praticamente la meta')... ora, impossibile fare sti
> prezzi a meno di avere schiavi stagisti o studenti sottopagati o
> subcontrattati a indiani.... comunque di quel progetto, non abbiamo
> visto l'ombra delle patch che avrebbero dovuto risolvere o del plugin
> che avrebbero dovuto generare

Concordo su tutto, il problema è duplice:
- da un lato c'è chi sfrutta le persone e rovina il mercato con prezzi assurdi.
- dall'altro i committenti non sono in grado di valutare la qualità e
a parte Regione Toscana non si preoccupano di verificare la
ridistribuzione del SW libero che hanno pagato.

Che fare? Cerchiamo di passarci le informazioni su chi sfrutta la
gente, e passiamo voce quando ci sono progetti di PA che "dovrebbero"
essere rilasciati, l'Associazione è ben felice di fare un sollecito
via PEC.



Nel mio piccolo faccio lavorare lo stagista (che ha 19 anni  e non è
un programmatore del tuo calibro) per piccole cose interne e mi
premuro di ridistribuire quel poco che ha fatto:


_______________________________________

#Pythonlayerfixer
#verifica se file dei layer specificati in un progetto QGIS esistono, altrimenti
#li cerca nel percorso specificato dall'utente e releative sottocartelle.
#--------------------------------------
#autore Mattia Dorigo,Amedeo Fadini
#Azienda Tepco.srl - tepco a tepco.it
#18/06/15
# Licenza: Free BSD http://opensource.org/licenses/BSD-2-Clause
#----------------------------------------
# librerie importate
import xml.etree.ElementTree as ET
import os, fnmatch
# queste  due funzioni permettono di trovare un file cercandolo da una
cartella iniziale
def find_files(directory, pattern):
    for root, dirs, files in os.walk(directory):
        for basename in files:
            if fnmatch.fnmatch(basename, pattern):
                filename = os.path.join(root, basename)
                yield filename
def FindPath(HomeDir,nameFile):

path = ""
for filename in find_files(HomeDir,nameFile):
path = filename
return path

#prendo il nome del file da input
valore = raw_input('inserisci nome file di progetto senza estensione')
valore = valore + ".qgs"
percorso = raw_input('inserisci il nuovo percorso')
# = raw_input('inserisci nome file con estensione')
# importo il xml e lo leggo
tree = ET.parse(valore)
root = tree.getroot()

print "-----------------------------------------------"
# ciclo che mi permette di ottenere tutti i datasource del file xml
for ds in root.iter('datasource'):
single = ds.text
single = single.split("|")
# se il file esiste al percorso indicato, lo lascio stare
if os.path.exists(single[0]):
print single[0]
print "esiste"
# se non esiste, ci lavoro sopra
else:
print single[0]
print "non esiste"
#da un path prendo solo il nome del file
textname = os.path.basename(single[0])
#con le funzioni sopra, cerco il file da una directory che ho dato
path = FindPath(percorso,textname)
#sostituisco i backslash con lo slash
path =  path.replace("\\", "/")
single[0] = path
#ricostruisco il percorso, aggiungendo eventualmente altri file
single =  "|".join(single)
print single
print "corretto"
ds.text = single
tree.write("modified.qgs")
print "-----------------------------------------------"


Maggiori informazioni sulla lista Gfoss