Coverage for src/midgy/loader.py: 0%
25 statements
« prev ^ index » next coverage.py v6.5.0, created at 2022-12-04 11:40 -0800
« prev ^ index » next coverage.py v6.5.0, created at 2022-12-04 11:40 -0800
1"""run and import markdown files as python"""
2from dataclasses import dataclass, field
4from types import MethodType, ModuleType
5from importnb import Notebook
6from importnb.loader import SourceModule
8from .python import Python
10__all__ = ("Markdown", "run")
13class MarkdownModule(SourceModule):
14 def _repr_markdown_(self):
15 with open(self.__file__) as file:
16 return f"\t{repr(self)}\n" + file.read()
19@dataclass
20class Markdown(Notebook):
21 """an importnb extension for markdown documents"""
23 include_doctest: bool = False
24 extensions: tuple = field(
25 default_factory=[
26 ".md",
27 ".py.md",
28 ".md.ipynb",
29 ].copy
30 )
31 module_type: ModuleType = field(default=MarkdownModule)
32 render_cls = Python
34 def __post_init__(self):
35 self.renderer = self.render_cls(include_doctest=self.include_doctest)
37 def exec_module(self, module):
38 super().exec_module(module)
40 def code(self, str):
41 return super().code(self.renderer.render("".join(str)))
44if __name__ == "__main__":
45 from sys import argv
47 Markdown.load_argv(argv[1:])