From 80af5d40d3ca39e2701c44941c1003ae6a280799 Mon Sep 17 00:00:00 2001 From: Kernc Date: Sat, 29 Oct 2022 18:55:46 +0200 Subject: [PATCH] CI: Bump min Python 3.7+ and update tests for Python 3.10 Fix https://github.com/pdoc3/pdoc/issues/400 Thanks @tjni --- a/pdoc/__init__.py +++ b/pdoc/__init__.py @@ -1275,7 +1275,7 @@ def _formatannotation(annot): `typing.Optional`, `nptyping.NDArray` and other types. >>> _formatannotation(NewType('MyType', str)) - 'MyType' + 'pdoc.MyType' >>> _formatannotation(Optional[Tuple[Optional[int], None]]) 'Optional[Tuple[Optional[int], None]]' """ --- a/pdoc/documentation.md +++ b/pdoc/documentation.md @@ -353,7 +353,7 @@ modified templates into the `directories` list of the Compatibility ------------- -`pdoc` requires Python 3.6+. +`pdoc` requires Python 3.7+. The last version to support Python 2.x is [pdoc3 0.3.x]. [pdoc3 0.3.x]: https://pypi.org/project/pdoc3/0.3.13/ --- a/pdoc/test/__init__.py +++ b/pdoc/test/__init__.py @@ -126,7 +126,8 @@ class CliTest(unittest.TestCase): def setUp(self): pdoc.reset() - @unittest.skipIf(sys.version_info < (3, 7), 'pdoc._formatannotation fails on Py3.6') + @unittest.skipIf(sys.version_info < (3, 10), + 'HACK: _formatannotation() changed return value in Py3.10') def test_project_doctests(self): doctests = doctest.testmod(pdoc) assert not doctests.failed and doctests.attempted, doctests @@ -185,8 +186,12 @@ def test_html(self): '_private', ' class="ident">_Private', - 'non_callable_routine', ] + if sys.version_info >= (3, 10): + include_patterns.append('non_callable_routine') + else: + exclude_patterns.append('non_callable_routine') + package_files = { '': self.PUBLIC_FILES, '.subpkg2': [f for f in self.PUBLIC_FILES @@ -356,8 +361,11 @@ def test_text(self): '_Private', 'subprocess', 'Hidden', - 'non_callable_routine', ] + if sys.version_info >= (3, 10): + include_patterns.append('non_callable_routine') + else: + exclude_patterns.append('non_callable_routine') with self.subTest(package=EXAMPLE_MODULE): with redirect_streams() as (stdout, _): @@ -543,8 +551,9 @@ class C: self.assertEqual(doc.doc['vars_dont'].docstring, '') self.assertIn('integer', doc.doc['but_clss_have_doc'].docstring) + @unittest.skipIf(sys.version_info >= (3, 10), 'No builtin module "parser" in Py3.10') def test_builtin_methoddescriptors(self): - import parser + import parser # TODO: replace with another public binary builtin with self.assertWarns(UserWarning): c = pdoc.Class('STType', pdoc.Module(parser), parser.STType) self.assertIsInstance(c.doc['compile'], pdoc.Function) @@ -906,9 +915,13 @@ def bug130_str_annotation(a: "str"): def bug253_newtype_annotation(a: CustomType): return + expected = CustomType.__name__ + if sys.version_info > (3, 10): + expected = f'{__name__}.{CustomType.__name__}' + self.assertEqual( pdoc.Function('bug253', mod, bug253_newtype_annotation).params(annotate=True), - ['a:\N{NBSP}CustomType']) + [f'a:\N{NBSP}{expected}']) # typing.Callable bug def f(a: typing.Callable): --- a/setup.py +++ b/setup.py @@ -2,8 +2,8 @@ import sys from setuptools import setup, find_packages -if sys.version_info < (3, 6): - sys.exit('ERROR: pdoc requires Python 3.6+') +if sys.version_info < (3, 7): + sys.exit('ERROR: pdoc requires Python 3.7+') def _discover_tests(): @@ -58,5 +58,5 @@ def _discover_tests(): 'write_to': os.path.join('pdoc', '_version.py'), }, test_suite="setup._discover_tests", - python_requires='>= 3.6', + python_requires='>= 3.7', )