[Python] parsing config file

Giovanni Porcari giovanni.porcari a softwell.it
Mar 26 Nov 2013 14:22:08 CET


Il giorno 26/nov/2013, alle ore 12:23, Daniele Varrazzo <piro a develer.com> ha scritto:

> On 2013-11-24 08:32, Giovanni Porcari wrote:
>> Il giorno 24/nov/2013, alle ore 02:33, Daniele Varrazzo
>> <piro a develer.com> ha scritto:
> 
>>> Ma un file di configurazione: ma che ci vuole sax per parsare un paio di fetenti coppie chiave valore? Ancora a pensare solo per un secondo se un valore logico lo devi scrivere come 1, true oppure v? C'è di meglio, no?
> 
>> <db>
>>  <development implementation="postgres" host="localhost" port='5432'
>> password="mypassword" user="myuser"/>
> 
>> Io ad esempio lo leggo così:
>> 
>> config=Bag(myfile)
>> development_port=config('db.development?port')
>>>>> '5432'
> 
> Esattamente quello che intendevo: lo leggi male. L'interfaccia è fica e comodissima, ne sono certo, ma l'informazione nel file è incompleta. Passa la stringa "5432" ad una funzione socket e quella esploderà:
> 
>    >>> s.listen(('localhost', '5432'))
>    TypeError: an integer is required
> 
> Tra l'altro "5432" non è chiaramente una porta valida: è maggiore di 65535:
> 
>    >>> "5432" > 65535
>    True
> 
> Ad un file di configurazione si chiedono poche cose. Tra queste secondo me sono abbastanza importanti:
> 
> - essere editabile a mano
> - essere fortemente tipizzato
> 
> e ad xml mancano entrambe.


Beh Daniele non volevo complicare le cose tirando in ballo anche la tipizzazione.
Ma hai ragione e infatti nel nostro uso abituale abbiamo modo di tipizzare
facilmente gli attributi usando il suffisso '::'+tipo mentre volendo tipizzare
il contenuto usiamo l'attributo 'riservato' _T.
In questo caso l'esempio completo sarebbe stato port="5432::L" 
invece di port="5432".

Mi rendo conto che possono sembrare soluzioni 'acrocchiate' ma nella nostra
esperienza la leggibilità e la flessibilità sono buone e il formato
e semplice da spiegare e molto flessibile.

Usando un parser nostro possiamo usare tutti i tipi che vogliamo e il contenitore
che risulta è molto facile da usare e si mappa immediatamente ad un tree
in una pagina web. Quindi la pigrizia ci fa amare XML magari il dialetto nostro
che è per artigiani pigri ;)

G





Maggiori informazioni sulla lista Python