mfarragher / obsidiantools

Obsidian tools - a Python package for analysing an Obsidian.md vault
Other
402 stars 28 forks source link

Markdown parser cannot run on v0.8.0 (for one environment) #14

Closed mfarragher closed 2 years ago

mfarragher commented 2 years ago

On some environments I'm having issues with getting markdown.markdown to work at all. Including on markdown v3.3 and the latest v3.4. It is an issue with how extensions are registered.

Debugging output does not point to a specific extension having a problem.

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [14], in <cell line: 1>()
----> 1 markdown.markdown('x', output_format='html',
      2                              extensions=['pymdownx.arithmatex',
      3                                          'pymdownx.mark',
      4                                          'pymdownx.tilde',
      5                                          'pymdownx.saneheaders',
      6                                          'footnotes',
      7                                          'md_mermaid',
      8                                          'sane_lists',
      9                                          'tables'],
     10                              extension_configs={'pymdownx.tilde':
     11                                                 {'subscript': False}})

File ~/miniconda3/envs/nlpkit/lib/python3.8/site-packages/markdown/core.py:386, in markdown(text, **kwargs)
    371 def markdown(text, **kwargs):
    372     """Convert a markdown string to HTML and return HTML as a unicode string.
    373 
    374     This is a shortcut function for `Markdown` class to cover the most
   (...)
    384 
    385     """
--> 386     md = Markdown(**kwargs)
    387     return md.convert(text)

File ~/miniconda3/envs/nlpkit/lib/python3.8/site-packages/markdown/core.py:96, in Markdown.__init__(self, **kwargs)
     94 self.references = {}
     95 self.htmlStash = util.HtmlStash()
---> 96 self.registerExtensions(extensions=kwargs.get('extensions', []),
     97                         configs=kwargs.get('extension_configs', {}))
     98 self.set_output_format(kwargs.get('output_format', 'xhtml'))
     99 self.reset()

File ~/miniconda3/envs/nlpkit/lib/python3.8/site-packages/markdown/core.py:125, in Markdown.registerExtensions(self, extensions, configs)
    123     ext = self.build_extension(ext, configs.get(ext, {}))
    124 if isinstance(ext, Extension):
--> 125     ext.extendMarkdown(self)
    126     logger.debug(
    127         'Successfully loaded extension "%s.%s".'
    128         % (ext.__class__.__module__, ext.__class__.__name__)
    129     )
    130 elif ext is not None:

TypeError: extendMarkdown() missing 1 required positional argument: 'md_globals'
mfarragher commented 2 years ago

I narrowed it down to md_mermaid extension as causing the issue. It seems to be a problem in a Python 3.8 environment I am using.

It doesn't cause problems for the stub vault used for testing, but fails on a markdown function call on a basic string. It fails on a larger vault I have, which was fine earlier but now is having problems.

Environment:

# Name                    Version                   Build  Channel
...
markdown                  3.4.1              pyhd8ed1ab_0    conda-forge
...
md-mermaid                0.1.1                    pypi_0    pypi
...
python                    3.8.13          h582c2e5_0_cpython    conda-forge
mfarragher commented 2 years ago

Fixed in obsidiantools v0.8.1. pip install obsidiantools==0.8.1