1
0
mirror of https://github.com/scrapy/scrapy.git synced 2025-02-27 03:23:50 +00:00

Modified XPathSelectorLists: adding them should return a new XPathSelectorList

--HG--
extra : convert_revision : svn%3Ab85faa78-f9eb-468e-a121-7cced6da292c%40591
This commit is contained in:
elpolilla 2008-12-31 13:23:25 +00:00
parent 99143ff357
commit 7bd73e0c09
2 changed files with 16 additions and 1 deletions

View File

@ -4,7 +4,7 @@ import unittest
import libxml2
from scrapy.http import Response
from scrapy.xpath.selector import XmlXPathSelector, HtmlXPathSelector
from scrapy.xpath.selector import XmlXPathSelector, HtmlXPathSelector, XPathSelectorList
class XPathTestCase(unittest.TestCase):
@ -220,6 +220,15 @@ class XPathTestCase(unittest.TestCase):
u'\n ',
u'\n pff\n'])
def test_selectorlist_add(self):
'''Adding XPathSelectorLists should return another XPathSelectorList'''
hxs = HtmlXPathSelector(text='<html><body><tag1></tag1><tag2></body></html>')
xlist1 = XPathSelectorList([hxs.x('/'), hxs.x('//tag1')])
xlist2 = XPathSelectorList([hxs.x('/html')])
xlist3 = [1, 2, 3]
self.assertTrue(isinstance(xlist1 + xlist2, XPathSelectorList))
self.assertTrue(isinstance(xlist2 + xlist3, list))
if __name__ == "__main__":
unittest.main()

View File

@ -102,6 +102,12 @@ class XPathSelectorList(list):
def __getslice__(self, i, j):
return XPathSelectorList(list.__getslice__(self, i, j))
def __add__(self, other):
if isinstance(other, XPathSelectorList):
return XPathSelectorList(super(XPathSelectorList, self).__add__(other))
else:
return super(XPathSelectorList, self).__add__(other)
def x(self, xpath):
"""Perform the given XPath query on each XPathSelector of the list and
return a new (flattened) XPathSelectorList of the results"""