def test_works_with_lazy_functions(self): URLPath.create_root() config = (("base_url", reverse_lazy("wiki:get", kwargs={"path": ""})), ) md = markdown.Markdown(extensions=["extra", WikiPathExtension(config)]) text = "[Français](wiki:/fr)" self.assertEqual( md.convert(text), '<p><a class="wikipath linknotfound" href="/fr">Français</a></p>', ) URLPath.create_urlpath( URLPath.root(), "linktest", title="LinkTest", content="A page\n#A section\nA line", user_message="Comment1", ) # Link to an existing page text = "[Test link](wiki:/linktest)" self.assertEqual( md.convert(text), '<p><a class="wikipath" href="/linktest/">Test link</a></p>', ) # Link with an empty fragment text = "[Test link](wiki:/linktest#)" self.assertEqual( md.convert(text), '<p><a class="wikipath" href="/linktest/#">Test link</a></p>', ) # Link to a header in an existing page text = "[Test head](wiki:/linktest#wiki-toc-a-section)" self.assertEqual( md.convert(text), '<p><a class="wikipath" href="/linktest/#wiki-toc-a-section">Test head</a></p>', ) # Link to a header in a non existing page text = "[Test head nonExist](wiki:/linktesterr#wiki-toc-a-section)" self.assertEqual( md.convert(text), '<p><a class="wikipath linknotfound" href="/linktesterr#wiki-toc-a-section">Test head nonExist</a></p>', ) # Invalid Wiki link: The default markdown link parser takes over text = "[Test head err](wiki:/linktest#wiki-toc-a-section#err)" self.assertEqual( md.convert(text), '<p><a href="wiki:/linktest#wiki-toc-a-section#err">Test head err</a></p>', )
def setUp(self): config = (("base_url", reverse_lazy("wiki:get", kwargs={"path": ""})), ) self.md = markdown.Markdown( extensions=["extra", WikiPathExtension(config)]) URLPath.create_root() URLPath.create_urlpath( URLPath.root(), "linktest", title="LinkTest", content="A page\n#A section\nA line", user_message="Comment1", )
def test_manager(self): root = URLPath.create_root() child = URLPath.create_urlpath(root, "child") self.assertEqual(root.parent, None) self.assertEqual(list(root.children.all().active()), [child])
def test_html_removal(self): urlpath = URLPath.create_urlpath( self.root, "html_removal", title="Test 1", content="</html>only_this" ) self.assertEqual(urlpath.article.render(), "<p>only_this</p>")
def get_article(self, cont, image): urlpath = URLPath.create_urlpath( URLPath.root(), "html_image", title="TestImage", content=cont ) if image: self._create_test_image(urlpath.path) return urlpath.article.render()
def test_editsection_edit(self): urlpath = URLPath.create_urlpath(URLPath.root(), "testedit", title="TestEdit", content=TEST_CONTENT) old_number = urlpath.article.current_revision.revision_number self.get_literal_url( reverse('wiki:editsection', kwargs={ 'path': 'testedit/', 'location': '1-2-0', 'header': 'T3' })) self.fill({'#id_content': '# Header 1\nContent of the new section'}) self.submit('#id_save') expected = ( r'(?s)' r'Title 1<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-0-0/header/T1/">\[edit\]</a>.*' r'Title 2<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-1-0/header/T2/">\[edit\]</a>.*' r'Header 1<a class="article-edit-title-link" href="/testedit/_plugin/editsection/2-0-0/header/H1/">\[edit\]</a>.*' r'Content of the new section.*' r'Title 5<a class="article-edit-title-link" href="/testedit/_plugin/editsection/2-1-0/header/T5/">\[edit\]</a>.*' r'Title 6<a class="article-edit-title-link" href="/testedit/_plugin/editsection/3-0-0/header/T6/">\[edit\]</a>.*' ) self.assertRegex(self.last_response.content.decode('utf-8'), expected) new_number = URLPath.objects.get( slug='testedit').article.current_revision.revision_number self.assertEqual(new_number, old_number + 1)
def unitgroup(request: HttpRequest, pk: int) -> HttpResponse: group = UnitGroup.objects.get(pk=pk) if group.subject == "A" or group.subject == "F": subject_name = 'algebra' elif group.subject == "C": subject_name = 'combinatorics' elif group.subject == "G": subject_name = 'geometry' elif group.subject == "N": subject_name = 'number-theory' elif group.subject == "M": subject_name = 'miscellaneous' elif group.subject == "K": subject_name = 'null' else: raise Exception(f"No subject for {group.name}.") slug = slugify(group.name) try: u = URLPath.get_by_path( path=f'/units/list-of-{subject_name}-units/{slug}') except URLPath.DoesNotExist: parent = URLPath.get_by_path( path=f'/units/list-of-{subject_name}-units/') content = f'[unit {group.slug}]' + '\n' + '[/unit]' + '\n' * 2 content += f'(This is an automatically generated article for {group.name}. Please add some content!)' + '\n' * 2 u = URLPath.create_urlpath( parent=parent, slug=slug, title=group.name, request=request, content=content, ) return wiki_redirect(u)
def get_article(self, cont): urlpath = URLPath.create_urlpath(URLPath.root(), "html_attach", title="TestAttach", content=cont) self._create_test_attachment(urlpath.path) return urlpath.article.render()
def test_editsection_edit(self): urlpath = URLPath.create_urlpath(URLPath.root(), "testedit", title="TestEdit", content=TEST_CONTENT) old_number = urlpath.article.current_revision.revision_number self.get_literal_url( reverse( "wiki:editsection", kwargs={ "path": "testedit/", "location": "1-2-0", "header": "T3" }, )) self.fill({"#id_content": "# Header 1\nContent of the new section"}) self.submit("#id_save") expected = ( r"(?s)" r'Title 1<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-0-0/header/T1/">\[edit\]</a>.*' r'Title 2<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-1-0/header/T2/">\[edit\]</a>.*' r'Header 1<a class="article-edit-title-link" href="/testedit/_plugin/editsection/2-0-0/header/H1/">\[edit\]</a>.*' r"Content of the new section.*" r'Title 5<a class="article-edit-title-link" href="/testedit/_plugin/editsection/2-1-0/header/T5/">\[edit\]</a>.*' r'Title 6<a class="article-edit-title-link" href="/testedit/_plugin/editsection/3-0-0/header/T6/">\[edit\]</a>.*' ) self.assertRegex(self.last_response.content.decode("utf-8"), expected) new_number = URLPath.objects.get( slug="testedit").article.current_revision.revision_number self.assertEqual(new_number, old_number + 1)
def test_broken_content(self): # Regression test for https://github.com/django-wiki/django-wiki/issues/1094 TEST_CONTENT = "### [Here we go](#anchor)" urlpath = URLPath.create_urlpath( URLPath.root(), "testedit", title="TestEdit", content=TEST_CONTENT ) output = urlpath.article.render() print(output)
def get_article(self, cont): urlpath = URLPath.create_urlpath( URLPath.root(), "html_attach", title="TestAttach", content=cont ) self._create_test_attachment(urlpath.path) return urlpath.article.render()
def test_html_removal(self): urlpath = URLPath.create_urlpath( self.root, 'html_removal', title="Test 1", content="</html>only_this" ) self.assertEqual(urlpath.article.render(), "<p>only_this</p>")
def test_editsection(self): # Test creating links to allow editing all sections individually urlpath = URLPath.create_urlpath(URLPath.root(), "testedit", title="TestEdit", content=TEST_CONTENT) output = urlpath.article.render() expected = ( r'(?s)' r'Title 1<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-0-0/header/T1/">\[edit\]</a>.*' r'Title 2<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-1-0/header/T2/">\[edit\]</a>.*' r'Title 3<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-2-0/header/T3/">\[edit\]</a>.*' r'Title 4<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-2-1/header/T4/">\[edit\]</a>.*' r'Title 5<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-3-0/header/T5/">\[edit\]</a>.*' r'Title 6<a class="article-edit-title-link" href="/testedit/_plugin/editsection/2-0-0/header/T6/">\[edit\]</a>.*' ) self.assertRegex(output, expected) # Test wrong header text. Editing should fail with a redirect. url = reverse('wiki:editsection', kwargs={ 'path': 'testedit/', 'location': '1-2-1', 'header': 'Test' }) response = self.client.get(url) self.assertRedirects(response, reverse('wiki:get', kwargs={'path': 'testedit/'})) # Test extracting sections for editing url = reverse('wiki:editsection', kwargs={ 'path': 'testedit/', 'location': '1-2-1', 'header': 'T4' }) response = self.client.get(url) expected = ('>### Title 4[\r\n]*' '<') self.assertRegex(response.rendered_content, expected) url = reverse('wiki:editsection', kwargs={ 'path': 'testedit/', 'location': '1-2-0', 'header': 'T3' }) response = self.client.get(url) expected = ('>Title 3[\r\n]*' '-------[\r\n]*' 'a[\r\n]*' 'Paragraph[\r\n]*' '-------[\r\n]*' '### Title 4[\r\n]*' '<') self.assertRegex(response.rendered_content, expected)
def setUp(self): super().setUp() self.test_file = tempfile.NamedTemporaryFile("w", delete=False, suffix=".txt") self.test_file.write("test") self.child1 = URLPath.create_urlpath(self.root, "test-slug", title="Test 1") self.attachment1 = models.Attachment.objects.create(article=self.child1.article) self.attachment1_revision1 = models.AttachmentRevision.objects.create( attachment=self.attachment1, file=self.test_file.name, )
def test_editsection(self): # Test creating links to allow editing all sections individually urlpath = URLPath.create_urlpath( URLPath.root(), "testedit", title="TestEdit", content=TEST_CONTENT ) output = urlpath.article.render() expected = ( r"(?s)" r'Title 1<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-0-0/header/T1/">\[edit\]</a>.*' r'Title 2<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-1-0/header/T2/">\[edit\]</a>.*' r'Title 3<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-2-0/header/T3/">\[edit\]</a>.*' r'Title 4<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-2-1/header/T4/">\[edit\]</a>.*' r'Title 5<a class="article-edit-title-link" href="/testedit/_plugin/editsection/1-3-0/header/T5/">\[edit\]</a>.*' r'Title 6<a class="article-edit-title-link" href="/testedit/_plugin/editsection/2-0-0/header/T6/">\[edit\]</a>.*' ) self.assertRegex(output, expected) # Test wrong header text. Editing should fail with a redirect. url = reverse( "wiki:editsection", kwargs={"path": "testedit/", "location": "1-2-1", "header": "Test"}, ) response = self.client.get(url) self.assertRedirects( response, reverse("wiki:get", kwargs={"path": "testedit/"}) ) # Test extracting sections for editing url = reverse( "wiki:editsection", kwargs={"path": "testedit/", "location": "1-2-1", "header": "T4"}, ) response = self.client.get(url) expected = ">### Title 4[\r\n]*" "<" self.assertRegex(response.rendered_content, expected) url = reverse( "wiki:editsection", kwargs={"path": "testedit/", "location": "1-2-0", "header": "T3"}, ) response = self.client.get(url) expected = ( ">Title 3[\r\n]*" "-------[\r\n]*" "a[\r\n]*" "Paragraph[\r\n]*" "-------[\r\n]*" "### Title 4[\r\n]*" "<" ) self.assertRegex(response.rendered_content, expected)
def setUp(self): super(TestAttachmentManagementCommands, self).setUp() self.test_file = tempfile.NamedTemporaryFile('w', delete=False, suffix=".txt") self.test_file.write("test") self.child1 = URLPath.create_urlpath(self.root, 'test-slug', title="Test 1") self.attachment1 = models.Attachment.objects.create( article=self.child1.article ) self.attachment1_revision1 = models.AttachmentRevision.objects.create( attachment=self.attachment1, file=self.test_file.name, )
def create_wiki(wiki): #print("ENTER: create_wiki()") root = Article.objects.first().urlpath_set.first() slug_list = deque(wiki["root"].split("/")[1:]) parent = traverse_ancestors(root, slug_list) #print("root: {}".format(root)) #print("slug_list: {}".format(slug_list)) #print("parent: {}".format(parent)) urlpath = URLPath.create_urlpath( parent=parent, slug=wiki['slug'], site=None, title=wiki['name'], article_kwargs={}, request=None, article_w_permissions=None, content=wiki['content'], ) urlpath.save()
def create_article(self, parent_path, title, slug, content, message, user=None): parent = URLPath.get_by_path(parent_path) # title = 'This is article ONE' # slug = slugify(title) # content = 'body text etc' # message = 'user message??' if not user: user = User.objects.get(id=1) try: newpath = URLPath.create_urlpath(parent, slug, title=title, content=content, user_message=message, user=user, ip_address="127.0.0.1", article_kwargs={ 'owner': user, 'group': None, 'group_read': True, 'group_write': True, 'other_read': False, 'other_write': False, }) return newpath except Exception as e1: print(e1) return None
def main(): args = parser.parse_args() for r in args.root: if not r.endswith(MD_EXTENSION): parser.error('Must end with %s: %r' % (MD_EXTENSION, r)) files = list(find_files(args.root)) contents = list(read_contents(files)) from wiki.models import Article, ArticleRevision, URLPath if args.clear: if not contents: parser.error('--clear: No input files') hostname = socket.gethostname() if args.clear != hostname: parser.error('--clear: Please confirm by specifying ' + 'the current hostname %r as argument' % hostname) URLPath.objects.all().delete() ArticleRevision.objects.all().delete() Article.objects.all().delete() paths = {'': URLPath.create_root()} for i, (path, parent, title, content) in enumerate(contents): print('\r%s/%s %s\x1b[J' % (i + 1, len(contents), title), end='', flush=True, file=sys.stderr) parent_urlpath = paths[parent] paths[path] = URLPath.create_urlpath( parent=parent_urlpath, slug=os.path.basename(path), site=parent_urlpath.site, title=title, content=content, ) print('')
def test_history(self): url = reverse('wiki:globalhistory') url0 = reverse('wiki:globalhistory', kwargs={'only_last': '0'}) url1 = reverse('wiki:globalhistory', kwargs={'only_last': '1'}) response = self.client.get(url) expected = ( '(?s).*Root Article.*no log message.*' ) self.assertRegexpMatches(response.rendered_content, expected) URLPath.create_urlpath(URLPath.root(), "testhistory1", title="TestHistory1", content="a page", user_message="Comment 1") response = self.client.get(url) expected = ( '(?s).*TestHistory1.*Comment 1.*' 'Root Article.*no log message.*' ) self.assertRegexpMatches(response.rendered_content, expected) urlpath = URLPath.create_urlpath( URLPath.root(), "testhistory2", title="TestHistory2", content="a page", user_message="Comment 2" ) expected = ( '(?s).*TestHistory2.*Comment 2.*' 'TestHistory1.*Comment 1.*' 'Root Article.*no log message.*' ) response = self.client.get(url) self.assertRegexpMatches(response.rendered_content, expected) response = self.client.get(url0) self.assertRegexpMatches(response.rendered_content, expected) response = self.client.get(url1) self.assertRegexpMatches(response.rendered_content, expected) response = self.client.post( reverse('wiki:edit', kwargs={'path': 'testhistory2/'}), {'content': 'a page modified', 'current_revision': str(urlpath.article.current_revision.id), 'preview': '0', 'save': '1', 'summary': 'Testing Revision', 'title': 'TestHistory2Mod'} ) expected = ( '(?s).*TestHistory2Mod.*Testing Revision.*' 'TestHistory2.*Comment 2.*' 'TestHistory1.*Comment 1.*' 'Root Article.*no log message.*' ) response = self.client.get(url) self.assertRegexpMatches(response.rendered_content, expected) response = self.client.get(url0) self.assertRegexpMatches(response.rendered_content, expected) expected = ( '(?s).*TestHistory2Mod.*Testing Revision.*' 'TestHistory1.*Comment 1.*' 'Root Article.*no log message.*' ) response = self.client.get(url1) self.assertRegexpMatches(response.rendered_content, expected)
def setUp(self): super().setUp() self.child = URLPath.create_urlpath(self.root, "child")
def test_history(self): url = reverse("wiki:globalhistory") url0 = reverse("wiki:globalhistory", kwargs={"only_last": "0"}) url1 = reverse("wiki:globalhistory", kwargs={"only_last": "1"}) response = self.client.get(url) expected = "(?s).*Root Article.*no log message.*" self.assertRegexpMatches(response.rendered_content, expected) URLPath.create_urlpath( URLPath.root(), "testhistory1", title="TestHistory1", content="a page", user_message="Comment 1", ) response = self.client.get(url) expected = "(?s).*TestHistory1.*Comment 1.*" "Root Article.*no log message.*" self.assertRegexpMatches(response.rendered_content, expected) urlpath = URLPath.create_urlpath( URLPath.root(), "testhistory2", title="TestHistory2", content="a page", user_message="Comment 2", ) expected = ("(?s).*TestHistory2.*Comment 2.*" "TestHistory1.*Comment 1.*" "Root Article.*no log message.*") response = self.client.get(url) self.assertRegexpMatches(response.rendered_content, expected) response = self.client.get(url0) self.assertRegexpMatches(response.rendered_content, expected) response = self.client.get(url1) self.assertRegexpMatches(response.rendered_content, expected) response = self.client.post( reverse("wiki:edit", kwargs={"path": "testhistory2/"}), { "content": "a page modified", "current_revision": str(urlpath.article.current_revision.id), "preview": "0", "save": "1", "summary": "Testing Revision", "title": "TestHistory2Mod", }, ) expected = ("(?s).*TestHistory2Mod.*Testing Revision.*" "TestHistory2.*Comment 2.*" "TestHistory1.*Comment 1.*" "Root Article.*no log message.*") response = self.client.get(url) self.assertRegexpMatches(response.rendered_content, expected) response = self.client.get(url0) self.assertRegexpMatches(response.rendered_content, expected) expected = ("(?s).*TestHistory2Mod.*Testing Revision.*" "TestHistory1.*Comment 1.*" "Root Article.*no log message.*") response = self.client.get(url1) self.assertRegexpMatches(response.rendered_content, expected)
def test_history(self): url = reverse('wiki:globalhistory') url0 = reverse('wiki:globalhistory', kwargs={'only_last': '0'}) url1 = reverse('wiki:globalhistory', kwargs={'only_last': '1'}) response = self.client.get(url) expected = ('(?s).*Root Article.*no log message.*') self.assertRegexpMatches(response.rendered_content, expected) URLPath.create_urlpath(URLPath.root(), "testhistory1", title="TestHistory1", content="a page", user_message="Comment 1") response = self.client.get(url) expected = ('(?s).*TestHistory1.*Comment 1.*' 'Root Article.*no log message.*') self.assertRegexpMatches(response.rendered_content, expected) urlpath = URLPath.create_urlpath(URLPath.root(), "testhistory2", title="TestHistory2", content="a page", user_message="Comment 2") expected = ('(?s).*TestHistory2.*Comment 2.*' 'TestHistory1.*Comment 1.*' 'Root Article.*no log message.*') response = self.client.get(url) self.assertRegexpMatches(response.rendered_content, expected) response = self.client.get(url0) self.assertRegexpMatches(response.rendered_content, expected) response = self.client.get(url1) self.assertRegexpMatches(response.rendered_content, expected) response = self.client.post( reverse('wiki:edit', kwargs={'path': 'testhistory2/'}), { 'content': 'a page modified', 'current_revision': str(urlpath.article.current_revision.id), 'preview': '0', 'save': '1', 'summary': 'Testing Revision', 'title': 'TestHistory2Mod' }) expected = ('(?s).*TestHistory2Mod.*Testing Revision.*' 'TestHistory2.*Comment 2.*' 'TestHistory1.*Comment 1.*' 'Root Article.*no log message.*') response = self.client.get(url) self.assertRegexpMatches(response.rendered_content, expected) response = self.client.get(url0) self.assertRegexpMatches(response.rendered_content, expected) expected = ('(?s).*TestHistory2Mod.*Testing Revision.*' 'TestHistory1.*Comment 1.*' 'Root Article.*no log message.*') response = self.client.get(url1) self.assertRegexpMatches(response.rendered_content, expected)