Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-readme_renderer for openSUSE:Factory checked in at 2022-08-08 08:44:49 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-readme_renderer (Old) and /work/SRC/openSUSE:Factory/.python-readme_renderer.new.1521 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-readme_renderer" Mon Aug 8 08:44:49 2022 rev:8 rq:989371 version:35.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-readme_renderer/python-readme_renderer.changes 2022-02-09 20:38:30.938277746 +0100 +++ /work/SRC/openSUSE:Factory/.python-readme_renderer.new.1521/python-readme_renderer.changes 2022-08-08 08:44:51.406393097 +0200 @@ -1,0 +2,6 @@ +Fri Jul 15 10:07:35 UTC 2022 - Jacob Michalskie <hel@lcp.world> + +- Update to 35.0: + * works with newer versions of cmarkgfm + +------------------------------------------------------------------- Old: ---- readme_renderer-32.0.tar.gz New: ---- readme_renderer-35.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-readme_renderer.spec ++++++ --- /var/tmp/diff_new_pack.QvvM5Z/_old 2022-08-08 08:44:51.834394355 +0200 +++ /var/tmp/diff_new_pack.QvvM5Z/_new 2022-08-08 08:44:51.838394367 +0200 @@ -19,7 +19,7 @@ %define skip_python2 1 %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-readme_renderer -Version: 32.0 +Version: 35.0 Release: 0 Summary: A library for rendering "readme" descriptions License: Apache-2.0 ++++++ readme_renderer-32.0.tar.gz -> readme_renderer-35.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/CHANGES.rst new/readme_renderer-35.0/CHANGES.rst --- old/readme_renderer-32.0/CHANGES.rst 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/CHANGES.rst 2022-04-19 19:31:33.000000000 +0200 @@ -1,6 +1,33 @@ Changes ======= +35.0 (2022-04-19) +----------------- + +* Add py.typed to the built wheel (#228) +* Use isolated build for tox (#229) +* Fix renderer ignore (#230) +* Remove legacy check command and distutils (#233) +* Emit a warning when no content is rendered (#231) +* Drop support for Python 3.6 (#236) +* Update html attribute order in tests (#235) + +34.0 (2022-03-11) +----------------- + +* Add static types (#225) + +33.0 (2022-03-05) +----------------- + +* Support cmarkgfm>=0.8.0 (#224) + +33.0 (2022-02-05) +----------------- + +* Support cmarkgfm>=0.8.0 (#224) +* Support Python 3.10 + 32.0 (2021-12-13) ----------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/MANIFEST.in new/readme_renderer-35.0/MANIFEST.in --- old/readme_renderer-32.0/MANIFEST.in 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/MANIFEST.in 2022-04-19 19:31:33.000000000 +0200 @@ -1,5 +1,6 @@ include LICENSE README.rst CHANGES.rst include tox.ini .coveragerc pytest.ini +include readme_renderer/py.typed recursive-include tests *.html recursive-include tests *.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/PKG-INFO new/readme_renderer-35.0/PKG-INFO --- old/readme_renderer-32.0/PKG-INFO 2021-12-13 17:25:01.055701700 +0100 +++ new/readme_renderer-35.0/PKG-INFO 2022-04-19 19:31:47.814312000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: readme_renderer -Version: 32.0 +Version: 35.0 Summary: readme_renderer is a library for rendering "readme" descriptions for Warehouse Home-page: https://github.com/pypa/readme_renderer Author: The Python Packaging Authority @@ -18,13 +18,13 @@ Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy -Requires-Python: >=3.6 +Requires-Python: >=3.7 Provides-Extra: md License-File: LICENSE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/pyproject.toml new/readme_renderer-35.0/pyproject.toml --- old/readme_renderer-32.0/pyproject.toml 1970-01-01 01:00:00.000000000 +0100 +++ new/readme_renderer-35.0/pyproject.toml 2022-04-19 19:31:33.000000000 +0200 @@ -0,0 +1,18 @@ +[build-system] +requires = ["setuptools>=40.8.0", "wheel", "bleach>=2.1.0", "docutils>=0.13.1", "Pygments>=2.5.1"] +build-backend = "setuptools.build_meta:__legacy__" + +[tool.mypy] +strict = true +warn_unused_configs = true +show_error_codes = true +enable_error_code = [ + "ignore-without-code" +] + +[[tool.mypy.overrides]] +# These modules do not yet have types available. +module = [ + "cmarkgfm.*" +] +ignore_missing_imports = true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/readme_renderer/__about__.py new/readme_renderer-35.0/readme_renderer/__about__.py --- old/readme_renderer-32.0/readme_renderer/__about__.py 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/readme_renderer/__about__.py 2022-04-19 19:31:33.000000000 +0200 @@ -30,7 +30,7 @@ ) __uri__ = "https://github.com/pypa/readme_renderer" -__version__ = "32.0" +__version__ = "35.0" __author__ = "The Python Packaging Authority" __email__ = "ad...@mail.pypi.org" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/readme_renderer/clean.py new/readme_renderer-35.0/readme_renderer/clean.py --- old/readme_renderer-32.0/readme_renderer/clean.py 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/readme_renderer/clean.py 2022-04-19 19:31:33.000000000 +0200 @@ -14,6 +14,7 @@ from __future__ import absolute_import, division, print_function import functools +from typing import Any, Dict, Iterator, List, Optional import bleach import bleach.callbacks @@ -59,15 +60,14 @@ "input": ["type", "checked", "disabled"], } -ALLOWED_STYLES = [ -] - class DisabledCheckboxInputsFilter: - def __init__(self, source): + # The typeshed for bleach (html5lib) filters is incomplete, use `typing.Any` + # See https://github.com/python/typeshed/blob/505ea726415016e53638c8b584b8fdc9c722cac1/stubs/bleach/bleach/html5lib_shim.pyi#L7-L8 # noqa E501 + def __init__(self, source: Any) -> None: self.source = source - def __iter__(self): + def __iter__(self) -> Iterator[Dict[str, Optional[str]]]: for token in self.source: if token.get("name") == "input": # only allow disabled checkbox inputs @@ -85,23 +85,24 @@ else: yield token - def __getattr__(self, name): + def __getattr__(self, name: str) -> Any: return getattr(self.source, name) -def clean(html, tags=None, attributes=None, styles=None): +def clean( + html: str, + tags: Optional[List[str]] = None, + attributes: Optional[Dict[str, List[str]]] = None +) -> Optional[str]: if tags is None: tags = ALLOWED_TAGS if attributes is None: attributes = ALLOWED_ATTRIBUTES - if styles is None: - styles = ALLOWED_STYLES # Clean the output using Bleach cleaner = bleach.sanitizer.Cleaner( tags=tags, attributes=attributes, - styles=styles, filters=[ # Bleach Linkify makes it easy to modify links, however, we will # not be using it to create additional links. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/readme_renderer/integration/__init__.py new/readme_renderer-35.0/readme_renderer/integration/__init__.py --- old/readme_renderer-32.0/readme_renderer/integration/__init__.py 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/readme_renderer/integration/__init__.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,14 +0,0 @@ -# Copyright 2015 Donald Stufft -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -from __future__ import absolute_import, division, print_function diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/readme_renderer/integration/distutils.py new/readme_renderer-35.0/readme_renderer/integration/distutils.py --- old/readme_renderer-32.0/readme_renderer/integration/distutils.py 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/readme_renderer/integration/distutils.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,102 +0,0 @@ -# Copyright 2015 Donald Stufft -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -from __future__ import absolute_import, division, print_function - -import cgi -import io -import re - -import distutils.log -from distutils.command.check import check as _check -from distutils.core import Command - -from ..rst import render - - -# Regular expression used to capture and reformat doctuils warnings into -# something that a human can understand. This is loosely borrowed from -# Sphinx: https://github.com/sphinx-doc/sphinx/blob -# /c35eb6fade7a3b4a6de4183d1dd4196f04a5edaf/sphinx/util/docutils.py#L199 -_REPORT_RE = re.compile( - r'^<string>:(?P<line>(?:\d+)?): ' - r'\((?P<level>DEBUG|INFO|WARNING|ERROR|SEVERE)/(\d+)?\) ' - r'(?P<message>.*)', re.DOTALL | re.MULTILINE) - - -class _WarningStream(object): - def __init__(self): - self.output = io.StringIO() - - def write(self, text): - matched = _REPORT_RE.search(text) - - if not matched: - self.output.write(text) - return - - self.output.write( - u"line {line}: {level_text}: {message}\n".format( - level_text=matched.group('level').capitalize(), - line=matched.group('line'), - message=matched.group('message').rstrip('\r\n'))) - - def __str__(self): - return self.output.getvalue() - - -class Check(_check): - def check_restructuredtext(self): - """ - Checks if the long string fields are reST-compliant. - """ - # Warn that this command is deprecated - # Don't use self.warn() because it will cause the check to fail. - Command.warn( - self, - "This command has been deprecated. Use `twine check` instead: " - "https://packaging.python.org/guides/making-a-pypi-friendly-readme" - "#validating-restructuredtext-markup" - ) - - data = self.distribution.get_long_description() - content_type = getattr( - self.distribution.metadata, 'long_description_content_type', None) - - if content_type: - content_type, _ = cgi.parse_header(content_type) - if content_type != 'text/x-rst': - self.warn( - "Not checking long description content type '%s', this " - "command only checks 'text/x-rst'." % content_type) - return - - # None or empty string should both trigger this branch. - if not data or data == 'UNKNOWN': - self.warn( - "The project's long_description is either missing or empty.") - return - - stream = _WarningStream() - markup = render(data, stream=stream) - - if markup is None: - self.warn( - "The project's long_description has invalid markup which will " - "not be rendered on PyPI. The following syntax errors were " - "detected:\n%s" % stream) - return - - self.announce( - "The project's long description is valid RST.", - level=distutils.log.INFO) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/readme_renderer/markdown.py new/readme_renderer-35.0/readme_renderer/markdown.py --- old/readme_renderer-32.0/readme_renderer/markdown.py 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/readme_renderer/markdown.py 2022-04-19 19:31:33.000000000 +0200 @@ -15,8 +15,9 @@ import re import warnings +from typing import cast, Any, Dict, Callable, Match, Optional -from html.parser import unescape +from html import unescape import pygments import pygments.lexers @@ -32,13 +33,13 @@ try: import cmarkgfm from cmarkgfm.cmark import Options as cmarkgfmOptions - variants = { - "GFM": lambda raw: cmarkgfm.github_flavored_markdown_to_html( + variants: Dict[str, Callable[[str], str]] = { + "GFM": lambda raw: cast(str, cmarkgfm.github_flavored_markdown_to_html( raw, options=cmarkgfmOptions.CMARK_OPT_UNSAFE - ), - "CommonMark": lambda raw: cmarkgfm.markdown_to_html( + )), + "CommonMark": lambda raw: cast(str, cmarkgfm.markdown_to_html( raw, options=cmarkgfmOptions.CMARK_OPT_UNSAFE - ), + )), } except ImportError: warnings.warn(_EXTRA_WARNING) @@ -51,7 +52,11 @@ } -def render(raw, variant="GFM", **kwargs): +def render( + raw: str, + variant: str = "GFM", + **kwargs: Any +) -> Optional[str]: if not variants: warnings.warn(_EXTRA_WARNING) return None @@ -71,7 +76,7 @@ return cleaned -def _highlight(html): +def _highlight(html: str) -> str: """Syntax-highlights HTML-rendered Markdown. Plucks sections to highlight that conform the the GitHub fenced code info @@ -94,7 +99,7 @@ '(?(in_code)|<code>)(?P<code>.+?)' r'</code></pre>', re.DOTALL) - def replacer(match): + def replacer(match: Match[Any]) -> str: try: lang = match.group('lang') lang = _LANG_ALIASES.get(lang, lang) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/readme_renderer/rst.py new/readme_renderer-35.0/readme_renderer/rst.py --- old/readme_renderer-32.0/readme_renderer/rst.py 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/readme_renderer/rst.py 2022-04-19 19:31:33.000000000 +0200 @@ -14,20 +14,28 @@ from __future__ import absolute_import, division, print_function import io +from typing import Any, Dict, IO, Optional, Union from docutils.core import publish_parts +from docutils.nodes import colspec, image from docutils.writers.html4css1 import HTMLTranslator, Writer from docutils.utils import SystemMessage from .clean import clean -class ReadMeHTMLTranslator(HTMLTranslator): +class ReadMeHTMLTranslator(HTMLTranslator): # type: ignore[misc] # docutils is incomplete, returns `Any` python/typeshed#7256 # noqa E501 # Overrides base class not to output `<object>` tag for SVG images. - object_image_types = {} + object_image_types: Dict[str, str] = {} - def emptytag(self, node, tagname, suffix="\n", **attributes): + def emptytag( + self, + node: Union[colspec, image], + tagname: str, + suffix: str = "\n", + **attributes: Any + ) -> Any: """Override this to add back the width/height attributes.""" if tagname == "img": if "width" in node: @@ -95,7 +103,11 @@ } -def render(raw, stream=None, **kwargs): +def render( + raw: str, + stream: Optional[IO[str]] = None, + **kwargs: Any +) -> Optional[str]: if stream is None: # Use a io.StringIO as the warning stream to prevent warnings from # being printed to sys.stderr. @@ -117,4 +129,7 @@ if rendered: return clean(rendered) else: + # If the warnings stream is empty, docutils had none, so add ours. + if not stream.tell(): + stream.write("No content rendered from RST source.") return None diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/readme_renderer/txt.py new/readme_renderer-35.0/readme_renderer/txt.py --- old/readme_renderer-32.0/readme_renderer/txt.py 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/readme_renderer/txt.py 2022-04-19 19:31:33.000000000 +0200 @@ -14,6 +14,7 @@ from __future__ import absolute_import, division, print_function import sys +from typing import Any, Optional from .clean import clean @@ -26,6 +27,6 @@ return escape(s, quote=True).replace("'", ''') -def render(raw, **kwargs): +def render(raw: str, **kwargs: Any) -> Optional[str]: rendered = html_escape(raw).replace("\n", "<br>") return clean(rendered, tags=["br"]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/readme_renderer.egg-info/PKG-INFO new/readme_renderer-35.0/readme_renderer.egg-info/PKG-INFO --- old/readme_renderer-32.0/readme_renderer.egg-info/PKG-INFO 2021-12-13 17:25:01.000000000 +0100 +++ new/readme_renderer-35.0/readme_renderer.egg-info/PKG-INFO 2022-04-19 19:31:47.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: readme-renderer -Version: 32.0 +Version: 35.0 Summary: readme_renderer is a library for rendering "readme" descriptions for Warehouse Home-page: https://github.com/pypa/readme_renderer Author: The Python Packaging Authority @@ -18,13 +18,13 @@ Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 +Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy -Requires-Python: >=3.6 +Requires-Python: >=3.7 Provides-Extra: md License-File: LICENSE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/readme_renderer.egg-info/SOURCES.txt new/readme_renderer-35.0/readme_renderer.egg-info/SOURCES.txt --- old/readme_renderer-32.0/readme_renderer.egg-info/SOURCES.txt 2021-12-13 17:25:01.000000000 +0100 +++ new/readme_renderer-35.0/readme_renderer.egg-info/SOURCES.txt 2022-04-19 19:31:47.000000000 +0200 @@ -3,6 +3,7 @@ LICENSE MANIFEST.in README.rst +pyproject.toml pytest.ini setup.cfg setup.py @@ -12,19 +13,16 @@ readme_renderer/__main__.py readme_renderer/clean.py readme_renderer/markdown.py +readme_renderer/py.typed readme_renderer/rst.py readme_renderer/txt.py readme_renderer.egg-info/PKG-INFO readme_renderer.egg-info/SOURCES.txt readme_renderer.egg-info/dependency_links.txt -readme_renderer.egg-info/entry_points.txt readme_renderer.egg-info/requires.txt readme_renderer.egg-info/top_level.txt -readme_renderer/integration/__init__.py -readme_renderer/integration/distutils.py tests/__init__.py tests/test_clean.py -tests/test_integration_distutils.py tests/test_markdown.py tests/test_noextra.py tests/test_rst.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/readme_renderer.egg-info/entry_points.txt new/readme_renderer-35.0/readme_renderer.egg-info/entry_points.txt --- old/readme_renderer-32.0/readme_renderer.egg-info/entry_points.txt 2021-12-13 17:25:01.000000000 +0100 +++ new/readme_renderer-35.0/readme_renderer.egg-info/entry_points.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -[distutils.commands] -check = readme_renderer.integration.distutils:Check - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/readme_renderer.egg-info/requires.txt new/readme_renderer-35.0/readme_renderer.egg-info/requires.txt --- old/readme_renderer-32.0/readme_renderer.egg-info/requires.txt 2021-12-13 17:25:01.000000000 +0100 +++ new/readme_renderer-35.0/readme_renderer.egg-info/requires.txt 2022-04-19 19:31:47.000000000 +0200 @@ -3,4 +3,4 @@ Pygments>=2.5.1 [md] -cmarkgfm<0.7.0,>=0.5.0 +cmarkgfm>=0.8.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/setup.py new/readme_renderer-35.0/setup.py --- old/readme_renderer-32.0/setup.py 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/setup.py 2022-04-19 19:31:33.000000000 +0200 @@ -48,18 +48,16 @@ "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", ], install_requires=["bleach>=2.1.0", "docutils>=0.13.1", "Pygments>=2.5.1"], - entry_points={ - "distutils.commands": ["check = readme_renderer.integration.distutils:Check"], - }, - extras_require={"md": "cmarkgfm>=0.5.0,<0.7.0"}, + include_package_data=True, + extras_require={"md": "cmarkgfm>=0.8.0"}, packages=setuptools.find_packages(exclude=["tests", "tests.*"]), - python_requires=">=3.6", + python_requires=">=3.7", ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/tests/fixtures/test_GFM_024.html new/readme_renderer-35.0/tests/fixtures/test_GFM_024.html --- old/readme_renderer-32.0/tests/fixtures/test_GFM_024.html 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/tests/fixtures/test_GFM_024.html 2022-04-19 19:31:33.000000000 +0200 @@ -1,6 +1,6 @@ <ul> -<li><input disabled type="checkbox"> Valid unchecked checkbox</li> -<li><input checked disabled type="checkbox"> Valid checked checkbox</li> +<li><input type="checkbox" disabled> Valid unchecked checkbox</li> +<li><input type="checkbox" checked disabled> Valid checked checkbox</li> <li> Invalid enabled checkbox</li> <li> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/tests/fixtures/test_GFM_doublequotes.html new/readme_renderer-35.0/tests/fixtures/test_GFM_doublequotes.html --- old/readme_renderer-32.0/tests/fixtures/test_GFM_doublequotes.html 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/tests/fixtures/test_GFM_doublequotes.html 2022-04-19 19:31:33.000000000 +0200 @@ -5,7 +5,7 @@ <span class="sd">"""This is a docstring."""</span> <span class="k">pass</span> </pre> -<pre><span class="kd">func</span> <span class="nx">ThisIsGo</span><span class="p">(){</span> - <span class="k">return</span> -<span class="p">}</span> +<pre><span class="kd">func</span><span class="w"> </span><span class="nx">ThisIsGo</span><span class="p">(){</span><span class="w"></span> +<span class="w"> </span><span class="k">return</span><span class="w"></span> +<span class="p">}</span><span class="w"></span> </pre> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/tests/fixtures/test_GFM_highlight.html new/readme_renderer-35.0/tests/fixtures/test_GFM_highlight.html --- old/readme_renderer-32.0/tests/fixtures/test_GFM_highlight.html 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/tests/fixtures/test_GFM_highlight.html 2022-04-19 19:31:33.000000000 +0200 @@ -4,7 +4,7 @@ <pre><span class="k">def</span> <span class="nf">this_is_python</span><span class="p">():</span> <span class="k">pass</span> </pre> -<pre><span class="kd">func</span> <span class="nx">ThisIsGo</span><span class="p">(){</span> - <span class="k">return</span> -<span class="p">}</span> +<pre><span class="kd">func</span><span class="w"> </span><span class="nx">ThisIsGo</span><span class="p">(){</span><span class="w"></span> +<span class="w"> </span><span class="k">return</span><span class="w"></span> +<span class="p">}</span><span class="w"></span> </pre> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/tests/fixtures/test_GFM_img.html new/readme_renderer-35.0/tests/fixtures/test_GFM_img.html --- old/readme_renderer-32.0/tests/fixtures/test_GFM_img.html 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/tests/fixtures/test_GFM_img.html 2022-04-19 19:31:33.000000000 +0200 @@ -1,4 +1,4 @@ -<p><img alt="Image of Yaktocat" src="https://octodex.github.com/images/yaktocat.png"></p> +<p><img src="https://octodex.github.com/images/yaktocat.png" alt="Image of Yaktocat"></p> <p align="center"> - <img alt="Image of Yaktocat" height="100px" src="https://octodex.github.com/images/yaktocat.png" width="20%"> + <img src="https://octodex.github.com/images/yaktocat.png" width="20%" height="100px" alt="Image of Yaktocat"> </p> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/tests/test_integration_distutils.py new/readme_renderer-35.0/tests/test_integration_distutils.py --- old/readme_renderer-32.0/tests/test_integration_distutils.py 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/tests/test_integration_distutils.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,99 +0,0 @@ -import distutils.dist -import unittest.mock - -import pytest -import setuptools.dist - -import readme_renderer.integration.distutils - - -def test_valid_rst(): - dist = distutils.dist.Distribution(attrs=dict( - long_description="Hello, I am some text.")) - checker = readme_renderer.integration.distutils.Check(dist) - checker.warn = unittest.mock.Mock() - - checker.check_restructuredtext() - - checker.warn.assert_not_called() - - -def test_invalid_rst(): - dist = distutils.dist.Distribution(attrs=dict( - long_description="Hello, I am some `totally borked< text.")) - checker = readme_renderer.integration.distutils.Check(dist) - checker.warn = unittest.mock.Mock() - checker.announce = unittest.mock.Mock() - - checker.check_restructuredtext() - - # Should warn once for the syntax error, and finally to warn that the - # overall syntax is invalid - checker.warn.assert_called_once_with(unittest.mock.ANY) - message = checker.warn.call_args[0][0] - assert 'invalid markup' in message - assert 'line 1: Warning:' in message - assert 'start-string without end-string' in message - - # Should not have announced that it was valid. - checker.announce.assert_not_called() - - -def test_malicious_rst(): - description = """ -.. raw:: html - <script>I am evil</script> -""" - dist = distutils.dist.Distribution(attrs=dict( - long_description=description)) - checker = readme_renderer.integration.distutils.Check(dist) - checker.warn = unittest.mock.Mock() - checker.announce = unittest.mock.Mock() - - checker.check_restructuredtext() - - # Should warn once for the syntax error, and finally to warn that the - # overall syntax is invalid - checker.warn.assert_called_once_with(unittest.mock.ANY) - message = checker.warn.call_args[0][0] - assert 'directive disabled' in message - - # Should not have announced that it was valid. - checker.announce.assert_not_called() - - -@pytest.mark.filterwarnings('ignore:::distutils.dist') -def test_markdown(): - dist = setuptools.dist.Distribution(attrs=dict( - long_description="Hello, I am some text.", - long_description_content_type="text/markdown")) - checker = readme_renderer.integration.distutils.Check(dist) - checker.warn = unittest.mock.Mock() - - checker.check_restructuredtext() - - checker.warn.assert_called() - assert 'content type' in checker.warn.call_args[0][0] - - -def test_invalid_missing(): - dist = distutils.dist.Distribution(attrs=dict()) - checker = readme_renderer.integration.distutils.Check(dist) - checker.warn = unittest.mock.Mock() - - checker.check_restructuredtext() - - checker.warn.assert_called_once_with(unittest.mock.ANY) - assert 'missing' in checker.warn.call_args[0][0] - - -def test_invalid_empty(): - dist = distutils.dist.Distribution(attrs=dict( - long_description="")) - checker = readme_renderer.integration.distutils.Check(dist) - checker.warn = unittest.mock.Mock() - - checker.check_restructuredtext() - - checker.warn.assert_called_once_with(unittest.mock.ANY) - assert 'missing' in checker.warn.call_args[0][0] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/tests/test_rst.py new/readme_renderer-35.0/tests/test_rst.py --- old/readme_renderer-32.0/tests/test_rst.py 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/tests/test_rst.py 2022-04-19 19:31:33.000000000 +0200 @@ -53,3 +53,33 @@ """, stream=warnings) is None assert '"raw" directive disabled' in warnings.getvalue() + + +def test_rst_empty_file(): + warnings = io.StringIO() + assert render("", stream=warnings) is None + + assert "No content rendered from RST source." in warnings.getvalue() + + +def test_rst_header_only(): + warnings = io.StringIO() + assert render(""" +Header +====== +""", stream=warnings) is None + + assert "No content rendered from RST source." in warnings.getvalue() + + +def test_header_and_malformed_emits_docutils_warning_only(): + warnings = io.StringIO() + assert render(""" +Header +====== + +====== +""", stream=warnings) is None + + assert len(warnings.getvalue().splitlines()) == 1 + assert "No content rendered from RST source." not in warnings.getvalue() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/readme_renderer-32.0/tox.ini new/readme_renderer-35.0/tox.ini --- old/readme_renderer-32.0/tox.ini 2021-12-13 17:24:51.000000000 +0100 +++ new/readme_renderer-35.0/tox.ini 2022-04-19 19:31:33.000000000 +0200 @@ -1,13 +1,23 @@ [tox] -envlist = py36,py37,py38,py39,pep8,packaging,noextra +envlist = py37,py38,py39,py310,pep8,packaging,noextra,mypy +isolated_build = True [testenv] deps = pytest commands = - pytest --strict {posargs} + pytest --strict-markers {posargs} extras = md +[testenv:mypy] +basepython = python3 +deps = + mypy + types-bleach + types-docutils + types-Pygments +commands = mypy readme_renderer + [testenv:pep8] basepython = python3 deps =