示例#1
0
 def test_set_config_file_multipath(self):
     json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "json")
     yaml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "yaml")
     provider = FilesystemProvider([yaml_path, json_path], "cfitall")
     provider._set_config_file()
     self.assertEqual(provider.config_file, os.path.join(yaml_path, "cfitall.yml"))
     self.assertEqual(provider.config_file_type, "yaml")
示例#2
0
 def test_update(self):
     yaml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "yaml")
     provider = FilesystemProvider([yaml_path], "cfitall")
     self.assertEqual(provider.dict, {})
     self.assertTrue(provider.update())
     self.assertEqual(
         sorted(provider.dict.keys()), ["foo", "global", "search", "stuff"]
     )
     self.assertEqual(provider.dict["global"]["name"], "cfityaml")
     self.assertEqual(provider.dict["foo"]["bar"], "baz")
示例#3
0
文件: registry.py 项目: wryfi/cfitall
    def __init__(
        self,
        name: str,
        defaults: Dict = None,
        providers: Optional[List[ConfigProviderBase]] = None,
    ) -> None:
        """
        The configuration registry holds configuration data from different sources
        and reconciles it for retrieval. If the defaults dict is provided, it
        will be used to seed the default configuration values for the registry,
        equivalent to calling set_default() for each configuration key in defaults.

        :param name: namespace for configuration registry
        :param defaults: default configuration values
        :param providers: providers to add to the registry
        """
        if not defaults:
            defaults = {}
        self.name = name
        self.values = {"super": {}, "defaults": defaults}
        if providers is not None:
            self.providers = ProviderManager(providers=providers)
        else:
            self.providers = ProviderManager()
            path = [os.path.join("/etc", name)]
            if home := os.getenv("HOME"):
                path.insert(0, os.path.join(home, ".local", "etc", name))
            self.providers.register(FilesystemProvider(path, name))
            self.providers.register(EnvironmentProvider(name))
示例#4
0
 def test_init_empty_provider(self):
     provider = FilesystemProvider([], "test")
     self.assertEqual(provider.path, [])
     self.assertEqual(provider.prefix, "test")
     self.assertEqual(provider.provider_name, "filesystem")
     self.assertEqual(provider.dict, {})
     self.assertIsNone(provider.config_file)
     self.assertIsNone(provider.config_file_type)
示例#5
0
 def test_deregister_unregistered(self):
     manager = ProviderManager()
     manager.register(FilesystemProvider(["/etc/foo"], "foo"))
     manager.deregister("environment")
     self.assertIn("filesystem", manager.ordering)
     self.assertEqual(len(manager.ordering), 1)
     self.assertTrue(hasattr(manager, "filesystem"))
     self.assertNotIn("environment", manager.ordering)
     self.assertNotEqual(len(manager.ordering), 2)
示例#6
0
 def test_init_with_providers(self):
     providers = [
         FilesystemProvider(["/etc/foo"], "foo"),
         EnvironmentProvider("foo"),
     ]
     manager = ProviderManager(providers=providers)
     self.assertEqual(len(manager.ordering), 2)
     self.assertEqual("filesystem", manager.ordering[0])
     self.assertEqual("environment", manager.ordering[1])
     self.assertTrue(hasattr(manager, "environment"))
     self.assertTrue(hasattr(manager, "filesystem"))
示例#7
0
 def test_read_config_file_json(self):
     json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "json")
     provider = FilesystemProvider([json_path], "cfitall")
     provider._set_config_file()
     self.assertEqual(provider.dict, {})
     provider._read_config_file()
     self.assertEqual(sorted(provider.dict.keys()), ["foo", "global", "search"])
     self.assertEqual(provider.dict["global"]["name"], "cfitjson")
     self.assertEqual(
         provider.dict["search"], ["/Users/wryfi/foo", "/Users/wryfi/bar"]
     )
示例#8
0
 def test_providers_filesystem_extra(self):
     cf = ConfigurationRegistry("cfitall")
     cf.providers.register(
         FilesystemProvider(
             [
                 os.path.join(os.path.dirname(os.path.abspath(__file__)),
                              "yaml")
             ],
             "extra",
             provider_name="filesystem_extra",
         ), )
     cf.providers.filesystem.path.append(
         os.path.join(os.path.dirname(os.path.abspath(__file__)), "yaml")),
     cf.update()
     os.environ["EXTRA__STUFF"] = "extra_env"
     self.assertEqual(cf.get("stuff"), "extra_yaml")
     self.assertEqual(cf.get("foo.bar"), "baz")
     self.assertEqual(cf.get("foo.bang"), "WHAMMY!")
示例#9
0
 def test_providers_filesystem_only(self):
     cf = ConfigurationRegistry(
         "cfitall",
         providers=[
             FilesystemProvider(
                 [
                     os.path.join(
                         os.path.dirname(os.path.abspath(__file__)), "yaml")
                 ],
                 "cfitall",
             )
         ],
     )
     cf.update()
     with self.assertRaises(KeyError):
         _ = cf.values["environment"]
     with self.assertRaises(AttributeError):
         _ = cf.providers.environment
     self.assertEqual(cf.providers.ordering, ["filesystem"])
     self.assertEqual(cf.get("global.name"), "cfityaml")
     self.assertEqual(cf.get("foo.bar"), "baz")
     self.assertIsNone(cf.get("foo.bang"))
示例#10
0
 def test_read_config_file_none(self):
     provider = FilesystemProvider([], "test")
     provider._read_config_file()
     self.assertEqual(provider.dict, {})
示例#11
0
 def test_set_config_file_json_first(self):
     json_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "json")
     provider = FilesystemProvider([json_path], "cfitall")
     provider._set_config_file()
     self.assertEqual(provider.config_file, os.path.join(json_path, "cfitall.json"))
     self.assertEqual(provider.config_file_type, "json")