コード例 #1
0
ファイル: test_models.py プロジェクト: BrunoMoreno/waliki
 def test_content_saved_on_attribute_set(self):
     page = Page(path='test.rst')
     page.raw = rst
     path = os.path.join(settings.WALIKI_DATA_DIR, 'test.rst')
     self.assertEqual(page.abspath, path)
     self.assertTrue(os.path.exists(path))
     content = open(path).read()
     self.assertEqual(content, rst)
コード例 #2
0
ファイル: test_models.py プロジェクト: felsen/waliki
 def test_content_saved_on_attribute_set(self):
     page = Page(path='test.rst')
     page.raw = rst
     path = os.path.join(settings.WALIKI_DATA_DIR, 'test.rst')
     self.assertEqual(page.abspath, path)
     self.assertTrue(os.path.exists(path))
     content = open(path).read()
     self.assertEqual(content, rst)
コード例 #3
0
 def test_link_explicit(self):
     s = settings.WALIKI_MARKUPS_SETTINGS.get('Markdown')
     s['extension_configs']['wikilinks']['build_url'] = mock.Mock(return_value='xxx')
     with mock.patch('waliki.models.settings') as s_mock:
         s_mock.WALIKI_MARKUPS_SETTINGS.get.return_value = s
         html = Page.preview('Markdown', 'a [[Link]]')
     self.assertEqual(html, '<p>a <a class="wikilink" href="xxx">Link</a></p>\n')
コード例 #4
0
    def commit(self,
               page,
               message='',
               author=None,
               parent=None,
               extra_path=None):
        path = page.path
        paths_to_commit = [path]
        if extra_path:
            paths_to_commit.append(extra_path)
        kwargs = {}
        User = get_user_model()
        if isinstance(author, User) and author.is_authenticated():
            kwargs['author'] = u"%s <%s>" % (author.get_full_name()
                                             or author.username, author.email)
        elif isinstance(author, six.string_types):
            kwargs['author'] = author

        try:
            there_were_changes = parent and parent != self.last_version(page)
            status = git.status('--porcelain', path).stdout.decode('utf8')[:2]
            if parent and status != "UU":
                git.stash()
                git.checkout('--detach', parent)
                try:
                    git.stash('pop')
                except:
                    git.checkout('--theirs', path)

            if status == 'UU':
                # See http://stackoverflow.com/a/8062976/811740
                kwargs['i'] = True

            git.add(path)
            git_commit_cmd = git.commit.bake(allow_empty=True,
                                             allow_empty_message=True,
                                             m=message,
                                             **kwargs)
            git_commit_cmd('--', *paths_to_commit)
            last = self.last_version(page)
            if parent and status != "UU":
                git.checkout('master')
                git.merge(last)
        except ErrorReturnCode as e:
            # TODO: make this more robust!
            error = e.stdout.decode('utf8')
            if 'CONFLICT' in error:
                # For '-i' attribute see http://stackoverflow.com/q/5827944/811740
                git_commit_cmd = git.commit.bake(allow_empty=True,
                                                 allow_empty_message=True,
                                                 m=_('Merged with conflict'),
                                                 i=True,
                                                 **kwargs)
                git_commit_cmd('--', *paths_to_commit)
                raise Page.EditionConflict(
                    _('Automatic merge failed. Please, fix the conflict and save the page.'
                      ))
            else:
                raise
        return there_were_changes
コード例 #5
0
 def test_link_crossref(self):
     html = Page.preview('reStructuredText', ('a crossref_\n\n'
                                              '.. _crossref:\n\n'
                                              'the crossref target'))
     self.assertEqual(html,
                      ('\n    <p>a <a href="#crossref">crossref</a></p>'
                       '\n    <p id="crossref">the crossref target</p>\n'))
