Re: ConfigParser y secciones en mayuscula/minuscula

Renato Covarrubias Romero <[email protected]>
Newsgroups gmane.comp.python.general.castellano
Message-ID <[email protected]>
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

_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.