def config_defaults(configurator, config, files=['config.yml']): ''' Reads and extends/creates configuration from yaml source. .. note:: If exists, this method extends config with defaults, so it will not override existing values, merely add those, that were not defined already! :param pyramid.config.Configurator configurator: pyramid's app configurator :param string config: yaml file locations :param list files: list of files to include from location ''' # getting spec path package_name, filename = resolve_asset_spec(config) if not package_name: path = filename else: __import__(package_name) package = sys.modules[package_name] path = os.path.join(package_path(package), filename) config = ConfigManager(files=[os.path.join(path, f) for f in files]) # we could use this method both for creating and extending. Hence the checks to not override if not 'config' in configurator.registry: configurator.registry['config'] = config else: config.merge(configurator.registry['config']) configurator.registry['config'] = config
def init(config=None, directories=None, files=None, force=False): """ Initialize the configuration manager :param config: `string` or `dict` :param directories: semi-colon separated `string` or `list` of director(y|es) :param files: semi-colon separated `string` or `list` of file(s) :param force: force initialization even if it's already initialized """ global _settings if not force and _settings is not None: raise ConfigurationAlreadyInitializedException("Configuration manager object is already initialized.") context = { 'user_config_dir': user_config_dir() } _settings = ConfigManager(__builtin_config, context=context) if config: _settings.merge(config) local_config_file = join(user_config_dir(), 'myrpi.yaml') if exists(local_config_file): print('Loading config file: %s' % local_config_file) _settings.load_files(local_config_file) if directories: _settings.load_dirs(directories) if files: _settings.load_files(files) return _settings
def test_builtins(self): a_date = '2014/12/01' cm = ConfigManager(init_value=self.builtin_config, context=dict(date=a_date)) cm.merge(""" a_date: %(date)s """) cm.version = 2.6 self.assertEqual(cm.version, 2.6) self.assertEqual(cm.a_date, a_date) self.assertEqual(cm.general.name, self.builtin_config['general']['name']) self.assertIsInstance(cm.domains['coldon_ir'], ConfigDict) self.assertEqual(cm.data.url, 'some uri')
def test_issue9(self): """ Test just loading config files: https://github.com/pylover/pymlconf/issues/9 """ files = [path.join(thisdir, 'files', 'pytest_sauce.conf')] _cm = ConfigManager(files=files) self.assertTrue(_cm != None) _cm.merge(""" browsers: - browsername: chrome platform: linux driver: chrome """)
def test_issue9(self): """ Test just loading config files: https://github.com/pylover/pymlconf/issues/9 """ files = [path.join(thisdir, 'files', 'pytest_sauce.conf')] _cm = ConfigManager(files=files) self.assertTrue(_cm != None) _cm.merge(""" browsers: - browsername: chrome platform: linux driver: chrome """)
def config_defaults(configurator, config_locations, files=['config.yaml', 'config.yml']): """ Read and extends/creates configuration from yaml source. .. note:: If exists, this method extends config with defaults, so it will not override existing values, merely add those, that were not defined already! :param pyramid.config.Configurator configurator: pyramid's app configurator :param list config_locations: list of yaml file locations :param list files: list of files to include from location """ if not isinstance(config_locations, (list, tuple)): config_locations = config_locations.split(',') env = configurator.registry.settings.get('env', 'dev') file_paths = [] for location in config_locations: path = _translate_config_path(location) current_files = files if os.path.isfile(path): path, current_files = os.path.split(path) current_files = [current_files] for config_path in [ os.path.join(path, f) for f in _env_filenames(current_files, env) ]: if os.path.isfile(config_path): file_paths.append(config_path) config = ConfigManager(files=file_paths) # we could use this method both for creating and extending. # Hence the checks to not override if 'config' not in configurator.registry: configurator.registry['config'] = config else: config.merge(configurator.registry['config']) configurator.registry['config'] = config
def test_overiding_branch(self): """ Testing Branch overriding """ cm = ConfigManager(init_value=self._builtin) self.assertEqual(cm.background, [255, 255, 255]) # testing merge additinal_config = """ my_section: item1: hi app: listen: sock3: addr: 10.8.0.2 port: 9090 """ cm.merge(additinal_config) self.assertEqual(cm.app.name, "MyApp") self.assertEqual(len(cm.app.listen), 3) self.assertEqual(cm.app.listen.sock1.addr, "192.168.0.1") self.assertEqual(cm.app.listen.sock1.port, 8080) self.assertEqual(cm.app.listen.sock2.addr, "127.0.0.1") self.assertEqual(cm.app.listen.sock2.port, '89') self.assertEqual(cm.app.listen.sock3.addr, "10.8.0.2") # Issue 7 self.assertEqual(cm.app.listen.sock3.port, 9090) # Issue 7 self.assertEqual(cm.logging.logfile, "/var/log/myapp.log") self.assertEqual(cm.my_section.item1, "hi") # testing replace additinal_config = """ my_section: item1: hi app: listen: false """ cm.merge(additinal_config) self.assertEqual(cm.my_section.item1, "hi") self.assertEqual(cm.app.listen, False) # Issue 7
def test_overiding_branch(self): """ Testing Branch overriding """ cm = ConfigManager(init_value=self._builtin) self.assertEqual(cm.background, [255, 255, 255]) # testing merge additinal_config = """ my_section: item1: hi app: listen: sock3: addr: 10.8.0.2 port: 9090 """ cm.merge(additinal_config) self.assertEqual(cm.app.name, "MyApp") self.assertEqual(len(cm.app.listen), 3) self.assertEqual(cm.app.listen.sock1.addr, "192.168.0.1") self.assertEqual(cm.app.listen.sock1.port, 8080) self.assertEqual(cm.app.listen.sock2.addr, "127.0.0.1") self.assertEqual(cm.app.listen.sock2.port, '89') self.assertEqual(cm.app.listen.sock3.addr, "10.8.0.2") # Issue 7 self.assertEqual(cm.app.listen.sock3.port, 9090) # Issue 7 self.assertEqual(cm.logging.logfile, "/var/log/myapp.log") self.assertEqual(cm.my_section.item1, "hi") # testing replace additinal_config = """ my_section: item1: hi app: listen: false """ cm.merge(additinal_config) self.assertEqual(cm.my_section.item1, "hi") self.assertEqual(cm.app.listen, False) # Issue 7
def config_defaults( configurator, config_locations, files=['config.yaml', 'config.yml']): """ Read and extends/creates configuration from yaml source. .. note:: If exists, this method extends config with defaults, so it will not override existing values, merely add those, that were not defined already! :param pyramid.config.Configurator configurator: pyramid's app configurator :param list config_locations: list of yaml file locations :param list files: list of files to include from location """ if not isinstance(config_locations, (list, tuple)): config_locations = config_locations.split(',') env = configurator.registry.settings.get('env', 'dev') file_paths = [] for location in config_locations: path = _translate_config_path(location) current_files = files if os.path.isfile(path): path, current_files = os.path.split(path) current_files = [current_files] for config_path in [ os.path.join(path, f) for f in _env_filenames(current_files, env) ]: if os.path.isfile(config_path): file_paths.append(config_path) config = ConfigManager(files=file_paths) # we could use this method both for creating and extending. # Hence the checks to not override if 'config' not in configurator.registry: configurator.registry['config'] = config else: config.merge(configurator.registry['config']) configurator.registry['config'] = config
def load_config(args): """Tries to load the configuration file or throws ExitWithError.""" config = ConfigManager(DEFAULT_CONFIG) config_dir = home_dir.get() try: if args.config_file is not None: filename_override = os.path.abspath(args.config_file) else: filename_override = None config_contents = config_dir.read_config_file(filename_override) config.merge(ConfigManager(config_contents)) except Exception as ex: print "Error reading configuration: %s" % ex.message if not 'api_key' in config.keys() or not 'api_secret' in config.keys(): raise ExitWithError( -1, ("Cosmos command is unconfigured. Use '%s configure' to " + "create a valid configuration or use --config-file with a " + "valid configuration file") % sys.argv[0]) config.credentials = (config.api_key, config.api_secret) strip_config(config) return config
def test_builtins(self): a_date = "2014/12/01" builtin = """ builtin: value1: built-in config value """ cm = ConfigManager(builtin=builtin, init_value=self.initial_config, context=dict(date=a_date)) self.assertEqual(cm.builtin.value1, "built-in config value") cm.merge( """ a_date: %(date)s """ ) self.assertEqual(cm.version, 2.5) cm.version = 2.6 self.assertEqual(cm.version, 2.6) self.assertEqual(cm.a_date, a_date) self.assertEqual(cm.general.name, self.initial_config["general"]["name"]) self.assertIsInstance(cm.domains["coldon_ir"], ConfigDict) self.assertEqual(cm.data.url, "some uri")