def _writeFromPUT( self, body ): headers = {} headers, body = parseHeadersBody(body, headers) lines = body.split('\n') self.edit( lines[0] ) headers['Format'] = self.URL_FORMAT new_subject = keywordsplitter(headers) headers['Subject'] = new_subject or self.Subject() new_contrib = contributorsplitter(headers) headers['Contributors'] = new_contrib or self.Contributors() haveheader = headers.has_key for key, value in self.getMetadataHeaders(): if not haveheader(key): headers[key] = value self._editMetadata(title=headers['Title'], subject=headers['Subject'], description=headers['Description'], contributors=headers['Contributors'], effective_date=headers['Effective_date'], expiration_date=headers['Expiration_date'], format=headers['Format'], language=headers['Language'], rights=headers['Rights'], )
def test_NoBody(self): headers, body = parseHeadersBody('%s\n\n' % self.COMMON_HEADERS) assert (len(headers) == 2, '%d!' % len(headers)) assert ('Author' in headers.keys()) assert (headers['Author'] == 'Tres Seaver') assert ('Title' in headers.keys()) assert (len(body) == 0, '%d!' % len(body))
def test_NoBody( self ): headers, body = parseHeadersBody( '%s\n\n' % self.COMMON_HEADERS ) assert( len( headers ) == 2, '%d!' % len( headers ) ) assert( 'Author' in headers.keys() ) assert( headers[ 'Author' ] == 'Tres Seaver' ) assert( 'Title' in headers.keys() ) assert( len( body ) == 0, '%d!' % len( body ) )
def test_parseHeadersBody_body_malformed_terminator(self): from Products.CMFDefault.utils import parseHeadersBody headers, body = parseHeadersBody('%s\n \n%s' % (self.COMMON_HEADERS, self.TEST_BODY)) self.assertEqual(len(headers), 2) self.assertEqual(body, self.TEST_BODY)
def test_Continuation(self): headers, body = parseHeadersBody( '%s\n%s\n\n' % (self.COMMON_HEADERS, self.MULTILINE_DESCRIPTION)) assert (len(headers) == 3, '%d!' % len(headers)) assert ('Description' in headers.keys()) desc_len = len(headers['Description'].split('\n')) assert (desc_len == 2, '%d!' % desc_len) assert (len(body) == 0, '%d!' % len(body))
def test_Body( self ): headers, body = parseHeadersBody( '%s\n\n%s' % ( self.COMMON_HEADERS , self.TEST_BODY ) ) assert( len( headers ) == 2, '%d!' % len( headers ) ) assert( body == self.TEST_BODY )
def test_Preload(self): preloaded = {'Author': 'xxx', 'text_format': 'structured_text'} headers, body = parseHeadersBody( '%s\n%s\n\n%s' % (self.COMMON_HEADERS, self.MULTILINE_DESCRIPTION, self.TEST_BODY), preloaded) assert (len(headers) == 3, '%d!' % len(headers)) assert (preloaded['Author'] != headers['Author']) assert (preloaded['text_format'] == headers['text_format'])
def test_parseHeadersBody_no_body( self ): from Products.CMFDefault.utils import parseHeadersBody headers, body = parseHeadersBody( '%s\n\n' % self.COMMON_HEADERS ) self.assertEqual( len( headers ), 2 ) self.failUnless( 'Author' in headers.keys() ) self.assertEqual( headers[ 'Author' ], 'Tres Seaver' ) self.failUnless( 'Title' in headers.keys() ) self.assertEqual( len( body ), 0 )
def test_parseHeadersBody_no_body(self): from Products.CMFDefault.utils import parseHeadersBody headers, body = parseHeadersBody('%s\n\n' % self.COMMON_HEADERS) self.assertEqual(len(headers), 2) self.failUnless('Author' in headers.keys()) self.assertEqual(headers['Author'], 'Tres Seaver') self.failUnless('Title' in headers.keys()) self.assertEqual(len(body), 0)
def test_NoBody( self ): from Products.CMFDefault.utils import parseHeadersBody headers, body = parseHeadersBody( '%s\n\n' % self.COMMON_HEADERS ) assert( len( headers ) == 2, '%d!' % len( headers ) ) assert( 'Author' in headers.keys() ) assert( headers[ 'Author' ] == 'Tres Seaver' ) assert( 'Title' in headers.keys() ) assert( len( body ) == 0, '%d!' % len( body ) )
def test_Body( self ): from Products.CMFDefault.utils import parseHeadersBody headers, body = parseHeadersBody( '%s\n\n%s' % ( self.COMMON_HEADERS , self.TEST_BODY ) ) assert( len( headers ) == 2, '%d!' % len( headers ) ) assert( body == self.TEST_BODY )
def test_parseHeadersBody_body( self ): from Products.CMFDefault.utils import parseHeadersBody headers, body = parseHeadersBody( '%s\n\n%s' % ( self.COMMON_HEADERS , self.TEST_BODY ) ) self.assertEqual( len( headers ), 2 ) self.assertEqual( body, self.TEST_BODY )
def test_parseHeadersBody_continuation(self): from Products.CMFDefault.utils import parseHeadersBody headers, body = parseHeadersBody( '%s\n%s\n\n' % (self.COMMON_HEADERS, self.MULTILINE_DESCRIPTION)) self.assertEqual(len(headers), 3) self.failUnless('Description' in headers.keys()) desc_len = len(headers['Description'].split('\n')) self.assertEqual(desc_len, 2) self.assertEqual(len(body), 0)
def _writeFromPUT(self, body): headers, body = parseHeadersBody(body) lines = body.split('\n') self.edit(lines[0]) headers['Format'] = self.URL_FORMAT new_subject = keywordsplitter(headers) headers['Subject'] = new_subject or self.Subject() new_contrib = contributorsplitter(headers) headers['Contributors'] = new_contrib or self.Contributors() headers = dict((k.lower(), v) for k, v in headers.iteritems()) self._editMetadata(**headers)
def test_parseHeadersBody_preload(self): from Products.CMFDefault.utils import parseHeadersBody preloaded = {'Author': 'xxx', 'text_format': 'structured_text'} headers, body = parseHeadersBody( '%s\n%s\n\n%s' % (self.COMMON_HEADERS, self.MULTILINE_DESCRIPTION, self.TEST_BODY), preloaded) self.assertEqual(len(headers), 4) self.assertNotEqual(preloaded['Author'], headers['Author']) self.assertEqual(preloaded['text_format'], headers['text_format'])
def test_Continuation( self ): headers, body = parseHeadersBody( '%s\n%s\n\n' % ( self.COMMON_HEADERS , self.MULTILINE_DESCRIPTION ) ) assert( len( headers ) == 3, '%d!' % len( headers ) ) assert( 'Description' in headers.keys() ) desc_len = len( headers[ 'Description' ].split('\n') ) assert( desc_len == 2, '%d!' % desc_len ) assert( len( body ) == 0, '%d!' % len( body ) )
def test_Preload( self ): preloaded = { 'Author' : 'xxx', 'text_format' : 'structured_text' } headers, body = parseHeadersBody( '%s\n%s\n\n%s' % ( self.COMMON_HEADERS , self.MULTILINE_DESCRIPTION , self.TEST_BODY ) , preloaded ) assert( len( headers ) == 3, '%d!' % len( headers ) ) assert( preloaded[ 'Author' ] != headers[ 'Author' ] ) assert( preloaded[ 'text_format' ] == headers[ 'text_format' ] )
def test_parseHeadersBody_continuation( self ): from Products.CMFDefault.utils import parseHeadersBody headers, body = parseHeadersBody( '%s\n%s\n\n' % ( self.COMMON_HEADERS , self.MULTILINE_DESCRIPTION ) ) self.assertEqual( len( headers ), 3 ) self.failUnless( 'Description' in headers.keys() ) desc_len = len( headers[ 'Description' ].split('\n') ) self.assertEqual( desc_len, 2 ) self.assertEqual( len( body ), 0 )
def test_parseHeadersBody_embedded_blank_line(self): from Products.CMFDefault.utils import parseHeadersBody headers, body = parseHeadersBody( '%s\n%s\n\n%s' % (self.COMMON_HEADERS, self.MULTIPARAGRAPH_DESCRIPTION, self.TEST_BODY)) self.assertEqual(len(headers), 3) self.failUnless('Description' in headers.keys()) desc_lines = headers['Description'].split('\n') desc_len = len(desc_lines) self.assertEqual(desc_len, 3, desc_lines) self.assertEqual(desc_lines[1], ' ') self.assertEqual(body, self.TEST_BODY)
def test_parseHeadersBody_preload( self ): from Products.CMFDefault.utils import parseHeadersBody preloaded = { 'Author' : 'xxx', 'text_format' : 'structured_text' } headers, body = parseHeadersBody( '%s\n%s\n\n%s' % ( self.COMMON_HEADERS , self.MULTILINE_DESCRIPTION , self.TEST_BODY ) , preloaded ) self.assertEqual( len( headers ), 4 ) self.assertNotEqual( preloaded[ 'Author' ], headers[ 'Author' ] ) self.assertEqual( preloaded[ 'text_format' ], headers[ 'text_format' ] )
def handleText(self, text, format=None): """ Handles the raw text, returning headers, body, format """ headers = {} if not format: format = self.guessFormat(text) if format == 'text/html': parser = SimpleHTMLParser() parser.feed(text) headers.update(parser.metatags) if parser.title: headers['title'] = parser.title body = bodyfinder(text) else: headers, body = parseHeadersBody(text, headers) return headers, text, format
def handleText(self, text, format=None): """ Handles the raw text, returning headers, body, cooked, format """ headers = {} if format == 'html': parser = SimpleHTMLParser() parser.feed(text) headers.update(parser.metatags) if parser.title: headers['Title'] = parser.title bodyfound = bodyfinder(text) if bodyfound: body = bodyfound else: headers, body = parseHeadersBody(text, headers) return headers, body, format
def test_parseHeadersBody_embedded_blank_line( self ): from Products.CMFDefault.utils import parseHeadersBody headers, body = parseHeadersBody( '%s\n%s\n\n%s' % ( self.COMMON_HEADERS , self.MULTIPARAGRAPH_DESCRIPTION , self.TEST_BODY ) ) self.assertEqual( len( headers ), 3 ) self.failUnless( 'Description' in headers.keys() ) desc_lines = headers[ 'Description' ].split('\n') desc_len = len( desc_lines ) self.assertEqual( desc_len, 3, desc_lines ) self.assertEqual( desc_lines[1], ' ' ) self.assertEqual( body, self.TEST_BODY )