From 084496f30598c04154c10f9e57262a033846f2e2 Mon Sep 17 00:00:00 2001 From: Xavier Dupre Date: Wed, 19 Jul 2023 16:47:07 +0200 Subject: [PATCH 1/3] Adds function to check dvi --- .github/workflows/check_urls.yml | 34 +++++++++++++++++++++++++++ .github/workflows/documentation.yml | 23 +++++++++++++++++- _unittests/ut__main/test_helpers.py | 13 ++++++++++ sphinx_runpython/conf_helper.py | 22 +++++++++++++++++ sphinx_runpython/runpython/run_cmd.py | 4 +++- 5 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/check_urls.yml create mode 100644 _unittests/ut__main/test_helpers.py create mode 100644 sphinx_runpython/conf_helper.py diff --git a/.github/workflows/check_urls.yml b/.github/workflows/check_urls.yml new file mode 100644 index 0000000..a2bee6e --- /dev/null +++ b/.github/workflows/check_urls.yml @@ -0,0 +1,34 @@ +name: Check URLs + +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: urls-checker-code + uses: urlstechie/urlchecker-action@master + with: + subfolder: mlstatpy + file_types: .md,.py,.rst,.ipynb + print_all: false + timeout: 2 + retry_count# : 2 + # exclude_urls: https://dumps.wikimedia.org/other/pageviews/%Y/%Y-%m/pageviews-%Y%m%d-%H0000.gz,https://dumps.wikimedia.org/frwiki/latest/latest-all-titles-in-ns0.gz + exclude_patterns: https://dumps.wikimedia.org/ + # force_pass : true + + - name: urls-checker-docs + uses: urlstechie/urlchecker-action@master + with: + subfolder: _doc + file_types: .md,.py,.rst,.ipynb + print_all: false + timeout: 2 + retry_count# : 2 + # exclude_urls: https://github, ... + # exclude_patterns: https://github.com/... + # force_pass : true diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 3596e4d..68960d1 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -26,6 +26,28 @@ jobs: - name: Install requirements-dev.txt run: python -m pip install -r requirements-dev.txt + - name: Cache pip + uses: actions/cache@v2 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('requirements-dev.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + ${{ runner.os }}- + + - name: Generate coverage report + run: | + pip install pytest + pip install pytest-cov + export PYTHONPATH=. + pytest --cov=./_unittests/ --cov-report=xml --durations=10 --ignore-glob=**LONG*.py --ignore-glob=**notebook*.py + export PYTHONPATH= + + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v3 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + - name: Install run: python -m pip install -e . @@ -34,7 +56,6 @@ jobs: cp LICENSE* ./_doc cp CHANGELOGS* ./_doc - - name: Documentation run: python -m sphinx ./_doc ./dist/html -n -w doc.txt diff --git a/_unittests/ut__main/test_helpers.py b/_unittests/ut__main/test_helpers.py new file mode 100644 index 0000000..7fa482e --- /dev/null +++ b/_unittests/ut__main/test_helpers.py @@ -0,0 +1,13 @@ +import unittest +from sphinx_runpython.ext_test_case import ExtTestCase +from sphinx_runpython.conf_helper import has_dvipng, has_dvisvgm + + +class TestHelpers(ExtTestCase): + def test_dvis(self): + self.assertIn(has_dvipng(), {True, False}) + self.assertIn(has_dvisvgm(), {True, False}) + + +if __name__ == "__main__": + unittest.main(verbosity=2) diff --git a/sphinx_runpython/conf_helper.py b/sphinx_runpython/conf_helper.py new file mode 100644 index 0000000..98133a2 --- /dev/null +++ b/sphinx_runpython/conf_helper.py @@ -0,0 +1,22 @@ +from .runpython import run_cmd + + +def _check_cmd(cmd): + stdout, _ = run_cmd(f"{cmd} --help", wait=True) + if cmd in stdout: + return True + return False + + +def has_dvipng(): + """ + Checks `dvipng` is installed. + """ + return _check_cmd("dvipng") + + +def has_dvisvgm(): + """ + Checks `dvisvgm` is installed. + """ + return _check_cmd("dvisvgm") diff --git a/sphinx_runpython/runpython/run_cmd.py b/sphinx_runpython/runpython/run_cmd.py index 4d511ff..5176b0e 100644 --- a/sphinx_runpython/runpython/run_cmd.py +++ b/sphinx_runpython/runpython/run_cmd.py @@ -119,7 +119,7 @@ def skip_run_cmd( def run_cmd( cmd, sin="", - shell=sys.platform.startswith("win"), + shell=None, wait=False, log_error=True, stop_running_if=None, @@ -184,6 +184,8 @@ def run_cmd( ``__exit__`` should be called if wait if False. Parameter *prefix_log* was added. """ + if shell is None: + shell = sys.platform.startswith("win") if prefix_log is None: prefix_log = "" if logf is not None: From dc3fc2f45f0e3b8de979e199755bf58e6ccad45b Mon Sep 17 00:00:00 2001 From: Xavier Dupre Date: Wed, 19 Jul 2023 16:51:02 +0200 Subject: [PATCH 2/3] ut --- .github/workflows/check_urls.yml | 2 +- .github/workflows/documentation.yml | 2 +- sphinx_runpython/conf_helper.py | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check_urls.yml b/.github/workflows/check_urls.yml index a2bee6e..9f895ad 100644 --- a/.github/workflows/check_urls.yml +++ b/.github/workflows/check_urls.yml @@ -12,7 +12,7 @@ jobs: - name: urls-checker-code uses: urlstechie/urlchecker-action@master with: - subfolder: mlstatpy + subfolder: sphinx_runpython file_types: .md,.py,.rst,.ipynb print_all: false timeout: 2 diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 68960d1..09562be 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -1,6 +1,6 @@ name: Documentation -on: [push, pull_request] +on: [push] jobs: build_wheels: diff --git a/sphinx_runpython/conf_helper.py b/sphinx_runpython/conf_helper.py index 98133a2..36a27cc 100644 --- a/sphinx_runpython/conf_helper.py +++ b/sphinx_runpython/conf_helper.py @@ -2,7 +2,10 @@ def _check_cmd(cmd): - stdout, _ = run_cmd(f"{cmd} --help", wait=True) + try: + stdout, _ = run_cmd(f"{cmd} --help", wait=True) + except FileNotFoundError: + return False if cmd in stdout: return True return False From 6925654254e5f3540ea1778c91d5dad417c86b85 Mon Sep 17 00:00:00 2001 From: Xavier Dupre Date: Wed, 19 Jul 2023 17:01:14 +0200 Subject: [PATCH 3/3] fix links --- .../docassert/sphinx_docassert_extension.py | 7 +++---- sphinx_runpython/ext_io_helper.py | 4 +++- sphinx_runpython/gdot/sphinx_gdot_extension.py | 4 ++-- sphinx_runpython/github_link.py | 10 ---------- 4 files changed, 8 insertions(+), 17 deletions(-) diff --git a/sphinx_runpython/docassert/sphinx_docassert_extension.py b/sphinx_runpython/docassert/sphinx_docassert_extension.py index c3aded0..2e7683b 100644 --- a/sphinx_runpython/docassert/sphinx_docassert_extension.py +++ b/sphinx_runpython/docassert/sphinx_docassert_extension.py @@ -19,8 +19,8 @@ def check_typed_make_field( ): """ Overwrites function - #L197>`_. - `make_field `_. Processes one argument of a function. :param self: from original function @@ -116,8 +116,7 @@ def override_transform(self, other_self, node): """ Transform a single field list *node*. Overwrite function `transform - `_. + `_. It only adds extra verification and returns results from the replaced function. diff --git a/sphinx_runpython/ext_io_helper.py b/sphinx_runpython/ext_io_helper.py index 18a4db5..8f0c4a5 100644 --- a/sphinx_runpython/ext_io_helper.py +++ b/sphinx_runpython/ext_io_helper.py @@ -496,7 +496,9 @@ def download_requirejs( local = download(filename, to) except ReadUrlException as e: # pragma: no cover # We implement a backup plan. - new_filename = "http://www.xavierdupre.fr/enseignement/setup/require.js/2.3.6/require.js" + new_filename = ( + "https://requirejs.org/docs/release/2.3.6/minified/require.js" + ) try: local = download(new_filename, to) except ReadUrlException: diff --git a/sphinx_runpython/gdot/sphinx_gdot_extension.py b/sphinx_runpython/gdot/sphinx_gdot_extension.py index 1a3a96e..4c57604 100644 --- a/sphinx_runpython/gdot/sphinx_gdot_extension.py +++ b/sphinx_runpython/gdot/sphinx_gdot_extension.py @@ -282,8 +282,8 @@ def depart_gdot_node_html_svg(self, node): def visit_gdot_node_html(self, node): """ visit collapse_node, the function switches between - `graphviz.py `_ and the :epkg:`SVG` format. + `graphviz.py `_ + and the :epkg:`SVG` format. """ if node["format"].lower() == "png": from sphinx.ext.graphviz import html_visit_graphviz diff --git a/sphinx_runpython/github_link.py b/sphinx_runpython/github_link.py index 076b3c0..357e9ca 100644 --- a/sphinx_runpython/github_link.py +++ b/sphinx_runpython/github_link.py @@ -23,16 +23,6 @@ def _linkcode_resolve(domain, info, package, url_fmt, revision): Determine a link to online source for a class/method/function This is called by sphinx.ext.linkcode - - An example with a long-untouched module that everyone has: - - >>> _linkcode_resolve('py', {'module': 'tty', - ... 'fullname': 'setraw'}, - ... package='tty', - ... url_fmt='http://hg.python.org/cpython/file/' - ... '{revision}/Lib/{package}/{path}#L{lineno}', - ... revision='xxxx') - 'http://hg.python.org/cpython/file/xxxx/Lib/tty/tty.py#L18' """ if revision is None: