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

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

2from dataclasses import dataclass, field 

3 

4from types import MethodType, ModuleType 

5from importnb import Notebook 

6from importnb.loader import SourceModule 

7 

8from .python import Python 

9 

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

11 

12 

13class MarkdownModule(SourceModule): 

14 def _repr_markdown_(self): 

15 with open(self.__file__) as file: 

16 return f"\t{repr(self)}\n" + file.read() 

17 

18 

19@dataclass 

20class Markdown(Notebook): 

21 """an importnb extension for markdown documents""" 

22 

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 

33 

34 def __post_init__(self): 

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

36 

37 def exec_module(self, module): 

38 super().exec_module(module) 

39 

40 def code(self, str): 

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

42 

43 

44if __name__ == "__main__": 

45 from sys import argv 

46 

47 Markdown.load_argv(argv[1:])