Skip to content

Commit 12579b9

Browse files
committed
warning when ambiguous root arguments and minor cleanups
1 parent 26ebccd commit 12579b9

File tree

3 files changed

+21
-13
lines changed

3 files changed

+21
-13
lines changed

scrapy/linkextractors/sgml.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,10 @@ def __init__(self, allow=(), deny=(), allow_domains=(), deny_domains=(), restric
127127
def extract_links(self, response):
128128
base_url = None
129129
if self.restrict_xpaths:
130-
sel = response.selector
131130
base_url = get_base_url(response)
132131
body = u''.join(f
133132
for x in self.restrict_xpaths
134-
for f in sel.xpath(x).extract()
133+
for f in response.xpath(x).extract()
135134
).encode(response.encoding, errors='xmlcharrefreplace')
136135
else:
137136
body = response.body

scrapy/selector/unified.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,13 @@ class Selector(ParselSelector, object_ref):
3333
def __init__(self, response=None, text=None, type=None, root=None, _root=None, **kwargs):
3434
st = _st(response, type or self._default_type)
3535

36-
if root is None and _root is not None:
36+
if _root is not None:
3737
warnings.warn("Argument `_root` is deprecated, use `root` instead",
3838
ScrapyDeprecationWarning, stacklevel=2)
39-
root = _root
39+
if root is None:
40+
root = _root
41+
else:
42+
warnings.warn("Ignoring deprecated `_root` argument, using provided `root`")
4043

4144
if text is not None:
4245
response = _response_from_text(text, st)

tests/test_selector.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from scrapy.selector import Selector
99
from scrapy.selector.lxmlsel import XmlXPathSelector, HtmlXPathSelector, XPathSelector
1010
from lxml import etree
11-
from tests import mock
1211

1312

1413
class SelectorTestCase(unittest.TestCase):
@@ -39,14 +38,21 @@ def test_simple_selection(self):
3938
self.assertEqual([x.extract() for x in sel.xpath("concat(//input[@name='a']/@value, //input[@name='b']/@value)")],
4039
[u'12'])
4140

42-
@mock.patch('scrapy.selector.unified.warnings')
43-
def test_deprecated_root_argument(self, warnings):
44-
root = etree.fromstring(u'<html/>')
45-
sel = self.sscls(_root=root)
46-
self.assertIs(root, sel.root)
47-
warnings.warn.assert_called_once_with(
48-
'Argument `_root` is deprecated, use `root` instead',
49-
mock.ANY, stacklevel=2)
41+
def test_deprecated_root_argument(self):
42+
with warnings.catch_warnings(record=True) as w:
43+
root = etree.fromstring(u'<html/>')
44+
sel = self.sscls(_root=root)
45+
self.assertIs(root, sel.root)
46+
self.assertEqual(str(w[-1].message),
47+
'Argument `_root` is deprecated, use `root` instead')
48+
49+
def test_deprecated_root_argument_ambiguous(self):
50+
with warnings.catch_warnings(record=True) as w:
51+
_root = etree.fromstring(u'<xml/>')
52+
root = etree.fromstring(u'<html/>')
53+
sel = self.sscls(_root=_root, root=root)
54+
self.assertIs(root, sel.root)
55+
self.assertIn('Ignoring deprecated `_root` argument', str(w[-1].message))
5056

5157
def test_representation_slice(self):
5258
body = u"<p><input name='{}' value='\xa9'/></p>".format(50 * 'b')

0 commit comments

Comments
 (0)