summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Liechti <cliechti@gmx.net>2015-08-07 14:42:15 +0200
committerChris Liechti <cliechti@gmx.net>2015-08-07 14:42:15 +0200
commitbaec2a303b12c471be135a4f6fa00b1567410c69 (patch)
treee506216a0a3aefe15e20fd5ef4dfd3dfcfd434a6
parenta1d5c6ded5e69d854e1e95ee35c027f7a6c7aa79 (diff)
downloadpyserial-git-baec2a303b12c471be135a4f6fa00b1567410c69.tar.gz
serial_for_url: use importlib instead of __import__
-rw-r--r--serial/__init__.py14
1 files changed, 8 insertions, 6 deletions
diff --git a/serial/__init__.py b/serial/__init__.py
index e9cce1e..d7dcde3 100644
--- a/serial/__init__.py
+++ b/serial/__init__.py
@@ -8,6 +8,7 @@
VERSION = '3.0a'
+import importlib
import sys
if sys.platform == 'cli':
@@ -51,21 +52,22 @@ def serial_for_url(url, *args, **kwargs):
klass = Serial # 'native' implementation
# check port type and get class
try:
- url_nocase = url.lower()
+ url_lowercase = url.lower()
except AttributeError:
# it's not a string, use default
pass
else:
- if '://' in url_nocase:
- protocol = url_nocase.split('://', 1)[0]
+ if '://' in url_lowercase:
+ protocol = url_lowercase.split('://', 1)[0]
+ module_name = '.protocol_%s' % (protocol,)
for package_name in protocol_handler_packages:
- module_name = '%s.protocol_%s' % (package_name, protocol,)
+ package = importlib.import_module(package_name)
try:
- handler_module = __import__(module_name)
+ handler_module = importlib.import_module(module_name, package_name)
except ImportError:
pass
else:
- klass = sys.modules[module_name].Serial
+ klass = handler_module.Serial
break
else:
raise ValueError('invalid URL, protocol %r not known' % (protocol,))