def test_item_validation(self):
invalid_item = RssItem()
invalid_item.enclosure.url = 'http://example.com/content'
with self.assertRaisesRegexp(InvalidRssItemAttributesError, 'required attributes .*? not set'):
with CrawlerContext(**self.feed_settings) as context:
context.ipm.process_item(invalid_item, context.spider)
class NonStandardElement(ItemElement):
first_attribute = ItemElementAttribute(required=True, is_content=True)
second_attribute = ItemElementAttribute(required=True)
class NonStandardItem(RssItem):
element = NonStandardElement()
invalid_item = NonStandardItem()
with self.assertRaisesRegexp(InvalidElementValueError, 'Could not assign'):
invalid_item.element = 'valid value'
invalid_item.element.first_attribute = 'valid value'
with self.assertRaisesRegexp(InvalidRssItemAttributesError, 'required attributes .*? not set'):
with CrawlerContext(**self.feed_settings) as context:
context.ipm.process_item(invalid_item, context.spider)
class InvalidSuperItem1(ExtendableItem):
pass
class InvalidSuperItem2(ExtendableItem):
field = scrapy.Field()
class InvalidSuperItem3(ExtendableItem):
rss = scrapy.Field()
for invalid_item_cls in (InvalidSuperItem1, InvalidSuperItem2, InvalidSuperItem3):
with self.assertRaisesRegexp(InvalidRssItemError, "Item must have 'rss'"):
with CrawlerContext(**self.feed_settings) as context:
context.ipm.process_item(invalid_item_cls(), context.spider)
评论列表
文章目录