diff --git a/os_api_ref/__init__.py b/os_api_ref/__init__.py index 05e0fca..e011897 100644 --- a/os_api_ref/__init__.py +++ b/os_api_ref/__init__.py @@ -203,11 +203,11 @@ class RestParametersDirective(Table): if fpath in YAML_CACHE: return YAML_CACHE[fpath] + lookup = {} # self.app.info("Fpath: %s" % fpath) try: with open(fpath, 'r') as stream: lookup = ordered_load(stream) - self._check_yaml_sorting(fpath, lookup) except IOError: self.env.warn( self.env.docname, @@ -217,6 +217,14 @@ class RestParametersDirective(Table): self.app.warn(exc) raise + if lookup: + self._check_yaml_sorting(fpath, lookup) + else: + self.env.warn( + self.env.docname, + "Parameters file is empty %s" % fpath) + return + YAML_CACHE[fpath] = lookup return lookup @@ -272,7 +280,10 @@ class RestParametersDirective(Table): This allows use to reference an external file for the actual parameter definitions. """ + lookup = self._load_param_file(fpath) + if not lookup: + return content = "\n".join(self.content) parsed = yaml.load(content) diff --git a/os_api_ref/tests/examples/warnings/empty_parameters_file.yaml b/os_api_ref/tests/examples/warnings/empty_parameters_file.yaml new file mode 100644 index 0000000..54bd776 --- /dev/null +++ b/os_api_ref/tests/examples/warnings/empty_parameters_file.yaml @@ -0,0 +1 @@ +# Empty parameter file diff --git a/os_api_ref/tests/examples/warnings/index.rst b/os_api_ref/tests/examples/warnings/index.rst index 5b686f0..92f9aa6 100644 --- a/os_api_ref/tests/examples/warnings/index.rst +++ b/os_api_ref/tests/examples/warnings/index.rst @@ -14,3 +14,24 @@ I am text, hear me roar! - name: lookup_key_name - name: name_1 - invalid_name + + +No Parameters Specified +----------------------- + +.. rest_parameters:: parameters.yaml + + + +Empty File and Parameters Specified +----------------------------------- + +.. rest_parameters:: empty_parameters_file.yaml + + - name: name + +Nonexistent Parameter File +-------------------------- + +.. rest_parameters:: no_parameters.yaml + diff --git a/os_api_ref/tests/test_warnings.py b/os_api_ref/tests/test_warnings.py index 5cc58d5..0a4e132 100644 --- a/os_api_ref/tests/test_warnings.py +++ b/os_api_ref/tests/test_warnings.py @@ -52,7 +52,7 @@ class TestWarnings(base.TestCase): self.warning) def test_missing_lookup_name(self): - """Warning when missing lookup key in parameter file.""" + """Warning when missing a lookup key in parameter file.""" self.assertIn( ("WARNING: No field definition for ``lookup_key_name`` found in "), self.warning) @@ -73,3 +73,23 @@ class TestWarnings(base.TestCase): ("WARNING: Invalid parameter definition ``invalid_name``. " + "Expected format: ``name: reference``. "), self.warning) + + def test_empty_parameter_file(self): + """Warning when parameter file exists but is empty.""" + self.assertIn( + ("WARNING: Parameters file is empty"), + self.warning) + + def test_no_parameters_set(self): + """Error when parameters are not set in rest_parameters stanza.""" + self.assertIn( + ("ERROR: No parameters defined\n\n.." + + " rest_parameters:: parameters.yaml\n"), + self.warning) + + def test_parameter_file_not_exist(self): + """Error when parameter file does not exist""" + self.assertIn( + ("ERROR: No parameters defined\n\n.." + + " rest_parameters:: no_parameters.yaml\n"), + self.warning)