From dda0ff5b3c68a5a2d1c8d7c3cd33a074c6982edd Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 28 Feb 2024 09:51:16 +0100 Subject: [PATCH 1/2] Image layout function fix Removes the relative path calculation from the "image" function in layout.py,as it was broken. Now all set url-paths must be relative to the documentation root. --- sphinx_needs/layout.py | 18 ++++++---- tests/conftest.py | 6 ++++ tests/doc_test/doc_layout/_images/smile.png | Bin 0 -> 6322 bytes tests/doc_test/doc_layout/conf.py | 17 ++++++++-- tests/doc_test/doc_layout/index.rst | 12 +++++++ .../doc_test/doc_layout/subfolder_1/index.rst | 8 +++++ .../doc_test/doc_layout/subfolder_2/index.rst | 8 +++++ .../subfolder_2/subfolder_smile.png | Bin 0 -> 6322 bytes tests/test_layouts.py | 32 ++++++++++++++++-- 9 files changed, 91 insertions(+), 10 deletions(-) create mode 100644 tests/doc_test/doc_layout/_images/smile.png create mode 100644 tests/doc_test/doc_layout/subfolder_1/index.rst create mode 100644 tests/doc_test/doc_layout/subfolder_2/index.rst create mode 100644 tests/doc_test/doc_layout/subfolder_2/subfolder_smile.png diff --git a/sphinx_needs/layout.py b/sphinx_needs/layout.py index a4d14b58b..ef8ba79cb 100644 --- a/sphinx_needs/layout.py +++ b/sphinx_needs/layout.py @@ -841,7 +841,7 @@ def image( """ See https://docutils.sourceforge.io/docs/ref/rst/directives.html#images - If url starts with ``icon:`` the following string is taken is icon-name and the related icon is shown. + If **url** starts with ``icon:`` the following string is taken as icon-name and the related icon is shown. Example: ``icon:activity`` will show: .. image:: _static/activity.png @@ -854,7 +854,17 @@ def image( '<>' '<>' # Get url from need['url'] - :param url: + If **url** starts with ``:field`` the URL value is taken from the defined field of the current need + object. + + .. hint:: Relative URLs + + If a relative path for the URL parameter is given, it must be relative to the documentation + root folder and not relative to the current need location, for which it gets executed. + + Example: ``<>``, + + :param url: Relative path to the project folder or an absolute path :param height: :param width: :param align: @@ -924,10 +934,6 @@ def image( url = value - if not is_external and not os.path.isabs(url): - subfolder_amount = self.need["docname"].count("/") - url = "../" * subfolder_amount + url - if is_external: url_parsed = urlparse(url) filename = os.path.basename(url_parsed.path) + ".png" diff --git a/tests/conftest.py b/tests/conftest.py index e39cd8524..3059499b4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -18,6 +18,7 @@ from sphinx.application import Sphinx from sphinx.testing.path import path from sphinx.testing.util import SphinxTestApp +from sphinx.util.console import strip_colors from syrupy.extensions.single_file import SingleFileSnapshotExtension, WriteMode from xprocess import ProcessStarter @@ -283,6 +284,11 @@ def test_app(make_app, sphinx_test_tempdir, request): docutilsconf=builder_params.get("docutilsconf"), parallel=builder_params.get("parallel", 0), ) + # Add the Sphinx warning as list to the app + app.warning_list = strip_colors( + app._warning.getvalue().replace(str(app.srcdir), "srcdir") + ).splitlines() + # Add the spec_pattern as an attribute to the Sphinx app object app.spec_pattern = builder_params.get("spec_pattern", "*.cy.js") # Add the ``test_js`` function as an attribute to the Sphinx app object diff --git a/tests/doc_test/doc_layout/_images/smile.png b/tests/doc_test/doc_layout/_images/smile.png new file mode 100644 index 0000000000000000000000000000000000000000..4637119117fafcdc636009993f58bce3afda2e39 GIT binary patch literal 6322 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 literal 0 HcmV?d00001 diff --git a/tests/doc_test/doc_layout/conf.py b/tests/doc_test/doc_layout/conf.py index c118c5817..fe0dbc11e 100644 --- a/tests/doc_test/doc_layout/conf.py +++ b/tests/doc_test/doc_layout/conf.py @@ -31,7 +31,7 @@ }, ] -needs_extra_options = ["author"] +needs_extra_options = ["author", "author_image"] needs_layouts = { "example": { @@ -41,8 +41,21 @@ "meta": [ '**status**: <>', '**author**: <>', + '**author_image**: <>', ], - "side": ['<>'], + "side": ['<>'], + }, + }, + "image_author": { + "grid": "simple_side_right_partial", + "layout": { + "head": ['**<>**'], + "meta": [ + '**status**: <>', + r'<>', + r'<>', + ], + "side": ['<>'], }, }, "optional_author": { diff --git a/tests/doc_test/doc_layout/index.rst b/tests/doc_test/doc_layout/index.rst index ce1cf38ea..b4a3d9bf7 100644 --- a/tests/doc_test/doc_layout/index.rst +++ b/tests/doc_test/doc_layout/index.rst @@ -1,6 +1,11 @@ TEST DOCUMENT ============= +.. toctree:: + + subfolder_1/index + subfolder_2/index + .. spec:: title_clean_layout :layout: clean @@ -12,10 +17,17 @@ TEST DOCUMENT .. spec:: title_example_layout :layout: example + :author: some author .. spec:: title_layout_optional_author :layout: optional_author :author: some author +.. spec:: title_layout_image_author + :layout: image_author + :author: some author + :author_image: _images/smile.png + .. spec:: title_layout_footer_grid :layout: footer_grid + diff --git a/tests/doc_test/doc_layout/subfolder_1/index.rst b/tests/doc_test/doc_layout/subfolder_1/index.rst new file mode 100644 index 000000000..425467602 --- /dev/null +++ b/tests/doc_test/doc_layout/subfolder_1/index.rst @@ -0,0 +1,8 @@ +Subfolder 1 +=========== + +Image-layout test + +.. spec:: title_layout_image_author_sub_1 + :layout: image_author + :author_image: _images/smile.png \ No newline at end of file diff --git a/tests/doc_test/doc_layout/subfolder_2/index.rst b/tests/doc_test/doc_layout/subfolder_2/index.rst new file mode 100644 index 000000000..4970aedf9 --- /dev/null +++ b/tests/doc_test/doc_layout/subfolder_2/index.rst @@ -0,0 +1,8 @@ +Subfolder 2 +=========== + +Image-layout test with local image file + +.. spec:: title_layout_image_author_sub_2 + :layout: image_author + :author_image: subfolder_2/subfolder_smile.png \ No newline at end of file diff --git a/tests/doc_test/doc_layout/subfolder_2/subfolder_smile.png b/tests/doc_test/doc_layout/subfolder_2/subfolder_smile.png new file mode 100644 index 0000000000000000000000000000000000000000..4637119117fafcdc636009993f58bce3afda2e39 GIT binary patch literal 6322 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 literal 0 HcmV?d00001 diff --git a/tests/test_layouts.py b/tests/test_layouts.py index bed530dca..14abb11b7 100644 --- a/tests/test_layouts.py +++ b/tests/test_layouts.py @@ -5,12 +5,15 @@ @pytest.mark.parametrize( "test_app", - [{"buildername": "html", "srcdir": "doc_test/doc_layout"}], + [{"buildername": "html", "srcdir": "doc_test/doc_layout", "no_plantuml": True}], indirect=True, ) def test_doc_build_html(test_app): app = test_app app.build() + + assert len(app.warning_list) == 0 + html = (app.outdir / "index.html").read_text() assert "title_clean_layout" in html assert "title_complete_layout" in html @@ -18,7 +21,7 @@ def test_doc_build_html(test_app): assert "title_example_layout" in html needs = extract_needs_from_html(html) - assert len(needs) == 6 + assert len(needs) == 7 assert ( 'author: some author' @@ -28,3 +31,28 @@ def test_doc_build_html(test_app): # check simple_footer grid layout assert "custom footer for" in html + + # Check image is correctly referenced + assert ( + '_images/smile.png' + in html + ) + + # Check a "root"-image is correctly referenced in subfolders + html_subfolder_1 = (app.outdir / "subfolder_1/index.html").read_text() + assert ( + '../_images/smile.png' + in html_subfolder_1 + ) + assert '_images/smile.png' in html_subfolder_1 + + # Check a "subfolder"-image is correctly referenced in subfolders + html_subfolder_2 = (app.outdir / "subfolder_2/index.html").read_text() + assert ( + '../_images/subfolder_smile.png' + in html_subfolder_2 + ) + assert ( + 'subfolder_2/subfolder_smile.png' + in html_subfolder_2 + ) From 0a29976ace109b707f3fe5e026c1a9d265ad4228 Mon Sep 17 00:00:00 2001 From: Daniel Woste Date: Wed, 28 Feb 2024 10:20:38 +0100 Subject: [PATCH 2/2] Catch warnings just for html builder --- tests/conftest.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 3059499b4..9317a88b6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -285,9 +285,14 @@ def test_app(make_app, sphinx_test_tempdir, request): parallel=builder_params.get("parallel", 0), ) # Add the Sphinx warning as list to the app - app.warning_list = strip_colors( - app._warning.getvalue().replace(str(app.srcdir), "srcdir") - ).splitlines() + # Somehow "app._warning" seems to be just a boolean, if the builder is "latex" or "singlehtml". + # In this case we don't catch the warnings. + if builder_params.get("buildername", "html") == "html": + app.warning_list = strip_colors( + app._warning.getvalue().replace(str(app.srcdir), "srcdir") + ).splitlines() + else: + app.warning_list = None # Add the spec_pattern as an attribute to the Sphinx app object app.spec_pattern = builder_params.get("spec_pattern", "*.cy.js")