def test_failing_parser_injection(self): def fake_parser(input): raise Exception() fake_parser.count = 0 orig_rst = ParsableText.rst ParsableText.rst = fake_parser pt = ParsableText("""<script type="text/javascript">alert('Eh, XSS injection!');</script>""") rendered = pt.parse() ParsableText.rst = orig_rst assert "<script " in rendered
def show_page(self, page): static_directory = self.app.static_directory language = self.user_manager.session_language() # Check for the file filename = None filepaths = [os.path.join(static_directory, page + ".yaml"), os.path.join(static_directory, page + "." + language + ".yaml")] for filepath in filepaths: if os.path.exists(filepath): filename = filepath mtime = os.stat(filepath).st_mtime if not filename: raise web.notfound() # Check and update cache if INGIniousStaticPage.cache.get(filepath, (0, None))[0] < mtime: with open(filename, "r") as f: INGIniousStaticPage.cache[filepath] = mtime, custom_yaml.load(f) filecontent = INGIniousStaticPage.cache[filepath][1] title = filecontent["title"] content = ParsableText.rst(filecontent["content"], initial_header_level=2) return self.template_helper.get_renderer().static(title, content)
def test_wrong_rst_injection(self): rendered = str(ParsableText.rst( """ makefail_ <script type="text/javascript">alert('Eh, XSS injection!');</script> """ )) assert "<script type="text/javascript">" in rendered
def test_parsable_text_once(self): def fake_parser(input, language, show_everything): fake_parser.count += 1 return "" fake_parser.count = 0 orig_rst = ParsableText.rst ParsableText.rst = fake_parser pt = ParsableText("""``test``""", "rst") pt.rst = fake_parser pt.parse() str(pt) str(pt) ParsableText.rst = orig_rst assert fake_parser.count == 1
def show(self, renderer, language): """ Show TextBox """ return str(renderer.tasks.box_text(ParsableText(self._content, "rst", translation=self._translations[language])))
def get_context(self, language): """ Get the context(description) of this task """ context = self.gettext(language, self._context) if self._context else "" vals = self._plugin_manager.call_hook('task_context', course=self.get_course(), task=self, default=context) return ParsableText(vals[0], "rst", translation=self.get_translation_obj(language)) if len(vals) \ else ParsableText(context, "rst", translation=self.get_translation_obj(language))
def test_hidden_until_before_admin(self): assert "Something" in ParsableText.rst(""" .. hidden-until:: 22/05/2102 Something """, show_everything=True)
def test_hidden_until_after(self): assert "Something" in ParsableText.rst(""" .. hidden-until:: 22/05/2002 Something """)
def test_unicode(self): rendered = str(ParsableText.rst("""``😁``""")) assert "<code" in rendered and "</code>" in rendered and "😁" in rendered
def get_context(self, language): """ Get the context(description) of this task """ context = self.gettext(language, self._context) if self._context else "" vals = self._hook_manager.call_hook('task_context', course=self.get_course(), task=self, default=context) return ParsableText(vals[0], "rst", self._translations.get(language, gettext.NullTranslations())) if len(vals) else \ ParsableText(context, "rst", self._translations.get(language, gettext.NullTranslations()))
def show_input(self, template_helper, language, seed): """ Show InputBox """ header = ParsableText(self.gettext(language, self._header), "rst", translation=self.get_translation_obj(language)) return template_helper.render("tasks/single_line_code.html", inputId=self.get_id(), header=header, type="text", maxChars=0, optional=self._optional, default=self._default)
def test_html_tidy(self): rendered = ParsableText.html('<non existing tag></...>') assert '<non existing tag>' not in rendered
def show_input(self, template_helper, language, seed): """ Show InputBox """ header = ParsableText(self.gettext(language, self._header), "rst", translation=self._translations.get(language, gettext.NullTranslations())) return str(DisplayableCodeSingleLineProblem.get_renderer(template_helper) .tasks.single_line_code(self.get_id(), header, "text", 0, self._optional))
def show_input(self, template_helper, language, seed): """ Show MatchProblem """ header = ParsableText(self.gettext(language, self._header), "rst", translation=self.get_translation_obj(language)) return template_helper.render("tasks/match.html", inputId=self.get_id(), header=header)
def test_hidden_until_before(self): assert "Something" not in ParsableText.rst(""" .. hidden-until:: 22/05/2102 Something """)
def get_section_description(self, language, section_id): """ Returns the skills for the section section_id of the template """ description = self._template_content.get("structure_description", {}).get(section_id, "No description available.") return ParsableText(self.gettext(language, description), "rst", translation=self.get_translation_obj(language))
def parse_rst(self, s): parser = ParsableText(s) return str(parser)
def test_code(self): rendered = ParsableText.rst("""``test``""") assert "<code" in rendered and "</code>" in rendered
def show_input(self, template_helper, language, seed): """ Show FileBox """ header = ParsableText(self.gettext(language, self._header), "rst", translation=self._translations.get(language, gettext.NullTranslations())) return str(DisplayableFileProblem.get_renderer(template_helper).tasks.file(self.get_id(), header, self._max_size, self._allowed_exts, json))
def show_input(self, template_helper, language, seed): """ Show MatchProblem """ header = ParsableText(self.gettext(language, self._header), "rst", translation=self._translations.get(language, gettext.NullTranslations())) return str(DisplayableMatchProblem.get_renderer(template_helper).tasks.match(self.get_id(), header))
def show_input(self, template_helper, language, seed): """ Show BasicCodeProblem and derivatives """ header = ParsableText(self.gettext(language,self._header), "rst", translation=self._translations.get(language, gettext.NullTranslations())) return str(DisplayableCodeProblem.get_renderer(template_helper).tasks.code(self.get_id(), header, 8, 0, self._language, self._optional))
def get_description(self, language): """Returns the course description """ description = self.gettext(language, self._description) if self._description else '' return ParsableText(description, "rst", translation=self.get_translation_obj(language))
def parse_rst_content(self, content): if content is None: return content parse_content = ParsableText(content, "rst").parse() return parse_content