ConfigParser y secciones en mayuscula/minuscula

Renato Covarrubias Romero rnt en bla.cl
Vie Jul 10 14:34:12 CEST 2009


El 10/07/09 07:41, Arnau Sanchez escribió:
> Oswaldo Hernández wrote:
>
>> El problema con el que me encuentro es que si intento leer una sección
>> llamada '[general]' y el usuario la ha escrito como '[GENERAL]' ó
>> '[General]' el modulo ConfigParser no la encuentra.
>
> En general, quien toca un fichero de configuración debería saber lo que
> está haciendo. Pero en fin, supongo que es un caso especial de usuario
> no técnico.
>
>> Veo que una vez que el objeto ConfigParser ha leido el archivo, tiene
>> la propiedad '_sections' que es un diccionario con todo el contenido
>> del archivo ini. La unica solución que se me ocurre hacer una copia de
>> este diccionario convirtiendo los nombres de seccion y clave a
>> minúsculas.
>
> Se me ocurre otra forma, mira:
>
> http://docs.python.org/library/configparser.html#ConfigParser.ConfigParser
>
> El segundo parámetro de ConfigParser() es el tipo de diccionario que
> usará internamente. Si le pasas una clase que implemente un diccionario
> con claves case-insensitive, como por ejemplo ésta de aquí:
>
> http://code.activestate.com/recipes/283455/
>
> Podrás hacer algo así:
>
> parser = ConfigParser(dict_type=caselessDict)
> parser.read("file.conf")
> parse.get("MySECtiON", "var1")
>
>> NOTA: Sorry si este mensaje llega dos veces, lo envie anteriormente
>> con el from erroneo.
>
> Tranquilo, llegó sólo una; si lo mandas desde una cuenta no registrada
> el mensaje queda en espera de aprobación, a mi me ha pasado varias veces
> (lo que no sé es si los administradores se miran esos mensajes o no).

Interesante opción, pero quizás demaciado complejo para lo que necesita.

# ---

from ConfigParser import ConfigParser

class IncaseConfigParser(ConfigParser):
   def get(self, section, option, raw=False, vars=None):
     for s in self.sections():
       if s.lower() == section.lower():
         for o in self.options(s):
           if o.lower() == option.lower():
             return ConfigParser.get(self, s, o, raw, vars)
     return None

parse = IncaseConfigParser()
parser.read("file.conf")
parse.get("MySECtiON", "var1")

# ---

Saludos!

-- 
Renato Covarrubias Romero                   counter.li.org  #399677
rnt [at] rnt.cl				                      http://rnt.cl
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es