Tutorial ======== Story ----- Assume we need to provide flexible configuration for a web application. We have tree configuration levels: * builtin configurations * User configurations * Admin configurations Config files ------------ app/conf/users/sites.mysite.conf:: name: mysite.com owner: name: My Name phone: My Phone Number address: My Address app/conf/admin/root.conf:: server: version: 0.3a sites: admin: name: admin.site.com owner: name: Admin Name phone: Admin Phone Number address: Admin Address app/conf/admin/server.conf:: host: 0.0.0.0 port: 80 ../other_path/../special.conf:: licence_file: /path/to/file log_file: /path/to/file app/src/builtin_config.py:: _builtin_config={ 'server':{'name':'Power Server'} } OR:: _builtin_config=""" server: name: Power Server """ Initialize ---------- You can simply merge all config files above with on statement:: from pymlconf import ConfigManager from app.builtin_config import _builtin_config config_root = ConfigManager( _builtin_config, ['app/conf/admin','app/conf/users'], '../other_path/../special.conf') # All from app/conf/users/sites.mysite.conf print config_root.sites.mysite.name print config_root.sites.mysite.owner.name print config_root.sites.mysite.owner.address print config_root.sites.mysite.owner.phone # All from app/conf/admin/root.conf print config_root.sites.admin.name print config_root.sites.admin.owner.name print config_root.sites.admin.owner.address print config_root.sites.admin.owner.phone print config_root.server.name # from _builtin_config print config_root.server.version # from app/conf/admin/root.conf print config_root.server.host # from app/conf/admin/server.conf print config_root.server.port # from app/conf/admin/server.conf print config_root.licence_file # from ../other_path/../special.conf print config_root.log_file # from ../other_path/../special.conf Reserved Keys ------------- - keys - can_merge - copy - empty - merge