From c66077d8c017c2728517be74701ebf06859c980d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Wed, 3 Jul 2019 00:51:04 +0200 Subject: [PATCH 1/3] Replace importlib_metadata with importlib.metadata on Python 3.8+ Fixes https://github.com/pytest-dev/pluggy/issues/222 --- changelog/222.trivial.rst | 2 ++ docs/conf.py | 9 +++++++-- setup.py | 2 +- src/pluggy/manager.py | 8 ++++++-- testing/test_pluginmanager.py | 10 ++++++++-- 5 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 changelog/222.trivial.rst diff --git a/changelog/222.trivial.rst b/changelog/222.trivial.rst new file mode 100644 index 00000000..0263e8cd --- /dev/null +++ b/changelog/222.trivial.rst @@ -0,0 +1,2 @@ +Replace ``importlib_metadata`` backport with ``importlib.metadata`` from the +standard library on Python 3.8+. diff --git a/docs/conf.py b/docs/conf.py index 550071d7..03465638 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,5 +1,10 @@ # -*- coding: utf-8 -*- -import importlib_metadata +import sys + +if sys.version_info >= (3, 8): + from importlib import metadata +else: + import importlib_metadata as metadata extensions = [ @@ -24,7 +29,7 @@ copyright = u"2016, Holger Krekel" author = "Holger Krekel" -release = importlib_metadata.version(project) +release = metadata.version(project) # The short X.Y version. version = u".".join(release.split(".")[:2]) diff --git a/setup.py b/setup.py index 0f26fa02..ae2cd84c 100644 --- a/setup.py +++ b/setup.py @@ -37,7 +37,7 @@ def main(): author_email="holger@merlinux.eu", url="https://github.com/pytest-dev/pluggy", python_requires=">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*", - install_requires=["importlib-metadata>=0.12"], + install_requires=['importlib-metadata>=0.12;python_version<"3.8"'], extras_require={"dev": ["pre-commit", "tox"]}, classifiers=classifiers, packages=["pluggy"], diff --git a/src/pluggy/manager.py b/src/pluggy/manager.py index 27c86f65..6aecb2ac 100644 --- a/src/pluggy/manager.py +++ b/src/pluggy/manager.py @@ -1,9 +1,13 @@ import inspect +import sys from . import _tracing from .hooks import HookImpl, _HookRelay, _HookCaller, normalize_hookimpl_opts import warnings -import importlib_metadata +if sys.version_info >= (3, 8): + from importlib import metadata +else: + import importlib_metadata as metadata def _warn_for_function(warning, function): @@ -279,7 +283,7 @@ def load_setuptools_entrypoints(self, group, name=None): :return: return the number of loaded plugins by this call. """ count = 0 - for dist in importlib_metadata.distributions(): + for dist in metadata.distributions(): for ep in dist.entry_points: if ( ep.group != group diff --git a/testing/test_pluginmanager.py b/testing/test_pluginmanager.py index b226c413..693280c8 100644 --- a/testing/test_pluginmanager.py +++ b/testing/test_pluginmanager.py @@ -2,8 +2,9 @@ ``PluginManager`` unit and public API testing. """ import pytest +import sys import types -import importlib_metadata + from pluggy import ( PluginManager, PluginValidationError, @@ -12,6 +13,11 @@ HookspecMarker, ) +if sys.version_info >= (3, 8): + from importlib import metadata +else: + import importlib_metadata as metadata + hookspec = HookspecMarker("example") hookimpl = HookimplMarker("example") @@ -466,7 +472,7 @@ class Distribution(object): def my_distributions(): return (dist,) - monkeypatch.setattr(importlib_metadata, "distributions", my_distributions) + monkeypatch.setattr(metadata, "distributions", my_distributions) num = pm.load_setuptools_entrypoints("hello") assert num == 1 plugin = pm.get_plugin("myname") From 763b661fc15c04f85bcf6b501280641b88041d0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Wed, 3 Jul 2019 01:02:41 +0200 Subject: [PATCH 2/3] Workaround https://github.com/pytest-dev/pytest/issues/5523 --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 431acebf..eb917aae 100644 --- a/tox.ini +++ b/tox.ini @@ -38,7 +38,7 @@ commands = minversion=2.0 testpaths = testing #--pyargs --doctest-modules --ignore=.tox -addopts=-ra +addopts=-r a filterwarnings = error From 1bf30d695d13c656015eaf0b29d9445d3788da68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Wed, 3 Jul 2019 01:09:26 +0200 Subject: [PATCH 3/3] Update tests matrix to reflect recent changes in pytest No Python 3.8 on AppVeyor yet. --- .travis.yml | 8 ++++---- appveyor.yml | 3 +-- tox.ini | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 994146d8..d72f517a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,16 +32,16 @@ jobs: env: TOXENV=py37-pytestrelease-coverage - python: '3.8-dev' env: TOXENV=py38-pytestrelease-coverage - - python: '2.7' - env: TOXENV=py27-pytestmaster-coverage - - python: '2.7' - env: TOXENV=py27-pytestfeatures-coverage - python: '3.6' env: TOXENV=py36-pytestmaster-coverage - python: '3.6' env: TOXENV=py36-pytestfeatures-coverage - python: '3.6' env: TOXENV=benchmark + - python: '3.7' + env: TOXENV=py37-pytestmaster-coverage + - python: '3.7' + env: TOXENV=py37-pytestfeatures-coverage - stage: deploy python: '3.6' diff --git a/appveyor.yml b/appveyor.yml index 8d1a57d5..560151c5 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,9 +7,8 @@ environment: - TOXENV: "py34-pytestrelease" - TOXENV: "py35-pytestrelease" - TOXENV: "py36-pytestrelease" + - TOXENV: "py37-pytestrelease" - TOXENV: "pypy-pytestrelease" - - TOXENV: "py27-pytestmaster" - - TOXENV: "py27-pytestfeatures" - TOXENV: "py36-pytestmaster" - TOXENV: "py36-pytestfeatures" diff --git a/tox.ini b/tox.ini index eb917aae..ebcd0049 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist=linting,docs,py{27,34,35,36,py,py3}-pytestrelease,py{27,36}-pytest{master,features} +envlist=linting,docs,py{27,34,35,36,37,38,py,py3}-pytestrelease,py{36,37}-pytest{master,features} [testenv] commands=