コード例 #1
0
ファイル: wiki_page.py プロジェクト: jangxyz/ecogwiki
    def validate_new_content(self, base_revision, new_body, user):
        # check metadata
        new_md = PageOperationMixin.parse_metadata(new_body)

        ## prevent self-revoke
        acl_r = new_md.get('read', '')
        acl_r = acl_r.split(',') if acl_r else []
        acl_w = new_md.get('write', '')
        acl_w = acl_w.split(',') if acl_w else []

        if not self.can_read(user, acl_r=acl_r, acl_w=acl_w):
            raise ValueError('Cannot restrict your permission')
        if not self.can_write(user, acl_r=acl_r, acl_w=acl_w):
            raise ValueError('Cannot restrict your permission')

        ## prevent circular-redirection
        try:
            WikiPage._follow_redirect(self, new_md.get(u'redirect'))
        except ValueError as e:
            raise e

        # check data
        new_data = PageOperationMixin.parse_data(self.title, new_body, new_md['schema'])
        if any(type(value) == schema.InvalidProperty for value in new_data.values()):
            raise ValueError('Invalid schema data')

        # check revision
        if self.revision < base_revision:
            raise ValueError('Invalid revision number: %d' % base_revision)

        # check headings
        if not TocGenerator(md.convert(new_body)).validate():
            raise ValueError("Duplicate paths not allowed")

        return new_data, new_md
コード例 #2
0
    def validate_new_content(self, base_revision, new_body, user):
        # check metadata
        new_md = PageOperationMixin.parse_metadata(new_body)

        ## prevent self-revoke
        acl_r = new_md.get('read', '')
        acl_r = acl_r.split(',') if acl_r else []
        acl_w = new_md.get('write', '')
        acl_w = acl_w.split(',') if acl_w else []

        if not self.can_read(user, acl_r=acl_r, acl_w=acl_w):
            raise ValueError('Cannot restrict your permission')
        if not self.can_write(user, acl_r=acl_r, acl_w=acl_w):
            raise ValueError('Cannot restrict your permission')

        ## prevent circular-redirection
        try:
            WikiPage._follow_redirect(self, new_md.get(u'redirect'))
        except ValueError as e:
            raise e

        # check data
        new_data = PageOperationMixin.parse_data(self.title, new_body,
                                                 new_md['schema'])

        if any(
                type(value) == schema.InvalidProperty
                for value in new_data.values()):
            invalid_keys = [
                key for key, value in new_data.iteritems()
                if type(value) == schema.InvalidProperty
            ]
            raise ValueError('Invalid schema data: %s' %
                             ', '.join(invalid_keys))

        # check revision
        if self.revision < base_revision:
            raise ValueError('Invalid revision number: %d' % base_revision)

        # check headings
        invalid_reason = TocGenerator(md.convert(new_body)).is_invalid()
        if invalid_reason:
            raise ValueError(invalid_reason)

        return new_data, new_md
コード例 #3
0
ファイル: test_schema.py プロジェクト: Sunsoo/incodom
 def test_multiple_authors(self):
     data = PageOperationMixin.parse_data(u'Hello', u'[[author::AK]] and [[author::TK]]', u'Book')
     self.assertEqual([u'AK', u'TK'], [v.pvalue for v in data['author']])
コード例 #4
0
ファイル: test_schema.py プロジェクト: Sunsoo/incodom
 def test_author_and_isbn(self):
     data = PageOperationMixin.parse_data(u'Hello', u'[[author::AK]]\n{{isbn::1234567890}}', u'Book')
     self.assertEqual(u'AK', data['author'].pvalue)
     self.assertEqual(u'1234567890', data['isbn'].pvalue)
コード例 #5
0
ファイル: test_schema.py プロジェクト: Sunsoo/incodom
 def test_no_data(self):
     data = PageOperationMixin.parse_data(u'Hello', u'Hello')
     self.assertEqual(['articleBody', 'name', 'schema'], data.keys())
     self.assertEqual(u'Hello', data['name'].pvalue)
     self.assertEqual(u'Thing/CreativeWork/Article/', data['schema'].pvalue)
     self.assertEqual(u'Hello', data['articleBody'].pvalue)
コード例 #6
0
 def test_multiple_authors(self):
     data = PageOperationMixin.parse_data(
         u'Hello', u'[[author::AK]] and [[author::TK]]', u'Book')
     self.assertEqual([u'AK', u'TK'], [v.pvalue for v in data['author']])
コード例 #7
0
 def test_author_and_isbn(self):
     data = PageOperationMixin.parse_data(
         u'Hello', u'[[author::AK]]\n{{isbn::1234567890}}', u'Book')
     self.assertEqual(u'AK', data['author'].pvalue)
     self.assertEqual(u'1234567890', data['isbn'].pvalue)
コード例 #8
0
 def test_no_data(self):
     data = PageOperationMixin.parse_data(u'Hello', u'Hello')
     self.assertEqual(['articleBody', 'name', 'schema'], data.keys())
     self.assertEqual(u'Hello', data['name'].pvalue)
     self.assertEqual(u'Thing/CreativeWork/Article/', data['schema'].pvalue)
     self.assertEqual(u'Hello', data['articleBody'].pvalue)