示例#1
0
def render_page(page, solution=None, vars=None, **kwargs):
    lesson = page.lesson

    def static_url(path):
        return url_for('lesson_static', lesson=lesson, path=path)

    try:
        content = page.render_html(
            solution=solution,
            static_url=static_url,
            lesson_url=kwargs.get('lesson_url', lesson_url),
            vars=vars)
    except FileNotFoundError:
        abort(404)

    kwargs.setdefault('lesson', lesson)
    kwargs.setdefault('page', page)

    if solution is not None:
        template_name = 'solution.html'
        kwargs.setdefault('solution_number', solution)

    else:
        template_name = 'lesson.html'

    kwargs.setdefault('title', page.title)
    kwargs.setdefault('content', content)

    return render_template(template_name, **kwargs, **vars_functions(vars),
                           edit_path=page.edit_path)
示例#2
0
def session_coverpage(course, session, coverpage):
    """Render the session coverpage.

    Args:
        course      course where the session belongs
        session     name of the session
        coverpage   coverpage of the session, front is default

    Returns:
        rendered session coverpage
    """

    session = course.sessions.get(session)

    def lesson_url(lesson, *args, **kwargs):
        return url_for('course_page',
                       course=course,
                       lesson=lesson,
                       *args,
                       **kwargs)

    def session_url(session):
        return url_for("session_coverpage",
                       course=course,
                       session=session,
                       coverpage=coverpage)

    content = session.get_coverpage_content(course, coverpage, app)

    template = "coverpage.html"
    if coverpage == "back":
        template = "backpage.html"

    homework_section = False
    link_section = False
    cheatsheet_section = False
    for mat in session.materials:
        if mat.url_type == "homework":
            homework_section = True
        if mat.url_type == "link":
            link_section = True
        if mat.url_type == "cheatsheet":
            cheatsheet_section = True

    return render_template(template,
                           content=content,
                           session=session,
                           course=course,
                           lesson_url=lesson_url,
                           **vars_functions(course.vars),
                           edit_path=session.get_edit_path(course, coverpage),
                           homework_section=homework_section,
                           link_section=link_section,
                           cheatsheet_section=cheatsheet_section)
示例#3
0
def run(run):
    def lesson_url(lesson, *args, **kwargs):
        return url_for('run_page', run=run, lesson=lesson, *args, **kwargs)

    try:
        return render_template('course.html',
                               course=run,
                               plan=run.sessions,
                               title=run.title,
                               lesson_url=lesson_url,
                               **vars_functions(run.vars),
                               edit_path=run.edit_path)
    except TemplateNotFound:
        abort(404)
示例#4
0
def course(course):
    def lesson_url(lesson, *args, **kwargs):
        return url_for('course_page', course=course, lesson=lesson, *args, **kwargs)

    try:
        return render_template(
            'course.html',
            course=course,
            plan=course.sessions,
            title=course.title,
            lesson_url=lesson_url,
            **vars_functions(course.vars),
            edit_path=course.edit_path)
    except TemplateNotFound:
        abort(404)
def course_content(course):
    def lesson_url(lesson, *args, **kwargs):
        if kwargs.get("page") == "index":
            kwargs.pop("page")

        return url_for('course_page',
                       course=course,
                       lesson=lesson,
                       *args,
                       **kwargs)

    return render_template("content/course.html",
                           course=course,
                           title=course.title,
                           plan=course.sessions,
                           lesson_url=lesson_url,
                           **vars_functions(course.vars))
def session_coverpage_content(course, session, coverpage):
    def lesson_url(lesson, *args, **kwargs):
        if kwargs.get("page") == "index":
            kwargs.pop("page")

        return url_for('course_page',
                       course=course,
                       lesson=lesson,
                       *args,
                       **kwargs)

    content = session.get_coverpage_content(course, coverpage, app)

    homework_section = False
    link_section = False
    cheatsheet_section = False
    for mat in session.materials:
        if mat.url_type == "homework":
            homework_section = True
        if mat.url_type == "link":
            link_section = True
        if mat.url_type == "cheatsheet":
            cheatsheet_section = True

    return render_template(
        "content/coverpage.html"
        if coverpage == "front" else "content/backpage.html",
        course=course,
        session=session,
        homework_section=homework_section,
        link_section=link_section,
        cheatsheet_section=cheatsheet_section,
        content=content,
        lesson_url=lesson_url,
        **vars_functions(course.vars),
    )
示例#7
0
    def render_html(
        self,
        solution=None,
        static_url=None,
        lesson_url=None,
        subpage_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

        if subpage_url is None:

            def subpage_url(page):
                return lesson_url(lesson=lesson, page=page)

        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':
            subpage_url,
            '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]