1
+ import sys
1
2
from unittest import mock
2
3
3
- import pkg_resources
4
4
import pytest
5
5
6
6
from xarray .backends import common , plugins
7
7
8
+ if sys .version_info >= (3 , 8 ):
9
+ from importlib .metadata import EntryPoint
10
+
11
+ importlib_metadata_mock = "importlib.metadata"
12
+ else :
13
+ # if the fallback library is missing, we are doomed.
14
+ from importlib_metadata import EntryPoint
15
+
16
+ importlib_metadata_mock = "importlib_metadata"
17
+
8
18
9
19
class DummyBackendEntrypointArgs (common .BackendEntrypoint ):
10
20
def open_dataset (filename_or_obj , * args ):
@@ -29,12 +39,12 @@ def open_dataset(self, filename_or_obj, *, decoder):
29
39
@pytest .fixture
30
40
def dummy_duplicated_entrypoints ():
31
41
specs = [
32
- "engine1 = xarray.tests.test_plugins:backend_1" ,
33
- "engine1 = xarray.tests.test_plugins:backend_2" ,
34
- "engine2 = xarray.tests.test_plugins:backend_1" ,
35
- "engine2 = xarray.tests.test_plugins:backend_2" ,
42
+ [ "engine1" , " xarray.tests.test_plugins:backend_1", "xarray.backends" ] ,
43
+ [ "engine1" , " xarray.tests.test_plugins:backend_2", "xarray.backends" ] ,
44
+ [ "engine2" , " xarray.tests.test_plugins:backend_1", "xarray.backends" ] ,
45
+ [ "engine2" , " xarray.tests.test_plugins:backend_2", "xarray.backends" ] ,
36
46
]
37
- eps = [pkg_resources . EntryPoint . parse ( spec ) for spec in specs ]
47
+ eps = [EntryPoint ( name , value , group ) for name , value , group in specs ]
38
48
return eps
39
49
40
50
@@ -46,8 +56,10 @@ def test_remove_duplicates(dummy_duplicated_entrypoints) -> None:
46
56
47
57
48
58
def test_broken_plugin () -> None :
49
- broken_backend = pkg_resources .EntryPoint .parse (
50
- "broken_backend = xarray.tests.test_plugins:backend_1"
59
+ broken_backend = EntryPoint (
60
+ "broken_backend" ,
61
+ "xarray.tests.test_plugins:backend_1" ,
62
+ "xarray.backends" ,
51
63
)
52
64
with pytest .warns (RuntimeWarning ) as record :
53
65
_ = plugins .build_engines ([broken_backend ])
@@ -68,13 +80,15 @@ def test_remove_duplicates_warnings(dummy_duplicated_entrypoints) -> None:
68
80
assert "entrypoints" in message1
69
81
70
82
71
- @mock .patch ("pkg_resources.EntryPoint.load" , mock .MagicMock (return_value = None ))
83
+ @mock .patch (
84
+ f"{ importlib_metadata_mock } .EntryPoint.load" , mock .MagicMock (return_value = None )
85
+ )
72
86
def test_backends_dict_from_pkg () -> None :
73
87
specs = [
74
- "engine1 = xarray.tests.test_plugins:backend_1" ,
75
- "engine2 = xarray.tests.test_plugins:backend_2" ,
88
+ [ "engine1" , " xarray.tests.test_plugins:backend_1", "xarray.backends" ] ,
89
+ [ "engine2" , " xarray.tests.test_plugins:backend_2", "xarray.backends" ] ,
76
90
]
77
- entrypoints = [pkg_resources . EntryPoint . parse ( spec ) for spec in specs ]
91
+ entrypoints = [EntryPoint ( name , value , group ) for name , value , group in specs ]
78
92
engines = plugins .backends_dict_from_pkg (entrypoints )
79
93
assert len (engines ) == 2
80
94
assert engines .keys () == set (("engine1" , "engine2" ))
@@ -114,12 +128,12 @@ def test_set_missing_parameters_raise_error() -> None:
114
128
115
129
116
130
@mock .patch (
117
- "pkg_resources .EntryPoint.load" ,
131
+ f" { importlib_metadata_mock } .EntryPoint.load" ,
118
132
mock .MagicMock (return_value = DummyBackendEntrypoint1 ),
119
133
)
120
134
def test_build_engines () -> None :
121
- dummy_pkg_entrypoint = pkg_resources . EntryPoint . parse (
122
- "cfgrib = xarray.tests.test_plugins:backend_1"
135
+ dummy_pkg_entrypoint = EntryPoint (
136
+ "cfgrib" , " xarray.tests.test_plugins:backend_1" , "xarray_backends "
123
137
)
124
138
backend_entrypoints = plugins .build_engines ([dummy_pkg_entrypoint ])
125
139
@@ -131,17 +145,13 @@ def test_build_engines() -> None:
131
145
132
146
133
147
@mock .patch (
134
- "pkg_resources .EntryPoint.load" ,
148
+ f" { importlib_metadata_mock } .EntryPoint.load" ,
135
149
mock .MagicMock (return_value = DummyBackendEntrypoint1 ),
136
150
)
137
151
def test_build_engines_sorted () -> None :
138
152
dummy_pkg_entrypoints = [
139
- pkg_resources .EntryPoint .parse (
140
- "dummy2 = xarray.tests.test_plugins:backend_1" ,
141
- ),
142
- pkg_resources .EntryPoint .parse (
143
- "dummy1 = xarray.tests.test_plugins:backend_1" ,
144
- ),
153
+ EntryPoint ("dummy2" , "xarray.tests.test_plugins:backend_1" , "xarray.backends" ),
154
+ EntryPoint ("dummy1" , "xarray.tests.test_plugins:backend_1" , "xarray.backends" ),
145
155
]
146
156
backend_entrypoints = plugins .build_engines (dummy_pkg_entrypoints )
147
157
backend_entrypoints = list (backend_entrypoints )
0 commit comments