def render_html(self, solution=None, static_url=None, lesson_url=None, vars=None, ): lesson = self.lesson if not vars: vars = {} else: vars = dict(vars) vars.update(self.vars) solutions = [] if static_url is None: def static_url(path): return 'static/{}'.format(path) if lesson_url is None: def lesson_url(lesson, page='index', solution=None): lesson = self.root.get_lesson(lesson) url = '../../{}/'.format(lesson.slug) if page != 'index' or solution is not None: url += '{}/'.format(page) if solution is not None: url += '{}/'.format(solution) return url def default_lesson_url(lesson, page='index'): url = '../../{}/'.format(lesson.slug) if page != 'index': url += '' return 'static/{}'.format(path) kwargs = { 'static': lambda path: static_url(path), 'lesson_url': lambda lesson, page='index', solution=None: lesson_url(lesson=lesson, page=page, solution=solution), 'subpage_url': lambda page: lesson_url(lesson=lesson, page=page), 'lesson': lesson, 'page': self, '$solutions': solutions, } kwargs.update(vars_functions(vars)) if self.jinja: template = self._get_template() content = template.render(**kwargs) else: with self.path.open() as file: content = file.read() def convert_url(url): prefix = 'static/' if not url.startswith(prefix): return url return static_url(url[len(prefix):]) if self.style == 'md': content = jinja2.Markup(convert_markdown(content, convert_url)) elif self.style == 'ipynb': content = jinja2.Markup(convert_notebook(content, convert_url)) else: template = self._get_template() content = jinja2.Markup(content) if solution is None: return content else: return solutions[solution]
def _notebook(): path = os.path.join(FIXTURES, 'notebook.ipynb') with open(path) as f: content = f.read() return convert_notebook(content)