1+ import sys
12from unittest import mock
23
3- import pkg_resources
44import pytest
55
66from xarray .backends import common , plugins
77
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+
818
919class DummyBackendEntrypointArgs (common .BackendEntrypoint ):
1020 def open_dataset (filename_or_obj , * args ):
@@ -29,12 +39,12 @@ def open_dataset(self, filename_or_obj, *, decoder):
2939@pytest .fixture
3040def dummy_duplicated_entrypoints ():
3141 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" ] ,
3646 ]
37- eps = [pkg_resources . EntryPoint . parse ( spec ) for spec in specs ]
47+ eps = [EntryPoint ( name , value , group ) for name , value , group in specs ]
3848 return eps
3949
4050
@@ -46,8 +56,10 @@ def test_remove_duplicates(dummy_duplicated_entrypoints) -> None:
4656
4757
4858def 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" ,
5163 )
5264 with pytest .warns (RuntimeWarning ) as record :
5365 _ = plugins .build_engines ([broken_backend ])
@@ -68,13 +80,15 @@ def test_remove_duplicates_warnings(dummy_duplicated_entrypoints) -> None:
6880 assert "entrypoints" in message1
6981
7082
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+ )
7286def test_backends_dict_from_pkg () -> None :
7387 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" ] ,
7690 ]
77- entrypoints = [pkg_resources . EntryPoint . parse ( spec ) for spec in specs ]
91+ entrypoints = [EntryPoint ( name , value , group ) for name , value , group in specs ]
7892 engines = plugins .backends_dict_from_pkg (entrypoints )
7993 assert len (engines ) == 2
8094 assert engines .keys () == set (("engine1" , "engine2" ))
@@ -114,12 +128,12 @@ def test_set_missing_parameters_raise_error() -> None:
114128
115129
116130@mock .patch (
117- "pkg_resources .EntryPoint.load" ,
131+ f" { importlib_metadata_mock } .EntryPoint.load" ,
118132 mock .MagicMock (return_value = DummyBackendEntrypoint1 ),
119133)
120134def 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 "
123137 )
124138 backend_entrypoints = plugins .build_engines ([dummy_pkg_entrypoint ])
125139
@@ -131,17 +145,13 @@ def test_build_engines() -> None:
131145
132146
133147@mock .patch (
134- "pkg_resources .EntryPoint.load" ,
148+ f" { importlib_metadata_mock } .EntryPoint.load" ,
135149 mock .MagicMock (return_value = DummyBackendEntrypoint1 ),
136150)
137151def test_build_engines_sorted () -> None :
138152 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" ),
145155 ]
146156 backend_entrypoints = plugins .build_engines (dummy_pkg_entrypoints )
147157 backend_entrypoints = list (backend_entrypoints )
0 commit comments