Python: Acceso a valores YAML usando "notación de puntos"

Estoy usando un archivo de configuración YAML. Entonces este es el código para cargar mi configuración en Python:

import os
import yaml
with open('./config.yml') as file:
    config = yaml.safe_load(file)

Este código en realidad crea un diccionario. Ahora el problema es que para acceder a los valores necesito usar toneladas de corchetes.

Ñame:

mysql:
    user:
        pass: secret

Pitón:

import os
import yaml
with open('./config.yml') as file:
    config = yaml.safe_load(file)
print(config['mysql']['user']['pass']) # <--

Prefiero algo como eso (notación de puntos):

config('mysql.user.pass')

Entonces, mi idea es utilizar la interfaz PyStache render ().

import os
import yaml
with open('./config.yml') as file:
    config = yaml.safe_load(file)

import pystache
def get_config_value( yml_path, config ):
    return pystache.render('{{' + yml_path + '}}', config)

get_config_value('mysql.user.pass', config)

¿Sería esa una "buena" solución? Si no, ¿cuál sería una mejor alternativa?

Pregunta adicional [Resuelto]

He decidido usar la solución de Ilja Everilä. Pero ahora tengo una pregunta adicional: ¿cómo crearía una clase de configuración de envoltura alrededor de DotConf?

El siguiente código no funciona, pero espero que te hagas una idea de lo que estoy tratando de hacer:

class Config( DotDict ):
    def __init__( self ):
        with open('./config.yml') as file:
            DotDict.__init__(yaml.safe_load(file))

config = Config()
print(config.django.admin.user)

Error:

AttributeError: 'super' object has no attribute '__getattr__'

Solución

Solo necesitas pasarself al constructor de la superclase.

DotDict.__init__(self, yaml.safe_load(file))

Mejor solución (Ilja Everilä)

super().__init__(yaml.safe_load(file))

Respuestas a la pregunta(4)

Su respuesta a la pregunta