Skip to content

Commit 004fbfd

Browse files
committed
Merge branch 'use-standard-entry-point' into 'master'
Use entry point with importlib Closes #80 See merge request limagroup/Lima-tango-python!129
2 parents 7e5409f + f0baeef commit 004fbfd

File tree

3 files changed

+59
-20
lines changed

3 files changed

+59
-20
lines changed

Lima/Server/EnvHelper.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
# along with this program; if not, see <http://www.gnu.org/licenses/>.
2222
############################################################################
2323

24+
from __future__ import annotations
25+
2426
import sys
2527
import os
2628
import re
@@ -31,11 +33,6 @@
3133

3234
import PyTango
3335

34-
try:
35-
import pkg_resources
36-
except ImportError:
37-
pkg_resources = None
38-
3936

4037
ModDepend = ["Core", "Espia"]
4138
Debug = 0
@@ -428,10 +425,29 @@ def _import(name):
428425
return sys.modules[name]
429426

430427

431-
def get_entry_point(group, name):
432-
# try to find an extension using setuptools entry points
433-
if pkg_resources is None:
428+
def get_entry_point(group: str, name: str):
429+
"""
430+
Try to find an extension using entry points.
431+
"""
432+
try:
433+
from importlib.metadata import entry_points
434+
except ImportError:
435+
pass
436+
else:
437+
eps = entry_points()
438+
plugins = eps.select(group=group, name=name)
439+
if not plugins:
440+
return None
441+
elif len(plugins) > 1:
442+
raise ValueError("found more than one entry point matching {}".format(name))
443+
return plugins[0]
444+
445+
# Here is the old way to import plugins
446+
try:
447+
import pkg_resources
448+
except ImportError:
434449
return None
450+
435451
entry_points = tuple(pkg_resources.iter_entry_points(group, name))
436452
if not entry_points:
437453
return None
@@ -440,7 +456,7 @@ def get_entry_point(group, name):
440456
return entry_points[0]
441457

442458

443-
def get_camera_module(name):
459+
def get_camera_module(name: str):
444460
"""Returns the python module for the given camera type"""
445461
entry_point = get_entry_point("Lima_tango_camera", name)
446462
if entry_point is None:
@@ -450,7 +466,7 @@ def get_camera_module(name):
450466
return entry_point.load()
451467

452468

453-
def get_plugin_module(name):
469+
def get_plugin_module(name: str):
454470
"""Returns the python module for the given plugin type"""
455471
entry_point = get_entry_point("Lima_tango_plugin", name)
456472
if entry_point is None:

Lima/Server/camera/__init__.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,24 @@ def _init_module():
3636
if subdir:
3737
base = "%s.%s" % (subdir, base)
3838
cameras.append(base)
39+
40+
# New way to import entry points
3941
try:
40-
import pkg_resources
42+
from importlib.metadata import entry_points
4143
except ImportError:
42-
pass
44+
# Old way to import entry points
45+
try:
46+
import pkg_resources
47+
except ImportError:
48+
pass
49+
else:
50+
for ep in pkg_resources.iter_entry_points("Lima_tango_camera"):
51+
cameras.append(ep.name)
4352
else:
44-
for ep in pkg_resources.iter_entry_points("Lima_tango_camera"):
45-
cameras.append(ep.name)
53+
eps = entry_points()
54+
for entry_point in eps.select(group="Lima_tango_camera"):
55+
cameras.append(entry_point.value)
56+
4657
return cameras
4758

4859

Lima/Server/plugins/__init__.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,13 @@
2121
# along with this program; if not, see <http://www.gnu.org/licenses/>.
2222
############################################################################
2323

24+
from __future__ import annotations
2425

25-
def _init_module():
26+
27+
def _init_module() -> list[str]:
2628
import os
2729

28-
plugins = []
30+
plugins: list[str] = []
2931
for root, dirs, files in os.walk(__path__[0], followlinks=True):
3032
for file_name in files:
3133
if file_name.startswith("__"):
@@ -36,13 +38,23 @@ def _init_module():
3638
if subdir:
3739
base = "%s.%s" % (subdir, base)
3840
plugins.append(base)
41+
42+
# New way to import entry points
3943
try:
40-
import pkg_resources
44+
from importlib.metadata import entry_points
4145
except ImportError:
42-
pass
46+
# Old way to import entry points
47+
try:
48+
import pkg_resources
49+
except ImportError:
50+
pass
51+
else:
52+
for ep in pkg_resources.iter_entry_points("Lima_tango_plugin"):
53+
plugins.append(ep.name)
4354
else:
44-
for ep in pkg_resources.iter_entry_points("Lima_tango_plugin"):
45-
plugins.append(ep.name)
55+
eps = entry_points()
56+
for entry_point in eps.select(group="Lima_tango_plugin"):
57+
plugins.append(entry_point.value)
4658

4759
return plugins
4860

0 commit comments

Comments
 (0)