@@ -96,15 +96,42 @@ def Viewer(vars, title=None, limits={}, FIPY_VIEWER=None, **kwlimits):
96
96
if len (emptyvars ):
97
97
viewers .append (DummyViewer (vars = emptyvars ))
98
98
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 )
104
131
105
- for name , ep in sorted ( enpts ) :
132
+ for ep in enpts :
106
133
107
- attempts .append (name )
134
+ attempts .append (ep . name )
108
135
109
136
try :
110
137
ViewerClass = ep .load ()
@@ -119,7 +146,7 @@ def Viewer(vars, title=None, limits={}, FIPY_VIEWER=None, **kwlimits):
119
146
120
147
break
121
148
except Exception as s :
122
- errors .append ("%s: %s" % (name , s ))
149
+ errors .append ("%s: %s" % (ep . name , s ))
123
150
124
151
if len (attempts ) == 0 :
125
152
if FIPY_VIEWER is not None :
0 commit comments