[packages/python-sphinxcontrib-issuetracker] - patched for Sphinx 2..4, partial patch for pytest>3 (incomplete); unified apidocs packaging, relea
qboosh
qboosh at pld-linux.org
Tue Dec 5 22:19:01 CET 2023
commit cdce69ee0a0b394350cb25d17889fa515e97cc4e
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date: Tue Dec 5 22:12:40 2023 +0100
- patched for Sphinx 2..4, partial patch for pytest>3 (incomplete); unified apidocs packaging, release 11
python-sphinxcontrib-issuetracker.spec | 92 +++++---
sphinxcontrib-issuetracker-pytest.patch | 360 +++++++++++++++++++++++++++++
sphinxcontrib-issuetracker-sphinx1.7.patch | 37 +++
3 files changed, 460 insertions(+), 29 deletions(-)
---
diff --git a/python-sphinxcontrib-issuetracker.spec b/python-sphinxcontrib-issuetracker.spec
index 0185b1b..3951606 100644
--- a/python-sphinxcontrib-issuetracker.spec
+++ b/python-sphinxcontrib-issuetracker.spec
@@ -1,6 +1,7 @@
#
# Conditional build:
%bcond_without doc # HTML documentation build
+%bcond_with tests # unit tests (not ready for pytest 4+)
%bcond_without python2 # CPython 2.x module
%bcond_without python3 # CPython 3.x module
#
@@ -8,35 +9,50 @@ Summary: Sphinx extension to reference issues in issue trackers
Summary(pl.UTF-8): Rozszerzenie Sphinksa do tworzenia odnośników do systemów śledzenia zgłoszeń
Name: python-sphinxcontrib-issuetracker
Version: 0.11
-Release: 10
+Release: 11
License: BSD
Group: Development/Languages/Python
-Source0: http://pypi.python.org/packages/source/s/sphinxcontrib-issuetracker/sphinxcontrib-issuetracker-%{version}.tar.gz
+Source0: https://files.pythonhosted.org/packages/source/s/sphinxcontrib-issuetracker/sphinxcontrib-issuetracker-%{version}.tar.gz
# Source0-md5: 69c2f0e5770c5d7bad73f60f8d764e28
Source1: http://docs.python.org/objects.inv?/python-objects.inv
# Source1-md5: 173c3f7fb1ad2162f1f194a5267700db
Source2: http://sphinx.pocoo.org/objects.inv?/sphinx-objects.inv
# Source2-md5: 5f30379fe116fbace2636d5284df8622
Patch0: %{name}-offline.patch
-URL: http://pypi.python.org/pypi/sphinxcontrib-issuetracker
-BuildRequires: rpm-pythonprov
-BuildRequires: rpmbuild(macros) >= 1.710
+Patch1: sphinxcontrib-issuetracker-sphinx1.7.patch
+# TODO: unfinished updates for pytest 4+
+Patch2: sphinxcontrib-issuetracker-pytest.patch
+URL: https://pypi.org/project/sphinxcontrib-issuetracker/
%if %{with python2}
BuildRequires: python-devel >= 1:2.6
-Requires: python-requests >= 0.13
-%if %{with doc}
-BuildRequires: python-requests >= 0.13
-BuildRequires: sphinx-pdg-2 >= 1.1
+BuildRequires: python-setuptools
+%if %{with tests}
+BuildRequires: python-Sphinx >= 1.7
+BuildRequires: python-mock >= 0.7
+BuildRequires: python-pytest >= 3.0
+BuildRequires: python-pytest < 4
+BuildRequires: python-requests >= 1.1
+# launchpadlib, SOAPpy>=0.12.5, debianbts>=1.10
%endif
%endif
%if %{with python3}
BuildRequires: python3-devel >= 1:3.3
-Requires: python3-requests >= 0.13
+BuildRequires: python3-setuptools
+%if %{with tests}
+BuildRequires: python3-Sphinx >= 1.7
+BuildRequires: python3-pytest >= 3.0
+BuildRequires: python3-pytest < 4
+BuildRequires: python3-requests >= 1.1
+%endif
+%endif
+BuildRequires: rpm-pythonprov
+BuildRequires: rpmbuild(macros) >= 1.714
%if %{with doc}
-BuildRequires: python3-requests >= 0.13
+BuildRequires: python3-requests >= 1.1
+# already installed package
+BuildRequires: python3-sphinxcontrib-issuetracker
BuildRequires: sphinx-pdg-3 >= 1.1
%endif
-%endif
BuildArch: noarch
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
@@ -66,9 +82,22 @@ Rozszerzenie Sphinksa do umieszczania odnośników do systemów śledzenia
zgłoszeń - wprost poprzez regułę "issue" lub opcjonalnie poprzez numer
zgłoszenia zapisany tekstowo (np. "#10").
+%package apidocs
+Summary: API documentation for sphinxcontrib-issuetracker module
+Summary(pl.UTF-8): Dokumentacja API modułu sphinxcontrib-issuetracker
+Group: Documentation
+
+%description apidocs
+API documentation for sphinxcontrib-issuetracker module.
+
+%description apidocs -l pl.UTF-8
+Dokumentacja API modułu sphinxcontrib-issuetracker.
+
%prep
%setup -q -n sphinxcontrib-issuetracker-%{version}
%patch0 -p1
+%patch1 -p1
+%patch2 -p1
cp -p %{SOURCE1} %{SOURCE2} doc
@@ -76,28 +105,33 @@ cp -p %{SOURCE1} %{SOURCE2} doc
%if %{with python2}
%py_build
-%if %{with doc}
-PYTHONPATH=$(pwd)/build-2/lib \
-%{__make} -C doc html SPHINXBUILD=sphinx-build-2
-mv doc/_build doc/_build2
+%if %{with tests}
+PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 \
+%{__python} -m pytest tests
%endif
%endif
%if %{with python3}
%py3_build
-%if %{with doc}
-PYTHONPATH=$(pwd)/build-3/lib \
-%{__make} -C doc html SPHINXBUILD=sphinx-build-2
-mv doc/_build doc/_build3
+%if %{with tests}
+PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 \
+%{__python3} -m pytest tests
%endif
%endif
+%if %{with doc}
+PYTHONPATH=$(pwd) \
+%{__make} -C doc html \
+ SPHINXBUILD=sphinx-build-3
+%endif
+
%install
rm -rf $RPM_BUILD_ROOT
%if %{with python2}
%py_install
+
%py_postclean
%endif
@@ -111,12 +145,8 @@ rm -rf $RPM_BUILD_ROOT
%if %{with python2}
%files
%defattr(644,root,root,755)
-%doc CHANGES.rst CREDITS LICENSE README.rst %{?with_doc:doc/_build2/html}
-# top dir should belong to python-Sphinx?
-%dir %{py_sitescriptdir}/sphinxcontrib
-%dir %{py_sitescriptdir}/sphinxcontrib/issuetracker
-%{py_sitescriptdir}/sphinxcontrib/issuetracker/*.py[co]
-%{py_sitescriptdir}/sphinxcontrib/issuetracker/issuetracker.css
+%doc CHANGES.rst CREDITS LICENSE README.rst
+%{py_sitescriptdir}/sphinxcontrib/issuetracker
%{py_sitescriptdir}/sphinxcontrib_issuetracker-%{version}-py*.egg-info
%{py_sitescriptdir}/sphinxcontrib_issuetracker-%{version}-py*-nspkg.pth
%endif
@@ -124,10 +154,14 @@ rm -rf $RPM_BUILD_ROOT
%if %{with python3}
%files -n python3-sphinxcontrib-issuetracker
%defattr(644,root,root,755)
-%doc CHANGES.rst CREDITS LICENSE README.rst %{?with_doc:doc/_build3/html}
-# top dir should belong to python-Sphinx?
-%dir %{py3_sitescriptdir}/sphinxcontrib
+%doc CHANGES.rst CREDITS LICENSE README.rst
%{py3_sitescriptdir}/sphinxcontrib/issuetracker
%{py3_sitescriptdir}/sphinxcontrib_issuetracker-%{version}-py*.egg-info
%{py3_sitescriptdir}/sphinxcontrib_issuetracker-%{version}-py*-nspkg.pth
%endif
+
+%if %{with doc}
+%files apidocs
+%defattr(644,root,root,755)
+%doc doc/_build/html/{_static,*.html,*.js}
+%endif
diff --git a/sphinxcontrib-issuetracker-pytest.patch b/sphinxcontrib-issuetracker-pytest.patch
new file mode 100644
index 0000000..5711fc3
--- /dev/null
+++ b/sphinxcontrib-issuetracker-pytest.patch
@@ -0,0 +1,360 @@
+--- sphinxcontrib-issuetracker-0.11/tests/test_setup.py.orig 2012-06-28 17:12:27.000000000 +0200
++++ sphinxcontrib-issuetracker-0.11/tests/test_setup.py 2023-11-23 21:50:15.985418978 +0100
+@@ -42,7 +42,7 @@ import re
+ BUILTIN_TRACKER_NAME_PATTERN = re.compile('lookup_(.*)_issue')
+
+ import pytest
+-from sphinx.environment import SphinxStandaloneReader
++from sphinx.io import SphinxStandaloneReader
+
+ from sphinxcontrib import issuetracker
+ from sphinxcontrib.issuetracker import resolvers
+--- sphinxcontrib-issuetracker-0.11/tests/conftest.py.orig 2023-11-25 17:17:51.597826211 +0100
++++ sphinxcontrib-issuetracker-0.11/tests/conftest.py 2023-11-25 17:49:32.277529346 +0100
+@@ -103,17 +103,6 @@ def assert_issue_xref(doctree, issue, ti
+ return reference
+
+
+-def pytest_namespace():
+- """
+- Add the following functions to the pytest namespace:
+-
+- - :func:`get_index_doctree`
+- - :func:`assert_issue_xref`
+- """
+- return dict((f.__name__, f) for f in
+- (assert_issue_xref, assert_issue_pending_xref))
+-
+-
+ def pytest_addoption(parser):
+ """
+ Add --offline and --fast options to test runner.
+@@ -133,6 +122,8 @@ def pytest_configure(config):
+ """
+ config.run_fast = config.getvalue('fast')
+ config.run_offline = config.run_fast or config.getvalue('offline')
++ pytest.assert_issue_xref = assert_issue_xref
++ pytest.assert_issue_pending_xref = assert_issue_pending_xref
+
+
+ def pytest_runtest_setup(item):
+@@ -146,7 +137,8 @@ def pytest_runtest_setup(item):
+ pytest.skip('skipping slow test in fast mode')
+
+
+-def pytest_funcarg__content(request):
++ at pytest.fixture
++def content(request):
+ """
+ The content for the test document as string.
+
+@@ -163,13 +155,14 @@ def pytest_funcarg__content(request):
+ if content_mark:
+ return content_mark.args[0]
+ else:
+- issue_id = request.getfuncargvalue('issue_id')
++ issue_id = request.getfixturevalue('issue_id')
+ if issue_id:
+ return '#{0}'.format(issue_id)
+ raise ValueError('no content provided')
+
+
+-def pytest_funcarg__srcdir(request):
++ at pytest.fixture
++def srcdir(request):
+ """
+ The Sphinx source directory for the current test as path.
+
+@@ -177,32 +170,35 @@ def pytest_funcarg__srcdir(request):
+ named ``index.rst``. The content of this document is the return value of
+ the ``content`` funcarg.
+ """
+- tmpdir = request.getfuncargvalue('tmpdir')
++ tmpdir = request.getfixturevalue('tmpdir')
+ srcdir = tmpdir.join('src')
+ srcdir.ensure(dir=True)
+ srcdir.join('conf.py').write(CONF_PY.encode('utf-8'), 'wb')
+- content = request.getfuncargvalue('content')
++ content = request.getfixturevalue('content')
+ srcdir.join('index.rst').write(content.encode('utf-8'), 'wb')
+ return srcdir
+
+
+-def pytest_funcarg__outdir(request):
++ at pytest.fixture
++def outdir(request):
+ """
+ The Sphinx output directory for the current test as path.
+ """
+- tmpdir = request.getfuncargvalue('tmpdir')
++ tmpdir = request.getfixturevalue('tmpdir')
+ return tmpdir.join('html')
+
+
+-def pytest_funcarg__doctreedir(request):
++ at pytest.fixture
++def doctreedir(request):
+ """
+ The Sphinx doctree directory for the current test as path.
+ """
+- tmpdir = request.getfuncargvalue('tmpdir')
++ tmpdir = request.getfixturevalue('tmpdir')
+ return tmpdir.join('doctrees')
+
+
+-def pytest_funcarg__doctree(request):
++ at pytest.fixture
++def doctree(request):
+ """
+ The transformed doctree of the ``content``.
+
+@@ -210,12 +206,13 @@ def pytest_funcarg__doctree(request):
+
+ This funcarg builds the application before test execution.
+ """
+- app = request.getfuncargvalue('app')
++ app = request.getfixturevalue('app')
+ app.build()
+ return app.env.get_doctree('index')
+
+
+-def pytest_funcarg__resolved_doctree(request):
++ at pytest.fixture
++def resolved_doctree(request):
+ """
+ The resolved doctree of the ``content``.
+
+@@ -223,12 +220,13 @@ def pytest_funcarg__resolved_doctree(req
+
+ This funcarg builds the application before test execution.
+ """
+- app = request.getfuncargvalue('app')
++ app = request.getfixturevalue('app')
+ app.build()
+ return app.env.get_and_resolve_doctree('index', app.builder)
+
+
+-def pytest_funcarg__cache(request):
++ at pytest.fixture
++def cache(request):
+ """
+ Return the issue tracker cache.
+
+@@ -236,21 +234,22 @@ def pytest_funcarg__cache(request):
+
+ This funcarg builds the application before test execution.
+ """
+- app = request.getfuncargvalue('app')
++ app = request.getfixturevalue('app')
+ app.build()
+ return app.env.issuetracker_cache
+
+
+-def pytest_funcarg__index_html_file(request):
++ at pytest.fixture
++def index_html_file(request):
+ """
+ Return the path of the ``index.html`` created by building.
+
+ This file contains the ``content`` rendered as HTML. The ``app`` is build
+ by this funcarg to generate the ``index.html`` file.
+ """
+- app = request.getfuncargvalue('app')
++ app = request.getfixturevalue('app')
+ app.build()
+- outdir = request.getfuncargvalue('outdir')
++ outdir = request.getfixturevalue('outdir')
+ return outdir.join('index.html')
+
+
+@@ -267,7 +266,8 @@ def reset_global_state():
+ StandaloneHTMLBuilder.css_files.remove('_static/issuetracker.css')
+
+
+-def pytest_funcarg__confoverrides(request):
++ at pytest.fixture
++def confoverrides(request):
+ """
+ Configuration value overrides for the current test as dictionary.
+
+@@ -281,7 +281,8 @@ def pytest_funcarg__confoverrides(reques
+ return confoverrides_marker.kwargs if confoverrides_marker else {}
+
+
+-def pytest_funcarg__app(request):
++ at pytest.fixture
++def app(request):
+ """
+ A Sphinx application for testing.
+
+@@ -298,23 +299,24 @@ def pytest_funcarg__app(request):
+ build before returning it. Otherwise you need to build explicitly in order
+ to get the output.
+ """
+- srcdir = request.getfuncargvalue('srcdir')
+- outdir = request.getfuncargvalue('outdir')
+- doctreedir = request.getfuncargvalue('doctreedir')
+- confoverrides = request.getfuncargvalue('confoverrides')
++ srcdir = request.getfixturevalue('srcdir')
++ outdir = request.getfixturevalue('outdir')
++ doctreedir = request.getfixturevalue('doctreedir')
++ confoverrides = request.getfixturevalue('confoverrides')
+ app = Sphinx(str(srcdir), str(srcdir), str(outdir), str(doctreedir),
+ 'html', confoverrides=confoverrides, status=None,
+ warning=None, freshenv=True)
+ request.addfinalizer(reset_global_state)
+ if 'mock_lookup' in request.keywords:
+- lookup_mock_issue = request.getfuncargvalue('mock_lookup')
++ lookup_mock_issue = request.getfixturevalue('mock_lookup')
+ app.connect(str('issuetracker-lookup-issue'), lookup_mock_issue)
+ if 'build_app' in request.keywords:
+ app.build()
+ return app
+
+
+-def pytest_funcarg__issue(request):
++ at pytest.fixture
++def issue(request):
+ """
+ An :class:`~sphinxcontrib.issuetracker.Issue` for the current test, or
+ ``None``, if no issue is to be used.
+@@ -332,7 +334,8 @@ def pytest_funcarg__issue(request):
+ return None
+
+
+-def pytest_funcarg__issue_id(request):
++ at pytest.fixture
++def issue_id(request):
+ """
+ The issue id for the current test, or ``None``, if no issue id is to be
+ used.
+@@ -341,14 +344,15 @@ def pytest_funcarg__issue_id(request):
+ the ``issue`` funcarg. If the ``issue`` funcarg returns ``None``, this
+ funcarg also returns ``None``.
+ """
+- issue = request.getfuncargvalue('issue')
++ issue = request.getfixturevalue('issue')
+ if issue:
+ return issue.id
+ else:
+ return None
+
+
+-def pytest_funcarg__mock_lookup(request):
++ at pytest.fixture
++def mock_lookup(request):
+ """
+ A mocked callback for the ``issuetracker-lookup-issue`` event as
+ :class:`~mock.Mock` object.
+@@ -358,7 +362,7 @@ def pytest_funcarg__mock_lookup(request)
+ issue. Otherwise it will always return ``None``.
+ """
+ lookup_mock_issue = Mock(name='lookup_mock_issue', return_value=None)
+- issue = request.getfuncargvalue('issue')
++ issue = request.getfixturevalue('issue')
+ if issue:
+ def lookup(app, tracker_config, issue_id):
+ return issue if issue_id == issue.id else None
+--- sphinxcontrib-issuetracker-0.11/tests/test_builtin_trackers.py.orig 2013-01-17 11:52:44.000000000 +0100
++++ sphinxcontrib-issuetracker-0.11/tests/test_builtin_trackers.py 2023-11-25 17:54:31.892572858 +0100
+@@ -65,11 +65,12 @@ def pytest_generate_tests(metafunc):
+ unable to resolve the issue.
+ """
+ if 'issue' in metafunc.funcargnames:
+- for testname in sorted(metafunc.cls.issues):
+- metafunc.addcall(id=testname, param=testname)
++ testnames = sorted(metafunc.cls.issues)
++ metafunc.parametrize("issue", testnames, ids=testnames)
+
+
+-def pytest_funcarg__testname(request):
++ at pytest.fixture
++def testname(request):
+ """
+ The testname as string, or ``None``, if no testname is known.
+
+@@ -79,7 +80,8 @@ def pytest_funcarg__testname(request):
+ return getattr(request, 'param', None)
+
+
+-def pytest_funcarg__tracker(request):
++ at pytest.fixture
++def tracker(request):
+ """
+ The tracker name as string, or ``None``, if no tracker is known.
+
+@@ -92,7 +94,8 @@ def pytest_funcarg__tracker(request):
+ return request.cls.name
+
+
+-def pytest_funcarg__tracker_config(request):
++ at pytest.fixture
++def tracker_config(request):
+ """
+ The tracker configuration as ``TrackerConfig`` object, or ``None``, if
+ there is no tracker configuration.
+@@ -114,7 +117,8 @@ def pytest_funcarg__tracker_config(reque
+ return cls.tracker_config.get(testname, cls.default_tracker_config)
+
+
+-def pytest_funcarg__confoverrides(request):
++ at pytest.fixture
++def confoverrides(request):
+ """
+ Confoverrides for this test as dictionary.
+
+@@ -126,10 +130,10 @@ def pytest_funcarg__confoverrides(reques
+ """
+ # configure tracker and enable title expansion to test the title retrieval
+ # of builtin trackers, too
+- tracker = request.getfuncargvalue('tracker')
++ tracker = request.getfixturevalue('tracker')
+ confoverrides = dict(issuetracker=tracker,
+ issuetracker_title_template='{issue.title}')
+- tracker_config = request.getfuncargvalue('tracker_config')
++ tracker_config = request.getfixturevalue('tracker_config')
+ if tracker_config:
+ # bring tracker configuration in
+ confoverrides.update(issuetracker_project=tracker_config.project,
+@@ -138,11 +142,12 @@ def pytest_funcarg__confoverrides(reques
+ if request.cls:
+ confoverrides.update(request.cls.confoverrides)
+ # add overrides from the test itself
+- confoverrides.update(request.getfuncargvalue('confoverrides'))
++ confoverrides.update(request.getfixturevalue('confoverrides'))
+ return confoverrides
+
+
+-def pytest_funcarg__issue_id(request):
++ at pytest.fixture
++def issue_id(request):
+ """
+ The issue id of this test as string, or ``None``, if this test doesn't have
+ a ``testname``.
+@@ -150,14 +155,15 @@ def pytest_funcarg__issue_id(request):
+ The issue id is taken from the issue defined in the ``issues`` attribute of
+ the class this test is defined in.
+ """
+- testname = request.getfuncargvalue('testname')
++ testname = request.getfixturevalue('testname')
+ if not testname:
+ return None
+ issue = request.cls.issues[testname]
+ return issue.id if isinstance(issue, Issue) else issue
+
+
+-def pytest_funcarg__issue(request):
++ at pytest.fixture
++def issue(request):
+ """
+ The issue object for this test, or ``None``, if the test is expected to be
+ unable to resolve the issue.
+@@ -165,7 +171,7 @@ def pytest_funcarg__issue(request):
+ The issue id is taken from the issue defined in the ``issues`` attribute of
+ the class this test is defined in.
+ """
+- testname = request.getfuncargvalue('testname')
++ testname = request.getfixturevalue('testname')
+ issue = request.cls.issues[testname]
+ return issue if isinstance(issue, Issue) else None
+
diff --git a/sphinxcontrib-issuetracker-sphinx1.7.patch b/sphinxcontrib-issuetracker-sphinx1.7.patch
new file mode 100644
index 0000000..c788a9c
--- /dev/null
+++ b/sphinxcontrib-issuetracker-sphinx1.7.patch
@@ -0,0 +1,37 @@
+--- sphinxcontrib-issuetracker-0.11/tests/conftest.py.orig 2012-06-28 17:12:27.000000000 +0200
++++ sphinxcontrib-issuetracker-0.11/tests/conftest.py 2023-11-22 19:33:45.157861467 +0100
+@@ -31,7 +31,7 @@ from mock import Mock
+ from docutils import nodes
+ from sphinx.application import Sphinx
+ from sphinx.builders.html import StandaloneHTMLBuilder
+-from sphinx.environment import SphinxStandaloneReader
++from sphinx.io import SphinxStandaloneReader
+ from sphinx.addnodes import pending_xref
+
+ from sphinxcontrib.issuetracker import Issue, IssueReferences
+--- sphinxcontrib-issuetracker-0.11/doc/conf.py.orig 2023-12-04 08:00:14.880894958 +0100
++++ sphinxcontrib-issuetracker-0.11/doc/conf.py 2023-12-04 08:12:05.450378806 +0100
+@@ -74,6 +74,6 @@ def parse_event(env, sig, signode):
+
+
+ def setup(app):
+- app.add_description_unit('confval', 'confval',
++ app.add_object_type('confval', 'confval',
+ 'pair: %s; configuration value')
+- app.add_description_unit('event', 'event', 'pair: %s; event', parse_event)
++ app.add_object_type('event', 'event', 'pair: %s; event', parse_event)
+--- sphinxcontrib-issuetracker-0.11/sphinxcontrib/issuetracker/__init__.py.orig 2012-12-26 00:52:11.000000000 +0100
++++ sphinxcontrib-issuetracker-0.11/sphinxcontrib/issuetracker/__init__.py 2023-12-04 20:53:34.626192634 +0100
+@@ -301,12 +301,10 @@ def init_transformer(app):
+ def copy_stylesheet(app, exception):
+ if app.builder.name != 'html' or exception:
+ return
+- app.info(bold('Copying issuetracker stylesheet... '), nonl=True)
+ dest = path.join(app.builder.outdir, '_static', 'issuetracker.css')
+ source = path.join(path.abspath(path.dirname(__file__)),
+ 'issuetracker.css')
+ copyfile(source, dest)
+- app.info('done')
+
+
+ def setup(app):
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/python-sphinxcontrib-issuetracker.git/commitdiff/cdce69ee0a0b394350cb25d17889fa515e97cc4e
More information about the pld-cvs-commit
mailing list