コード例 #6
0
ファイル: sync_waliki.py プロジェクト: cmacmackin/waliki
    def handle(self, *args, **options):
        extensions = [ext.strip() for ext in options['extensions'].split(',')]
        ignored_dirs = [d.strip() for d in options['ignored_dirs'].split(',')]
        for root, dirs, files in os.walk(WALIKI_DATA_DIR):
            [dirs.remove(d) for d in ignored_dirs if d in dirs]
            for filename in files:
                if os.path.splitext(filename)[1] not in extensions:
                    continue
                path = os.path.join(root.replace(WALIKI_DATA_DIR, ''),
                                    filename).strip('/')

                if not Page.objects.filter(path=path).exists():
                    page = Page.from_path(path)
                    self.stdout.write('Created page %s for %s' %
                                      (page.get_absolute_url(), path))

        # Deleted pages?
        for page in Page.objects.all():
            if not os.path.exists(page.abspath):
                self.stdout.write('Deleted page %s (missing %s)' %
                                  (page.get_absolute_url(), page.path))
                page.delete()

        if Attachment:

            class FakeAttachment(object):
                def __init__(self, page):
                    self.page = page

            for page in Page.objects.all():
                path = os.path.join(settings.MEDIA_ROOT,
                                    WALIKI_UPLOAD_TO(FakeAttachment(page), ''))
                if not os.path.exists(path):
                    continue
                for filename in os.listdir(path):
                    if not os.path.isfile(os.path.join(path, filename)):
                        continue
                    file = WALIKI_UPLOAD_TO(FakeAttachment(page), filename)
                    if page.attachments.filter(file=file):
                        continue
                    attachment = Attachment.objects.create(page=page,
                                                           file=file,
                                                           filename=filename)
                    self.stdout.write('Created attachment %s for %s' %
                                      (attachment, page.slug))

            for attachment in Attachment.objects.all():
                if not os.path.exists(
                        os.path.join(settings.MEDIA_ROOT,
                                     attachment.file.name)):
                    self.stdout.write(
                        'Missing %s from %s. Deleted attachment object' %
                        (attachment, attachment.page.slug))
                    attachment.delete()
コード例 #7
0
ファイル: views.py プロジェクト: JuloWaks/waliki
def version(request, slug, version):
    page = get_object_or_404(Page, slug=slug)
    content = Git().version(page, version)
    if not content:
        raise Http404
    form = PageForm(instance=page, initial={'message': _('Restored version @%s') % version, 'raw': content},
                    is_hidden=True)
    content = Page.preview(page.markup, content)
    return render(request, 'waliki/version.html', {'page': page,
                                                   'content': content,
                                                   'slug': slug,
                                                   'version': version,
                                                   'form': form})
コード例 #8
0
ファイル: views.py プロジェクト: felsen/waliki
def version(request, slug, version, raw=False):
    page = get_object_or_404(Page, slug=slug)
    content = Git().version(page, version)
    if not content:
        raise Http404
    form = PageForm(instance=page, initial={'message': _('Restored version @%s') % version, 'raw': content},
                    is_hidden=True)

    if raw:
        return HttpResponse(content, content_type='text/plain; charset=utf-8')

    content = Page.preview(page.markup, content)
    return render(request, 'waliki/version.html', {'page': page,
                                                   'content': content,
                                                   'slug': slug,
                                                   'version': version,
                                                   'form': form})
コード例 #9
0
ファイル: sync_waliki.py プロジェクト: BrunoMoreno/waliki
    def handle(self, *args, **options):
        extensions = [ext.strip() for ext in options["extensions"].split(",")]
        ignored_dirs = [d.strip() for d in options["ignored_dirs"].split(",")]
        for root, dirs, files in os.walk(WALIKI_DATA_DIR):
            [dirs.remove(d) for d in ignored_dirs if d in dirs]
            for filename in files:
                if os.path.splitext(filename)[1] not in extensions:
                    continue
                path = os.path.join(root.replace(WALIKI_DATA_DIR, ""), filename).strip("/")

                if not Page.objects.filter(path=path).exists():
                    page = Page.from_path(path)
                    self.stdout.write("Created page %s for %s" % (page.get_absolute_url(), path))

        # Deleted pages?
        for page in Page.objects.all():
            if not os.path.exists(page.abspath):
                self.stdout.write("Deleted page %s (missing %s)" % (page.get_absolute_url(), page.path))
                page.delete()

        if Attachment:

            class FakeAttachment(object):
                def __init__(self, page):
                    self.page = page

            for page in Page.objects.all():
                path = os.path.join(settings.MEDIA_ROOT, WALIKI_UPLOAD_TO(FakeAttachment(page), ""))
                if not os.path.exists(path):
                    continue
                for filename in os.listdir(path):
                    if not os.path.isfile(os.path.join(path, filename)):
                        continue
                    file = WALIKI_UPLOAD_TO(FakeAttachment(page), filename)
                    if page.attachments.filter(file=file):
                        continue
                    attachment = Attachment.objects.create(page=page, file=file, filename=filename)
                    self.stdout.write("Created attachment %s for %s" % (attachment, page.slug))

            for attachment in Attachment.objects.all():
                if not os.path.exists(os.path.join(settings.MEDIA_ROOT, attachment.file.name)):
                    self.stdout.write(
                        "Missing %s from %s. Deleted attachment object" % (attachment, attachment.page.slug)
                    )
                    attachment.delete()
