diff --git a/opsdroid/__main__.py b/opsdroid/__main__.py index 1831d0893..9517f627e 100644 --- a/opsdroid/__main__.py +++ b/opsdroid/__main__.py @@ -15,7 +15,11 @@ def main(): logging.info("Stated application") with OpsDroid() as opsdroid: loader = Loader(opsdroid) - opsdroid.config = loader.load_config_file("./configuration.yaml") + opsdroid.config = loader.load_config_file([ + "./configuration.yaml", + "~/.opsdroid/configuration.yaml", + "/etc/opsdroid/configuration.yaml" + ]) if "logging" in opsdroid.config: set_logging_level(opsdroid.config['logging']) loader.load_config(opsdroid.config) diff --git a/opsdroid/loader.py b/opsdroid/loader.py index d03f2dc8a..24f1786fd 100644 --- a/opsdroid/loader.py +++ b/opsdroid/loader.py @@ -71,11 +71,19 @@ def __init__(self, opsdroid): self.opsdroid = opsdroid logging.debug("Loaded loader") - def load_config_file(self, config_path): + def load_config_file(self, config_paths): """Load a yaml config file from path.""" - if not os.path.isfile(config_path): - self.opsdroid.critical("Config file " + config_path + - " not found", 1) + config_path = "" + for possible_path in config_paths: + if not os.path.isfile(possible_path): + logging.warning("Config file " + possible_path + + " not found", 1) + else: + config_path = possible_path + break + + if not config_path: + self.opsdroid.critical("No configuration files found", 1) try: with open(config_path, 'r') as stream: diff --git a/tests/test_loader.py b/tests/test_loader.py index 65c9f759b..f91e83d43 100644 --- a/tests/test_loader.py +++ b/tests/test_loader.py @@ -25,17 +25,17 @@ def reset_subprocess_mocks(self): def test_load_config_file(self): opsdroid, loader = self.setup() - config = loader.load_config_file("tests/configs/minimal.yaml") + config = loader.load_config_file(["tests/configs/minimal.yaml"]) self.assertIsNotNone(config) def test_load_non_existant_config_file(self): opsdroid, loader = self.setup() - loader.load_config_file("file_which_does_not_exist") + loader.load_config_file(["file_which_does_not_exist"]) self.assertEqual(len(opsdroid.mock_calls), 2) def test_load_broken_config_file(self): opsdroid, loader = self.setup() - loader.load_config_file("tests/configs/broken.yaml") + loader.load_config_file(["tests/configs/broken.yaml"]) self.assertRaises(yaml.YAMLError) def test_setup_modules(self):