[Python] parsing config file

Manlio Perillo manlio.perillo a gmail.com
Mar 26 Nov 2013 15:03:37 CET


On 26/11/2013 14:36, Giovanni Porcari wrote:
>
> Il giorno 26/nov/2013, alle ore 12:43, Manlio Perillo <manlio.perillo a gmail.com> ha scritto:
>
>> Gli unici formati di file che conosco in cui il tipo è manifesto (o meglio, in cui il tipo è specificato da chi scrive il file di configurazione) sono YAML e JSON.  La differenza tra YAML e JSON è che il primo è estendibile.
>
>
> Il difetto maggiore che trovo in JSON è la mancata tipizzazione
> di date e datetime.

Si, questa è una limitazione abbastanza irritante.
Io infatti per i files di configurazione uso YAML, con un decoder custom 
che implementa diverse estensioni (come ad esempio, specificare un file, 
directory, un locale, un engine sqlalchemy, pkg resources, e così via).

Ecco un esempio:

paths:
   template: &template !pkg_resource_path app:templates
   static: !pkg_resource_path app:static
   flatpages: &flatpages !pkg_resource_path app:flatpages
   media: &media !make_dir [media]
   tmp: &tmp !make_dir [tmp]
   template_cache: &template_cache !make_dir [*tmp, mako_modules]

defs:
   charset: &charset utf-8

   lookup: &lookup !make_template
     directories: [*template, *flatpages]
     module_directory: *template_cache
     output_encoding: *charset
     default_filters: [unicode, h, trim]

   engine: &engine !make_engine
     url: postgresql://x:y@localhost/z
     echo: false

python:
   logger: !make_global_logger
     filename: "/tmp/app.log"
     level: DEBUG

Il decoder produce un dizionario a cui si può accedere, ad esempio, con:

conf['python.logger'], conf['paths.template'] e così via.

 > [...]



Ciao  Manlio


Maggiori informazioni sulla lista Python