Package: asciidoc
Version: 8.6.10+git20190307.51d7c14-1
Severity: normal
Tags: patch

Hello,

using asciidocapi with the following small script (also attached)

    #!/usr/bin/python3

    import io
    import sys

    sys.path.append('/usr/share/asciidoc')
    import asciidocapi


    infile = io.StringIO('Test')
    outfile = io.StringIO()

    adoc = asciidocapi.AsciiDocAPI()
    adoc.execute(infile, outfile)

results in an exception:

    Traceback (most recent call last):
    File "./test", line 13, in <module>
        adoc = asciidocapi.AsciiDocAPI()
    File "/usr/share/asciidoc/asciidocapi.py", line 209, in __init__
        self.__import_asciidoc()
    File "/usr/share/asciidoc/asciidocapi.py", line 244, in __import_asciidoc
        module = importlib.util.module_from_spec(spec)
    File "<frozen importlib._bootstrap>", line 580, in module_from_spec
    AttributeError: 'NoneType' object has no attribute 'loader'

The attached patch fixes this issue (tested with python3.7 and
python3.8).

Regards
Simon
-- 
+ privacy is necessary
+ using gnupg http://gnupg.org
+ public key id: 0x92FEFDB7E44C32F9
#!/usr/bin/python3

import io
import sys

sys.path.append('/usr/share/asciidoc')
import asciidocapi


infile = io.StringIO('Test')
outfile = io.StringIO()

adoc = asciidocapi.AsciiDocAPI()
adoc.execute(infile, outfile)
--- /usr/share/asciidoc/asciidocapi.py.orig	2019-11-19 08:27:07.987333977 +0100
+++ /usr/share/asciidoc/asciidocapi.py	2019-11-24 08:23:19.141730508 +0100
@@ -239,9 +239,13 @@
                     import imp
                     module = imp.load_source('asciidoc', self.cmd)
                 else:
-                    import importlib.util
-                    spec = importlib.util.spec_from_file_location('asciidoc', self.cmd)
-                    module = importlib.util.module_from_spec(spec)
+                    # Thanks to Mad Physicist for this solution, read on 2019-11-19
+                    # https://stackoverflow.com/questions/2601047/import-a-python-module-without-the-py-extension/43602645#43602645
+                    from importlib.util import spec_from_loader, module_from_spec
+                    from importlib.machinery import SourceFileLoader
+                    loader = SourceFileLoader('asciidoc', self.cmd)
+                    spec = spec_from_loader('asciidoc', loader)
+                    module = module_from_spec(spec)
                     spec.loader.exec_module(module)
                 self.asciidoc = module
             except ImportError:

Attachment: signature.asc
Description: PGP signature

Reply via email to