summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pyramid/path.py22
-rw-r--r--src/pyramid/scripts/pdistreport.py14
-rw-r--r--src/pyramid/scripts/pshell.py14
3 files changed, 31 insertions, 19 deletions
diff --git a/src/pyramid/path.py b/src/pyramid/path.py
index a5b7ad212..160d97abe 100644
--- a/src/pyramid/path.py
+++ b/src/pyramid/path.py
@@ -1,3 +1,5 @@
+import functools
+from importlib import import_module
from importlib.machinery import SOURCE_SUFFIXES
import os
import pkg_resources
@@ -344,14 +346,18 @@ class DottedNameResolver(Resolver):
value = package.__name__
else:
value = package.__name__ + value
- # Calling EntryPoint.load with an argument is deprecated.
- # See https://pythonhosted.org/setuptools/history.html#id8
- ep = pkg_resources.EntryPoint.parse('x=%s' % value)
- if hasattr(ep, 'resolve'):
- # setuptools>=10.2
- return ep.resolve() # pragma: NO COVER
- else:
- return ep.load(False) # pragma: NO COVER
+ # logic below is similar to importlib.metadata.EntryPoint.load()
+ module = value
+ attrs = []
+ parts = value.split(':', 1)
+ if len(parts) == 2:
+ module, attrs = parts
+ attrs = attrs.split('.')
+ module = import_module(module)
+ try:
+ return functools.reduce(getattr, attrs, module)
+ except AttributeError as ex:
+ raise ImportError(str(ex))
def _zope_dottedname_style(self, value, package):
"""package.module.attr style"""
diff --git a/src/pyramid/scripts/pdistreport.py b/src/pyramid/scripts/pdistreport.py
index 99615c1d5..eb41c17e7 100644
--- a/src/pyramid/scripts/pdistreport.py
+++ b/src/pyramid/scripts/pdistreport.py
@@ -1,6 +1,6 @@
import argparse
+import importlib.metadata
from operator import itemgetter
-import pkg_resources
import platform
import sys
@@ -21,7 +21,7 @@ def get_parser():
def main(
argv=sys.argv,
- pkg_resources=pkg_resources,
+ importlib_metadata=importlib.metadata,
platform=platform.platform,
out=out,
):
@@ -29,25 +29,25 @@ def main(
parser = get_parser()
parser.parse_args(argv[1:])
packages = []
- for distribution in pkg_resources.working_set:
- name = distribution.project_name
+ for distribution in importlib_metadata.distributions():
+ name = distribution.metadata['Name']
packages.append(
{
'version': distribution.version,
'lowername': name.lower(),
'name': name,
- 'location': distribution.location,
+ 'summary': distribution.metadata.get('Summary'),
}
)
packages = sorted(packages, key=itemgetter('lowername'))
- pyramid_version = pkg_resources.get_distribution('pyramid').version
+ pyramid_version = importlib_metadata.distribution('pyramid').version
plat = platform()
out('Pyramid version:', pyramid_version)
out('Platform:', plat)
out('Packages:')
for package in packages:
out(' ', package['name'], package['version'])
- out(' ', package['location'])
+ out(' ', package['summary'])
if __name__ == '__main__': # pragma: no cover
diff --git a/src/pyramid/scripts/pshell.py b/src/pyramid/scripts/pshell.py
index 63600abaf..4d3817ffb 100644
--- a/src/pyramid/scripts/pshell.py
+++ b/src/pyramid/scripts/pshell.py
@@ -1,8 +1,8 @@
import argparse
from code import interact
from contextlib import contextmanager
+import importlib.metadata
import os
-import pkg_resources
import sys
import textwrap
@@ -41,7 +41,7 @@ class PShellCommand:
script_name = 'pshell'
bootstrap = staticmethod(bootstrap) # for testing
get_config_loader = staticmethod(get_config_loader) # for testing
- pkg_resources = pkg_resources # for testing
+ importlib_metadata = importlib.metadata # for testing
parser = argparse.ArgumentParser(
description=textwrap.dedent(description),
@@ -228,10 +228,16 @@ class PShellCommand:
return 0
def find_all_shells(self):
- pkg_resources = self.pkg_resources
+ importlib_metadata = self.importlib_metadata
shells = {}
- for ep in pkg_resources.iter_entry_points('pyramid.pshell_runner'):
+ eps = importlib_metadata.entry_points()
+ if hasattr(eps, 'select'):
+ eps = eps.select(group='pyramid.pshell_runner')
+ else: # pragma: no cover
+ # fallback for py38 and py39
+ eps = eps.get('pyramid.pshell_runner')
+ for ep in eps:
name = ep.name
shell_factory = ep.load()
shells[name] = shell_factory