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
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
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']])
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)
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)
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']])
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)