def test_render(self): import pform btn = pform.Button(name="test", action_name="action", title="Title", actype=pform.AC_PRIMARY) params = {} context = object() request = self.request widget = btn.bind(request, "test.", params, context) self.assertEqual( strip(widget.render().strip()), '<input type="submit" class="btn btn-primary" value="Test" id="test-test" name="test.test" title="Title">', )
def test_fields_text(self): request = self.make_request() field = self._makeOne('test') field = field.bind(request, '', 'content', {}) field.update() self.assertEqual(field.to_form('value'), 'value') self.assertEqual(field.to_field('value'), 'value') res = field.render() self.assertEqual( '<input type="text" class="text-widget" value="content" id="test" name="test" title="Test">', strip(res)) field = self._makeOne('test') field = field.bind(request, '', 'content', {'test': 'form'}) field.update() res = field.render() self.assertIn( '<input type="text" class="text-widget" value="form" id="test" name="test" title="Test">', strip(res))
def test_fields_int(self): request = self.make_request() field = self._makeOne('test') field = field.bind(request, '', 10, {}) field.update() self.assertEqual(field.to_form(10), '10') self.assertRaises(pform.Invalid, field.to_form, 'value') self.assertIs(field.to_field(''), pform.null) self.assertEqual(field.to_field('10'), 10) self.assertRaises(pform.Invalid, field.to_field, 'value') res = field.render() self.assertEqual( '<input type="text" class="int-widget" value="10" id="test" name="test" title="Test">', strip(res))
def test_fields_decimal(self): request = self.make_request() field = self._makeOne('test') field = field.bind(request, '', ['1','2','3'], {}) field.update() self.assertEqual(field.to_form(['1','2','3']), '1\n2\n3') self.assertRaises(pform.Invalid, field.to_form, 1) self.assertIs(field.to_field(''), pform.null) self.assertEqual(field.to_field('1\n2\n3'), ['1','2','3']) self.assertRaises(pform.Invalid, field.to_field, 5) res = field.render() self.assertIn( '<textarea class="textlines-widget" value="1 2 3" id="test" name="test" title="Test" rows="5" cols="40">1 2 3</textarea>', strip(res))
def _filter_comments(self, request): commenters = list() content, request = self._comments_content(request) if (not content) and (not content): return selector = etree.HTML(content) try: items = selector.xpath('//*[@class="comment"]') for item in items: print( base.strip( item.xpath('./h3/span[@class="comment-info"]/a/text()') ), self._get_num( item.xpath('./h3/span[@class="comment-info"]/span[1]/@class') ), base.strip( item.xpath('./p/text()') ), base.strip( item.xpath('./h3/span[@class="comment-vote"]/span/text()') )) commenters.append({ 'name': base.strip( item.xpath('./h3/span[@class="comment-info"]/a/text()')), 'rating': self._get_num( item.xpath('./h3/span[@class="comment-info"]/span[1]/@class') ), 'rating_time': base.strip( item.xpath('./h3/span[@class="comment-info"]/span[2]/text()') ), 'comment': base.strip( item.xpath('./p/text()') ), 'comment_vote': base.strip( item.xpath('./h3/span[@class="comment-vote"]/span/text()') ) }) self.claw_comments_num += 1 self.logger.debug('claw comment number: {}'.format(self.claw_comments_num)) time.sleep(0.5) if commenters: request['url'] = request['url'] + selector.xpath('//*[@id="paginator"]/a[@class="next"]/@href')[0] return commenters, request else: return None finally: pass
def _filter_index(self, request): content, request = self._index_content(request) selector = etree.HTML(content) try: movie_info = { 'name': base.strip( selector.xpath('//*[@id="content"]/h1/span/text()') ), 'director': base.strip( base.split_pop(selector.xpath('//*[@id="info"]/span[1]')[0].xpath('string(.)'), char='/') ), 'writer': base.strip( base.split_pop(selector.xpath('//*[@id="info"]/span[2]')[0].xpath('string(.)'), char='/') ), 'actor': base.strip( base.split_pop(selector.xpath('//*[@id="info"]/span[3]')[0].xpath('string(.)'), char='/') ), 'type': base.strip( selector.xpath('//*[@id="info"]/span[starts-with(@property, "v:genre")]/text()') ), # area and language ??? 'release_date': base.strip( selector.xpath('//*[@id="info"]/span[starts-with(@property, "v:initialReleaseDate")]/text()') ), 'runtime': base.strip( selector.xpath('//*[@id="info"]/span[starts-with(@property, "v:runtime")]/text()') ), 'comments': list(), } # value is list self.max_comments = int( self._get_num( selector.xpath('//*[@id="comments-section"]/div[1]/h2/span/a/text()') )[0]) if movie_info: self.logger.debug(movie_info) comments_url = selector.xpath('//*[@id="comments-section"]/div[1]/h2/span/a/@href')[0].split('?')[0] request['headers']['Host'] = comments_url.split('/')[2] request['url'] = comments_url return movie_info, request else: self.logger.warning('{} {} Movie information is empty'.format(request['url'], request['params'])) return None except: self.logger.warning('{} {} Filter failed'.format(request['url'], request['params'])) return None