Use importlib to take place of imp module

The imp module is deprecated[1] since version 3.4, use importlib to
instead

[1]: https://docs.python.org/3/library/imp.html

Change-Id: Ifb44be3b0a0c35dd99d0230e9c371dfcb97f6fdd
This commit is contained in:
likui
2020-10-09 17:47:33 +08:00
parent d233dbea8e
commit dfb45e2b66
2 changed files with 15 additions and 7 deletions

View File

@@ -21,7 +21,7 @@ Command-line interface to the OpenStack Trove API.
import argparse import argparse
import getpass import getpass
import glob import glob
import imp import importlib
import itertools import itertools
import logging import logging
import os import os
@@ -299,6 +299,14 @@ class OpenStackTroveShell(object):
yield name, module yield name, module
def _load_module(self, name, path):
module_spec = importlib.spec_from_file_location(
name, path
)
module = importlib.module_from_spec(module_spec)
module_spec.loader.exec_module(module)
return module
def _discover_via_contrib_path(self, version): def _discover_via_contrib_path(self, version):
module_path = os.path.dirname(os.path.abspath(__file__)) module_path = os.path.dirname(os.path.abspath(__file__))
version_str = "v%s" % version.replace('.', '_') version_str = "v%s" % version.replace('.', '_')
@@ -312,7 +320,7 @@ class OpenStackTroveShell(object):
if name == "__init__": if name == "__init__":
continue continue
module = imp.load_source(name, ext_path) module = self._load_module(name, ext_path)
yield name, module yield name, module
def _discover_via_entry_points(self): def _discover_via_entry_points(self):

View File

@@ -13,8 +13,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import imp
import inspect import inspect
import types
from unittest import mock from unittest import mock
import pkg_resources import pkg_resources
@@ -31,7 +31,7 @@ class DiscoverTest(testtools.TestCase):
if group == 'troveclient.extension': if group == 'troveclient.extension':
fake_ep = mock.Mock() fake_ep = mock.Mock()
fake_ep.name = 'foo' fake_ep.name = 'foo'
fake_ep.module = imp.new_module('foo') fake_ep.module = types.ModuleType('foo')
fake_ep.load.return_value = fake_ep.module fake_ep.load.return_value = fake_ep.module
return [fake_ep] return [fake_ep]
@@ -48,13 +48,13 @@ class DiscoverTest(testtools.TestCase):
def test_discover_extensions(self): def test_discover_extensions(self):
def mock_discover_via_python_path(self): def mock_discover_via_python_path(self):
yield 'foo', imp.new_module('foo') yield 'foo', types.ModuleType('foo')
def mock_discover_via_contrib_path(self, version): def mock_discover_via_contrib_path(self, version):
yield 'bar', imp.new_module('bar') yield 'bar', types.ModuleType('bar')
def mock_discover_via_entry_points(self): def mock_discover_via_entry_points(self):
yield 'baz', imp.new_module('baz') yield 'baz', types.ModuleType('baz')
@mock.patch.object(troveclient.shell.OpenStackTroveShell, @mock.patch.object(troveclient.shell.OpenStackTroveShell,
'_discover_via_python_path', '_discover_via_python_path',