コード例 #10
0
ファイル: sync_waliki.py プロジェクト: JuloWaks/waliki
    def handle(self, *args, **options):
        extensions = [ext.strip() for ext in options['extensions'].split(',')]
        ignored_dirs = [d.strip() for d in options['ignored_dirs'].split(',')]
        for root, dirs, files in os.walk(WALIKI_DATA_DIR):
            [dirs.remove(d) for d in ignored_dirs if d in dirs]
            for filename in files:
                if os.path.splitext(filename)[1] not in extensions:
                    continue
                path = os.path.join(root.replace(WALIKI_DATA_DIR, ''), filename).strip('/')

                if not Page.objects.filter(path=path).exists():
                    page = Page.from_path(path)
                    self.stdout.write('Created page %s for %s' % (page.get_absolute_url(), path))

        for page in Page.objects.all():
            if not os.path.exists(page.abspath):
                self.stdout.write('Deleted page %s (missing %s)' % (page.get_absolute_url(), page.path))
                page.delete()
コード例 #11
0
ファイル: views.py プロジェクト: rizotas/waliki
def version(request, slug, version, raw=False):
    page = get_object_or_404(Page, slug=slug)
    content = Git().version(page, version)

    form = PageForm(instance=page, initial={'message': _('Restored version @%s') % version, 'raw': content},
                    is_hidden=True)

    if raw:
        return HttpResponse(json.dumps(content), content_type='application/json')

    if content["raw"]:
        content = Page.preview(page.markup, content["raw"])
    else:
        content = ''
    return render(request, 'waliki/version.html', {'page': page,
                                                   'content': content,
                                                   'slug': slug,
                                                   'version': version,
                                                   'form': form})
コード例 #12
0
ファイル: views.py プロジェクト: leliel12/waliki
def version(request, slug, version):
    page = get_object_or_404(Page, slug=slug)
    content = Git().version(page, version)
    if not content:
        raise Http404
    form = PageForm(instance=page,
                    initial={
                        'message': 'Restored version @%s' % version,
                        'raw': content
                    },
                    is_hidden=True)
    content = Page.preview(page.markup, content)
    return render(
        request, 'waliki/version.html', {
            'page': page,
            'content': content,
            'slug': slug,
            'version': version,
            'form': form
        })
コード例 #13
0
ファイル: test_models.py プロジェクト: BrunoMoreno/waliki
 def test_preview(self):
     self.assertEqual(Page.preview('reStructuredText', rst), rst_html)
コード例 #14
0
ファイル: test_models.py プロジェクト: BrunoMoreno/waliki
 def test_slug_strip_slashes(self):
     page = Page(slug='/some/slug/')
     page.save()
     self.assertEqual(page.slug, 'some/slug')
コード例 #15
0
ファイル: test_models.py プロジェクト: BrunoMoreno/waliki
 def test_path_populated_from_slug_if_not_given(self):
     page = Page(slug='some/slug')
     page.save()
     self.assertEqual(page.path, 'some/slug.rst')
コード例 #16
0
ファイル: test_models.py プロジェクト: mgaitan/waliki
 def test_link_indirect(self):
     html = Page.preview('reStructuredText', 'a text_\n\n.. _text: link_')
     self.assertEqual(html, '\n    <p>a <a href="/link">text</a></p>\n')
コード例 #17
0
 def test_link_explicit(self):
     html = Page.preview('reStructuredText', 'a link_')
     self.assertEqual(html, '\n    <p>a <a href="/link">link</a></p>\n')
コード例 #18
0
ファイル: test_models.py プロジェクト: mgaitan/waliki
 def test_link_invalid_slug(self):
     html = Page.preview('reStructuredText', '`***`_')
     self.assertIn('problematic', html)
コード例 #19
0
ファイル: test_models.py プロジェクト: BrunoMoreno/waliki
 def test_preview(self):
     self.assertEqual(Page.preview('Markdown', md), md_html)
コード例 #20
0
ファイル: test_models.py プロジェクト: felsen/waliki
 def test_preview(self):
     self.assertEqual(Page.preview('reStructuredText', rst), rst_html)
コード例 #21
0
ファイル: test_models.py プロジェクト: felsen/waliki
 def test_path_populated_from_slug_if_not_given(self):
     page = Page(slug='some/slug')
     page.save()
     self.assertEqual(page.path, 'some/slug.rst')
コード例 #22
0
ファイル: test_models.py プロジェクト: mgaitan/waliki
 def test_link_crossref(self):
     html = Page.preview('reStructuredText', ('a crossref_\n\n'
                                              '.. _crossref:\n\n'
                                              'the crossref target'))
     self.assertEqual(html, ('\n    <p>a <a href="#crossref">crossref</a></p>'
                             '\n    <p id="crossref">the crossref target</p>\n'))
