Skip to content

Commit 734d1d7

Browse files
authored
Merge pull request #74 from figi44/main
Replace `imp` with `importlib`
2 parents 7116e29 + a2182f5 commit 734d1d7

File tree

3 files changed

+35
-16
lines changed

3 files changed

+35
-16
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
flake8 argparse2tool --ignore=E2,E3,E4,E5,W3,W505
3232
PYTHONPATH=$(argparse2tool) python examples/example.py --generate_galaxy_xml > tmp.xml
3333
xmldiff tmp.xml examples/example.xml
34-
planemo lint --report_level all --fail_level error --xsd tmp.xml
34+
planemo lint --report_level all --fail_level error tmp.xml
3535
3636
# Galaxy tool generation for example with subparsers -- generating one large (invalid) tool
3737
echo '<root>' > tmp-sub.xml # wrap in extra level
@@ -43,9 +43,9 @@ jobs:
4343
PYTHONPATH=$(argparse2tool) python examples/example-sub.py --generate_galaxy_xml --command foo > tmp-sub-foo.xml
4444
PYTHONPATH=$(argparse2tool) python examples/example-sub.py --generate_galaxy_xml --command bar > tmp-sub-bar.xml
4545
xmldiff tmp-sub-foo.xml examples/example-sub-foo.xml
46-
planemo lint --report_level all --fail_level error --xsd tmp-sub-foo.xml
46+
planemo lint --report_level all --fail_level error tmp-sub-foo.xml
4747
xmldiff tmp-sub-bar.xml examples/example-sub-bar.xml
48-
planemo lint --report_level all --fail_level error --xsd tmp-sub-bar.xml
48+
planemo lint --report_level all --fail_level error tmp-sub-bar.xml
4949
5050
PYTHONPATH=$(argparse2tool) python examples/example.py --generate_cwl_tool > tmp.cwl
5151
PYTHONPATH=$(argparse2tool) python examples/example-sub.py --generate_cwl_tool > tmp-sub.cwl

argparse2tool/__init__.py

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,26 @@
11
"""Stub for argparse2tool"""
2+
23
import sys
4+
35
try:
46
from builtins import range
57
except Exception:
68
pass
79

810

9-
__version__ = '0.4.9'
11+
__version__ = "0.4.9"
1012

1113

1214
def load_argparse():
1315
ARGPARSE_NUMBER = 1
14-
return load_conflicting_package('argparse', 'argparse2tool/dropins', ARGPARSE_NUMBER)
16+
return load_conflicting_package(
17+
"argparse", "argparse2tool/dropins", ARGPARSE_NUMBER
18+
)
1519

1620

1721
def load_click():
1822
CLICK_NUMBER = 5
19-
return load_conflicting_package('click', 'argparse2tool/dropins', CLICK_NUMBER)
23+
return load_conflicting_package("click", "argparse2tool/dropins", CLICK_NUMBER)
2024

2125

2226
def load_conflicting_package(name, not_name, module_number):
@@ -28,9 +32,11 @@ def load_conflicting_package(name, not_name, module_number):
2832
2933
http://stackoverflow.com/a/6032023
3034
"""
31-
import imp
35+
import importlib.util
36+
import importlib.machinery
37+
3238
for i in range(0, 100):
33-
random_name = 'random_name_%d' % (i,)
39+
random_name = f"random_name_{i}"
3440
if random_name not in sys.modules:
3541
break
3642
else:
@@ -41,10 +47,20 @@ def load_conflicting_package(name, not_name, module_number):
4147
# This will hold the correct sys.path for the REAL argparse
4248
for path in sys.path:
4349
try:
44-
(f, pathname, desc) = imp.find_module(name, [path])
50+
spec = importlib.machinery.PathFinder.find_spec(name, [path])
51+
if spec is None or spec.origin is None:
52+
continue
53+
54+
# Check if this is the module we want (avoiding the override)
55+
if not_name not in spec.origin and isinstance(
56+
spec.loader, importlib.machinery.SourceFileLoader
57+
):
58+
spec.loader.name = random_name
59+
spec.name = random_name
60+
module = importlib.util.module_from_spec(spec)
61+
sys.modules[random_name] = module
62+
spec.loader.exec_module(module)
63+
return sys.modules[random_name]
4564
except ImportError:
4665
continue
47-
if not_name not in pathname and desc[2] == module_number:
48-
imp.load_module(random_name, f, pathname, desc)
49-
return sys.modules[random_name]
5066
return None

argparse2tool/check_path.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,19 @@
44
55
intended use: `PYTHONPATH=$(argparse2tool) python script.py ...`
66
"""
7-
import imp
7+
import importlib.util
88
import os
99
import sys
1010

1111

1212
def main():
13-
(handle, pathname, desc) = imp.find_module('argparse2tool')
14-
if desc[2] != 5:
13+
spec = importlib.util.find_spec("argparse2tool")
14+
if spec is None:
1515
sys.exit("could not find argparse2tool")
16+
17+
pathname = os.path.dirname(spec.origin)
1618
path = os.path.join(pathname, "dropins")
19+
1720
if not os.path.exists(path):
1821
sys.exit("no dropins dir %s" % path)
1922
if not os.path.exists(os.path.join(path, "argparse")):
@@ -24,5 +27,5 @@ def main():
2427
print(path)
2528

2629

27-
if __name__ == '__main__':
30+
if __name__ == "__main__":
2831
main()

0 commit comments

Comments
 (0)