Coverage for src/midgy/loader.py: 0%

23 statements  

« prev     ^ index     » next       coverage.py v7.1.0, created at 2023-02-14 15:49 -0800

1"""run and import markdown files as python""" 

2from dataclasses import dataclass, field 

3 

4from types import MethodType 

5from importnb import Notebook 

6 

7from .python import Python 

8 

9__all__ = ("Markdown", "run") 

10 

11 

12@dataclass 

13class Markdown(Notebook): 

14 """an importnb extension for markdown documents""" 

15 

16 include_doctest: bool = False 

17 extensions: tuple = field(default_factory=[".md", ".py.md", ".md.ipynb", ].copy) 

18 render_cls = Python 

19 

20 def __post_init__(self): 

21 self.renderer = self.render_cls(include_doctest=self.include_doctest) 

22 

23 def exec_module(self, module): 

24 super().exec_module(module) 

25 module._repr_markdown_ = MethodType(repr_markdown, module) 

26 

27 def code(self, str): 

28 return super().code(self.renderer.render("".join(str))) 

29 

30 

31def repr_markdown(self): 

32 with open(self.__file__) as file: 

33 return F"\t{repr(self)}\n" + file.read() 

34 

35if __name__ == "__main__": 

36 from sys import argv 

37 

38 Markdown.load_argv(argv[1:])