Beispiel #1
0
    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">',
        )
Beispiel #2
0
    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))
Beispiel #3
0
    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))
Beispiel #4
0
    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))
Beispiel #5
0
 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
Beispiel #6
0
 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