diff --git a/autoapi/mappers/python/mapper.py b/autoapi/mappers/python/mapper.py index 4d9bd92..699b4d7 100644 --- a/autoapi/mappers/python/mapper.py +++ b/autoapi/mappers/python/mapper.py @@ -5,6 +5,7 @@ import os import re import sphinx.environment +from sphinx.errors import ExtensionError import sphinx.util from sphinx.util.console import bold import sphinx.util.docstrings @@ -286,6 +287,9 @@ class PythonSphinxMapper(SphinxMapperBase): shortened, relative path the package/module """ dir_root_files = list(self._find_files(patterns, dirs, ignore)) + if not dir_root_files: + raise ExtensionError(f"No source files found in: {','.join(dirs)}") + if not self._need_to_load(dir_root_files): LOGGER.debug( "[AutoAPI] Skipping read stage because source files have not changed." diff --git a/tests/python/pyemptyexample/conf.py b/tests/python/pyemptyexample/conf.py new file mode 100644 index 0000000..aa77ca5 --- /dev/null +++ b/tests/python/pyemptyexample/conf.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +templates_path = ["_templates"] +source_suffix = ".rst" +master_doc = "index" +project = "pyexample" +copyright = "2015, readthedocs" +author = "readthedocs" +version = "0.1" +release = "0.1" +language = None +exclude_patterns = ["_build"] +pygments_style = "sphinx" +todo_include_todos = False +html_theme = "alabaster" +htmlhelp_basename = "pyexampledoc" +extensions = ["sphinx.ext.autodoc", "autoapi.extension"] +autoapi_type = "python" +autoapi_dirs = ["example"] +autoapi_python_class_content = "both" +autoapi_options = [ + "members", + "undoc-members", # this is temporary until we add docstrings across the codebase + "show-inheritance", + "show-module-summary", + "special-members", + "imported-members", + "inherited-members", +] diff --git a/tests/python/pyemptyexample/index.rst b/tests/python/pyemptyexample/index.rst new file mode 100644 index 0000000..5d8a591 --- /dev/null +++ b/tests/python/pyemptyexample/index.rst @@ -0,0 +1,25 @@ +.. pyexample documentation master file, created by + sphinx-quickstart on Fri May 29 13:34:37 2015. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to pyexample's documentation! +===================================== + +.. toctree:: + + autoapi/index + +Contents: + +.. toctree:: + :maxdepth: 2 + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff --git a/tests/python/test_pyintegration.py b/tests/python/test_pyintegration.py index ff25cd1..d4f3cd8 100644 --- a/tests/python/test_pyintegration.py +++ b/tests/python/test_pyintegration.py @@ -9,6 +9,7 @@ from unittest.mock import patch, Mock, call import pytest import sphinx from sphinx.application import Sphinx +from sphinx.errors import ExtensionError import sphinx.util.logging from autoapi.mappers.python import ( @@ -912,3 +913,11 @@ class TestAutodocTypehintsPackage: example2_file = example2_handle.read() assert "(*int*)" in example2_file + + +def test_no_files_found(builder): + """Test that building does not fail when no sources files are found.""" + with pytest.raises(ExtensionError) as exc_info: + builder("pyemptyexample") + + assert os.path.dirname(__file__) in str(exc_info.value)