From 1286e74c8e6f826c06dddd30d9a94542d3e0ade9 Mon Sep 17 00:00:00 2001 From: Michael Howitz Date: Fri, 30 Jun 2023 08:53:34 +0200 Subject: [PATCH] Drop support for Python < 3.7 (#22) * Bumped version for breaking release. * Drop support for Python 2.7, 3.5, 3.6. --- .github/workflows/tests.yml | 8 ++------ .meta.toml | 3 +-- CHANGES.rst | 6 ++++-- setup.cfg | 4 ++-- setup.py | 20 ++++--------------- src/zope/site/folder.py | 2 +- src/zope/site/interfaces.py | 2 +- src/zope/site/site.py | 8 ++++---- src/zope/site/testing.py | 12 ----------- src/zope/site/tests/folder.txt | 6 +++--- src/zope/site/tests/test_folder.py | 5 +---- src/zope/site/tests/test_localsitemanager.py | 2 +- src/zope/site/tests/test_site.py | 8 ++++---- .../site/tests/test_sitemanagercontainer.py | 2 +- tox.ini | 6 ------ 15 files changed, 29 insertions(+), 65 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index cedf24b..d8889f3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -21,16 +21,12 @@ jobs: config: # [Python version, tox env] - ["3.9", "lint"] - - ["2.7", "py27"] - - ["3.5", "py35"] - - ["3.6", "py36"] - ["3.7", "py37"] - ["3.8", "py38"] - ["3.9", "py39"] - ["3.10", "py310"] - ["3.11", "py311"] - - ["pypy-2.7", "pypy"] - - ["pypy-3.7", "pypy3"] + - ["pypy-3.9", "pypy3"] - ["3.9", "docs"] - ["3.9", "coverage"] @@ -60,7 +56,7 @@ jobs: - name: Coverage if: matrix.config[1] == 'coverage' run: | - pip install coveralls coverage-python-version + pip install coveralls coveralls --service=github env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.meta.toml b/.meta.toml index 6b714e5..09255e5 100644 --- a/.meta.toml +++ b/.meta.toml @@ -2,11 +2,10 @@ # https://github.com/zopefoundation/meta/tree/master/config/pure-python [meta] template = "pure-python" -commit-id = "200573eb414d2228d463da3de7d71a6d6335a704" +commit-id = "d0bc564f" [python] with-pypy = true -with-legacy-python = true with-docs = true with-sphinx-doctests = false with-windows = false diff --git a/CHANGES.rst b/CHANGES.rst index 6b64583..79d6cd2 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -2,8 +2,10 @@ Changes ========= -4.6.2 (unreleased) -================== +5.0 (unreleased) +================ + +- Drop support for Python 2.7, 3.5, 3.6. - Add support for Python 3.11. diff --git a/setup.cfg b/setup.cfg index 1ecf58c..b07af40 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,7 +1,7 @@ # Generated from: # https://github.com/zopefoundation/meta/tree/master/config/pure-python [bdist_wheel] -universal = 1 +universal = 0 [flake8] doctests = 1 @@ -16,7 +16,7 @@ ignore = force_single_line = True combine_as_imports = True sections = FUTURE,STDLIB,THIRDPARTY,ZOPE,FIRSTPARTY,LOCALFOLDER -known_third_party = six, docutils, pkg_resources +known_third_party = docutils, pkg_resources, pytz known_zope = known_first_party = default_section = ZOPE diff --git a/setup.py b/setup.py index 7f5dcef..e467baf 100644 --- a/setup.py +++ b/setup.py @@ -12,7 +12,7 @@ # ############################################################################## # This package is developed by the Zope Toolkit project, documented here: -# http://docs.zope.org/zopetoolkit +# https://zopetoolkit.readthedocs.io/ # When developing and releasing this package, please follow the documented # Zope Toolkit policies as described by this documentation. ############################################################################## @@ -40,9 +40,9 @@ def read(*rnames): setup( name='zope.site', - version='4.6.2.dev0', + version='5.0.dev0', author='Zope Foundation and Contributors', - author_email='zope-dev@zope.org', + author_email='zope-dev@zope.dev', description='Local registries for zope component architecture', long_description=( read('README.rst') @@ -58,11 +58,7 @@ def read(*rnames): 'Intended Audience :: Developers', 'License :: OSI Approved :: Zope Public License', 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', @@ -100,15 +96,7 @@ def read(*rnames): 'zope.lifecycleevent', 'zope.location', ], - tests_require=TESTS_REQUIRE, include_package_data=True, zip_safe=False, - python_requires=', '.join([ - '>=2.7', - '!=3.0.*', - '!=3.1.*', - '!=3.2.*', - '!=3.3.*', - '!=3.4.*', - ]), + python_requires='>=3.7', ) diff --git a/src/zope/site/folder.py b/src/zope/site/folder.py index f1ec31f..16ca97c 100644 --- a/src/zope/site/folder.py +++ b/src/zope/site/folder.py @@ -33,7 +33,7 @@ def rootFolder(): return f -class FolderSublocations(object): +class FolderSublocations: """ Adapter for an :class:`zope.site.interfaces.IFolder` to :class:`zope.location.interfaces.ISublocations`. diff --git a/src/zope/site/interfaces.py b/src/zope/site/interfaces.py index bc480f2..fc1c11a 100644 --- a/src/zope/site/interfaces.py +++ b/src/zope/site/interfaces.py @@ -29,7 +29,7 @@ class INewLocalSite(zope.interface.Interface): @zope.interface.implementer(INewLocalSite) -class NewLocalSite(object): +class NewLocalSite: """Event: a local site was created """ def __init__(self, manager): diff --git a/src/zope/site/site.py b/src/zope/site/site.py index 0e5a2cb..d2de207 100644 --- a/src/zope/site/site.py +++ b/src/zope/site/site.py @@ -62,7 +62,7 @@ class SiteManagementFolder(BTreeContainer): @zope.interface.implementer(IDirectoryFactory) -class SMFolderFactory(object): +class SMFolderFactory: """ Implementation of a :class:`~.IDirectoryFactory` that creates :class:`SiteManagementFolder` @@ -153,7 +153,7 @@ def _setBases(self, bases): and interfaces.ILocalSiteManager.providedBy(base)): base.addSub(self) - super(LocalSiteManager, self)._setBases(bases) + super()._setBases(bases) def __init__(self, site, default_folder=True): BTreeContainer.__init__(self) @@ -179,8 +179,8 @@ def _init_registries(self): self.adapters = _LocalAdapterRegistry() self.utilities = _LocalAdapterRegistry() self.adapters.__parent__ = self.utilities.__parent__ = self - self.adapters.__name__ = u'adapters' - self.utilities.__name__ = u'utilities' + self.adapters.__name__ = 'adapters' + self.utilities.__name__ = 'utilities' def _p_repr(self): return PersistentComponents.__repr__(self) diff --git a/src/zope/site/testing.py b/src/zope/site/testing.py index 1e7e0ac..18d5b3e 100644 --- a/src/zope/site/testing.py +++ b/src/zope/site/testing.py @@ -13,8 +13,6 @@ ############################################################################## """Reusable functionality for testing site-related code """ -import re - import zope.component import zope.component.hooks import zope.component.interfaces @@ -22,7 +20,6 @@ import zope.container.testing from zope.interface import Interface from zope.interface.interfaces import IComponentLookup -from zope.testing import renormalizing import zope.site.site from zope.site import LocalSiteManager @@ -30,15 +27,6 @@ from zope.site.folder import rootFolder -checker = renormalizing.RENormalizing([ - # Python 3 unicode removed the "u". - (re.compile("u('.*?')"), - r"\1"), - (re.compile('u(".*?")'), - r"\1"), -]) - - def createSiteManager(folder, setsite=False): if not zope.component.interfaces.ISite.providedBy(folder): folder.setSiteManager(LocalSiteManager(folder)) diff --git a/src/zope/site/tests/folder.txt b/src/zope/site/tests/folder.txt index 8e576dc..89e0104 100644 --- a/src/zope/site/tests/folder.txt +++ b/src/zope/site/tests/folder.txt @@ -40,19 +40,19 @@ Let's add another folder to see how a non-site folder behaves: The site folder now contains the new folder: >>> list(fs_folder.keys()) - [u'test', '++etc++site'] + ['test', '++etc++site'] >>> fs_folder.get('test') <...Folder object at 0x...> >>> fs_folder['test'] <...Folder object at 0x...> >>> list(fs_folder.__iter__()) - [u'test', '++etc++site'] + ['test', '++etc++site'] >>> list(fs_folder.values()) [...Folder object at 0x...>, ] >>> len(fs_folder) 2 >>> list(fs_folder.items()) - [(u'test', ...Folder object at 0x...>), + [('test', ...Folder object at 0x...>), ('++etc++site', )] >>> 'test' in fs_folder True diff --git a/src/zope/site/tests/test_folder.py b/src/zope/site/tests/test_folder.py index 7a53984..9583a06 100644 --- a/src/zope/site/tests/test_folder.py +++ b/src/zope/site/tests/test_folder.py @@ -1,10 +1,7 @@ - - import doctest import unittest from zope.site.folder import Folder -from zope.site.testing import checker from zope.site.testing import siteSetUp from zope.site.testing import siteTearDown from zope.site.tests.test_site import TestSiteManagerContainer @@ -63,5 +60,5 @@ def test_suite(): setUp=setUp, tearDown=tearDown), doctest.DocFileSuite("folder.txt", setUp=setUp, tearDown=tearDown, - checker=checker, optionflags=flags), + optionflags=flags), )) diff --git a/src/zope/site/tests/test_localsitemanager.py b/src/zope/site/tests/test_localsitemanager.py index f0644e8..7c3d815 100644 --- a/src/zope/site/tests/test_localsitemanager.py +++ b/src/zope/site/tests/test_localsitemanager.py @@ -56,5 +56,5 @@ def testPersistence(self): def test_suite(): return unittest.TestSuite(( - unittest.makeSuite(TestLocalSiteManager), + unittest.defaultTestLoader.loadTestsFromTestCase(TestLocalSiteManager), )) diff --git a/src/zope/site/tests/test_site.py b/src/zope/site/tests/test_site.py index 340f40a..d3699cf 100644 --- a/src/zope/site/tests/test_site.py +++ b/src/zope/site/tests/test_site.py @@ -30,7 +30,7 @@ @zope.interface.implementer(interfaces.ILocalSiteManager) -class SiteManagerStub(object): +class SiteManagerStub: pass @@ -38,10 +38,10 @@ class CustomFolder(folder.Folder): def __init__(self, name): self.__name__ = name - super(CustomFolder, self).__init__() + super().__init__() def __repr__(self): # pragma: no cover - return '<%s %s>' % (self.__class__.__name__, self.__name__) + return '<{} {}>'.format(self.__class__.__name__, self.__name__) def test_SiteManagerAdapter(): @@ -181,7 +181,7 @@ def tearDown(test): testing.siteTearDown() -class Layer(object): +class Layer: @staticmethod def setUp(): diff --git a/src/zope/site/tests/test_sitemanagercontainer.py b/src/zope/site/tests/test_sitemanagercontainer.py index d0efab1..e3e4d88 100644 --- a/src/zope/site/tests/test_sitemanagercontainer.py +++ b/src/zope/site/tests/test_sitemanagercontainer.py @@ -28,7 +28,7 @@ from zope.site.site import SiteManagerContainer -class Dummy(object): +class Dummy: pass diff --git a/tox.ini b/tox.ini index aec6d36..daf1746 100644 --- a/tox.ini +++ b/tox.ini @@ -4,15 +4,11 @@ minversion = 3.18 envlist = lint - py27 - py35 - py36 py37 py38 py39 py310 py311 - pypy pypy3 docs coverage @@ -66,7 +62,6 @@ allowlist_externals = mkdir deps = coverage - coverage-python-version commands = mkdir -p {toxinidir}/parts/htmlcov coverage run -m zope.testrunner --test-path=src {posargs:-vc} @@ -75,7 +70,6 @@ commands = [coverage:run] branch = True -plugins = coverage_python_version source = zope.site [coverage:report]