Skip to content

Commit edd82b6

Browse files
authored
Migrate pkg_resources to importlib (#945)
Replace `pkg_resources` with `importlib.metadata` and `importlib.resources`
1 parent fdc1719 commit edd82b6

File tree

2 files changed

+47
-12
lines changed

2 files changed

+47
-12
lines changed

fipy/viewers/__init__.py

+35-8
Original file line numberDiff line numberDiff line change
@@ -96,15 +96,42 @@ def Viewer(vars, title=None, limits={}, FIPY_VIEWER=None, **kwlimits):
9696
if len(emptyvars):
9797
viewers.append(DummyViewer(vars=emptyvars))
9898

99-
enpts = []
100-
import pkg_resources
101-
for ep in pkg_resources.iter_entry_points(group='fipy.viewers',
102-
name=FIPY_VIEWER):
103-
enpts.append((ep.name, ep))
99+
try:
100+
# pkg_resources is deprecated,
101+
# but importlib.metadata doesn't exist until Python 3.8
102+
from importlib.metadata import entry_points
103+
104+
enpts = entry_points()
105+
106+
if hasattr(enpts, "select"):
107+
# .select() not introduced until
108+
# importlib_metadata 3.6 and Python 3.10
109+
110+
if FIPY_VIEWER is None:
111+
# unlike pkg_resources.iter_entry_points,
112+
# importlib.metadata.entry_points doesn't return anything
113+
# if name=NONE
114+
enpts = enpts.select(group='fipy.viewers')
115+
else:
116+
enpts = enpts.select(group='fipy.viewers', name=FIPY_VIEWER)
117+
else:
118+
enpts = enpts.get("fipy.viewers", ())
119+
120+
if FIPY_VIEWER is not None:
121+
enpts = (mod for mod in enpts if mod.name == FIPY_VIEWER)
122+
123+
enpts = sorted(enpts)
124+
except ImportError:
125+
from pkg_resources import iter_entry_points
126+
127+
enpts = iter_entry_points(group='fipy.viewers', name=FIPY_VIEWER)
128+
129+
# pkg_resources.EntryPoint objects aren't sortable
130+
enpts = sorted(enpts, key=lambda ep: ep.name)
104131

105-
for name, ep in sorted(enpts):
132+
for ep in enpts:
106133

107-
attempts.append(name)
134+
attempts.append(ep.name)
108135

109136
try:
110137
ViewerClass = ep.load()
@@ -119,7 +146,7 @@ def Viewer(vars, title=None, limits={}, FIPY_VIEWER=None, **kwlimits):
119146

120147
break
121148
except Exception as s:
122-
errors.append("%s: %s" % (name, s))
149+
errors.append("%s: %s" % (ep.name, s))
123150

124151
if len(attempts) == 0:
125152
if FIPY_VIEWER is not None:

fipy/viewers/mayaviViewer/mayaviClient.py

+12-4
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,18 @@ def __init__(self, vars, title=None, daemon_file=None, fps=1.0, **kwlimits):
7070

7171
self.plot()
7272

73-
from pkg_resources import Requirement, resource_filename
74-
daemon_file = (daemon_file
75-
or resource_filename(Requirement.parse("FiPy"),
76-
"fipy/viewers/mayaviViewer/mayaviDaemon.py"))
73+
try:
74+
from importlib import resources
75+
76+
ref = resources.files("fipy") / "viewers/mayaviViewer/mayaviDaemon.py"
77+
with resources.as_file(ref) as path:
78+
builtin_daemon = path.as_posix()
79+
except ImportError:
80+
from pkg_resources import Requirement, resource_filename
81+
builtin_daemon = resource_filename(Requirement.parse("FiPy"),
82+
"fipy/viewers/mayaviViewer/mayaviDaemon.py")
83+
84+
daemon_file = (daemon_file or builtin_daemon)
7785

7886
pyth = sys.executable or "python"
7987

0 commit comments

Comments
 (0)