コード例 #23
0
 def test_link_indirect_embedded(self):
     html = Page.preview('reStructuredText', ('a `long text <meep_>`_\n\n'
                                              '.. _meep: link_'))
     self.assertEqual(html,
                      '\n    <p>a <a href="/link">long text</a></p>\n')
コード例 #24
0
 def test_link_indirect_anonymous(self):
     html = Page.preview('reStructuredText', 'a `long text`__\n\n__ link_')
     self.assertEqual(html,
                      '\n    <p>a <a href="/link">long text</a></p>\n')
コード例 #25
0
 def test_link_indirect(self):
     html = Page.preview('reStructuredText', 'a text_\n\n.. _text: link_')
     self.assertEqual(html, '\n    <p>a <a href="/link">text</a></p>\n')
コード例 #26
0
ファイル: test_models.py プロジェクト: BrunoMoreno/waliki
 def test_link_explicit(self):
     with mock.patch('waliki._markups.get_url') as get_url:
         get_url.return_value = 'xxx'
         html = Page.preview('reStructuredText', 'a link_')
     self.assertEqual(html, '\n    <p>a <a href="xxx">link</a></p>\n')
コード例 #27
0
ファイル: test_models.py プロジェクト: BrunoMoreno/waliki
 def test_missing_text(self):
     html = Page.preview('reStructuredText', '`***`_')
     self.assertIn('problematic', html)
コード例 #28
0
ファイル: test_models.py プロジェクト: felsen/waliki
 def test_missing_text(self):
     html = Page.preview('reStructuredText', '`***`_')
     self.assertIn('problematic', html)
コード例 #29
0
ファイル: test_models.py プロジェクト: mgaitan/waliki
 def test_link_explicit(self):
     html = Page.preview('reStructuredText', 'a link_')
     self.assertEqual(html, '\n    <p>a <a href="/link">link</a></p>\n')
コード例 #30
0
ファイル: test_models.py プロジェクト: mgaitan/waliki
 def test_link_indirect_embedded(self):
     html = Page.preview('reStructuredText', ('a `long text <meep_>`_\n\n'
                                              '.. _meep: link_'))
     self.assertEqual(html, '\n    <p>a <a href="/link">long text</a></p>\n')
コード例 #31
0
ファイル: test_models.py プロジェクト: mgaitan/waliki
 def test_link_indirect_anonymous(self):
     html = Page.preview('reStructuredText', 'a `long text`__\n\n__ link_')
     self.assertEqual(html, '\n    <p>a <a href="/link">long text</a></p>\n')
コード例 #32
0
 def test_link_invalid_slug(self):
     html = Page.preview('reStructuredText', '`***`_')
     self.assertIn('problematic', html)
コード例 #33
0
ファイル: test_models.py プロジェクト: felsen/waliki
 def test_raw_empty_if_file_doesnt_exist(self):
     page = Page(path='test3.rst')
     assert not os.path.exists(page.abspath)
     self.assertEqual(page.raw, "")
コード例 #34
0
ファイル: test_models.py プロジェクト: JuloWaks/waliki
 def test_body(self):
     page = Page(path='test.rst')
     page.raw = rst
     self.assertEqual(page.body, rst_html)
コード例 #35
0
ファイル: test_models.py プロジェクト: felsen/waliki
 def test_slug_strip_slashes(self):
     page = Page(slug='/some/slug/')
     page.save()
     self.assertEqual(page.slug, 'some/slug')
コード例 #36
0
ファイル: test_models.py プロジェクト: JuloWaks/waliki
 def test_body(self):
     page = Page(path='test.md', markup='Markdown')
     page.raw = md
     self.assertEqual(page.body, md_html)
コード例 #37
0
ファイル: test_models.py プロジェクト: felsen/waliki
 def test_link_explicit(self):
     with mock.patch('waliki._markups.get_url') as get_url:
         get_url.return_value = 'xxx'
         html = Page.preview('reStructuredText', 'a link_')
     self.assertEqual(html, '\n    <p>a <a href="xxx">link</a></p>\n')
コード例 #38
0
ファイル: test_models.py プロジェクト: leliel12/waliki
 def test_body(self):
     page = Page(path='test.rst')
     page.raw = rst
     self.assertEqual(page.body, rst_html)
コード例 #39
0
ファイル: test_models.py プロジェクト: felsen/waliki
 def test_preview(self):
     self.assertEqual(Page.preview('Markdown', md), md_html)
コード例 #40
0
ファイル: test_models.py プロジェクト: leliel12/waliki
 def test_body(self):
     page = Page(path='test.md', markup='Markdown')
     page.raw = md
     self.assertEqual(page.body, md_html)