Beispiel #1
0
    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>',
        )
Beispiel #2
0
 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",
     )
Beispiel #3
0
    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 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])
Beispiel #8
0
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)
Beispiel #9
0
 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()
Beispiel #10
0
    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)
Beispiel #11
0
 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)
Beispiel #12
0
 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>")
Beispiel #14
0
 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(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)
Beispiel #16
0
    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,
        )
Beispiel #17
0
    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)
Beispiel #18
0
    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,
        )
Beispiel #19
0
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()
Beispiel #20
0
    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
Beispiel #21
0
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")
Beispiel #24
0
    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)