mirror of https://github.com/scrapy/scrapy.git
added fragment attribute ot Link object
This commit is contained in:
parent
e9ca309b6d
commit
b47f5330fd
|
|
@ -6,23 +6,24 @@ its documentation in: docs/topics/link-extractors.rst
|
|||
"""
|
||||
|
||||
class Link(object):
|
||||
"""Link objects represent an extracted link by the LinkExtractor.
|
||||
At the moment, it contains just the url and link text.
|
||||
"""
|
||||
"""Link objects represent an extracted link by the LinkExtractor."""
|
||||
|
||||
__slots__ = ['url', 'text', 'nofollow']
|
||||
__slots__ = ['url', 'text', 'fragment', 'nofollow']
|
||||
|
||||
def __init__(self, url, text='', nofollow=False):
|
||||
def __init__(self, url, text='', fragment='', nofollow=False):
|
||||
self.url = url
|
||||
self.text = text
|
||||
self.fragment = fragment
|
||||
self.nofollow = nofollow
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.url == other.url and self.text == other.text and self.nofollow == other.nofollow
|
||||
return self.url == other.url and self.text == other.text and \
|
||||
self.fragment == other.fragment and self.nofollow == other.nofollow
|
||||
|
||||
def __hash__(self):
|
||||
return hash(self.url) ^ hash(self.text) ^ hash(self.nofollow)
|
||||
return hash(self.url) ^ hash(self.text) ^ hash(self.fragment) ^ hash(self.nofollow)
|
||||
|
||||
def __repr__(self):
|
||||
return 'Link(url=%r, text=%r, nofollow=%r)' % (self.url, self.text, self.nofollow)
|
||||
return 'Link(url=%r, text=%r, fragment=%r, nofollow=%r)' % \
|
||||
(self.url, self.text, self.fragment, self.nofollow)
|
||||
|
||||
|
|
|
|||
|
|
@ -4,25 +4,40 @@ from scrapy.link import Link
|
|||
|
||||
class LinkTest(unittest.TestCase):
|
||||
|
||||
def _assert_same_links(self, link1, link2):
|
||||
self.assertEqual(link1, link2)
|
||||
self.assertEqual(hash(link1), hash(link2))
|
||||
|
||||
def _assert_different_links(self, link1, link2):
|
||||
self.assertNotEqual(link1, link2)
|
||||
self.assertNotEqual(hash(link1), hash(link2))
|
||||
|
||||
def test_eq_and_hash(self):
|
||||
l1 = Link("http://www.example.com")
|
||||
l2 = Link("http://www.example.com/other")
|
||||
l3 = Link("http://www.example.com")
|
||||
|
||||
self.assertEqual(l1, l1)
|
||||
self.assertEqual(hash(l1), hash(l1))
|
||||
self.assertNotEqual(l1, l2)
|
||||
self.assertNotEqual(hash(l1), hash(l2))
|
||||
self.assertEqual(l1, l3)
|
||||
self.assertEqual(hash(l1), hash(l3))
|
||||
self._assert_same_links(l1, l1)
|
||||
self._assert_different_links(l1, l2)
|
||||
self._assert_same_links(l1, l3)
|
||||
|
||||
l4 = Link("http://www.example.com", text="test")
|
||||
l5 = Link("http://www.example.com", text="test2")
|
||||
l6 = Link("http://www.example.com", text="test")
|
||||
|
||||
self.assertEqual(l4, l4)
|
||||
self.assertEqual(hash(l4), hash(l4))
|
||||
self.assertNotEqual(l4, l5)
|
||||
self.assertNotEqual(hash(l4), hash(l5))
|
||||
self.assertEqual(l4, l6)
|
||||
self.assertEqual(hash(l4), hash(l6))
|
||||
self._assert_same_links(l4, l4)
|
||||
self._assert_different_links(l4, l5)
|
||||
self._assert_same_links(l4, l6)
|
||||
|
||||
l7 = Link("http://www.example.com", text="test", fragment='something', nofollow=False)
|
||||
l8 = Link("http://www.example.com", text="test", fragment='something', nofollow=False)
|
||||
l9 = Link("http://www.example.com", text="test", fragment='something', nofollow=True)
|
||||
l10 = Link("http://www.example.com", text="test", fragment='other', nofollow=False)
|
||||
self._assert_same_links(l7, l8)
|
||||
self._assert_different_links(l7, l9)
|
||||
self._assert_different_links(l7, l10)
|
||||
|
||||
def test_repr(self):
|
||||
l1 = Link("http://www.example.com", text="test", fragment='something', nofollow=True)
|
||||
l2 = eval(repr(l1))
|
||||
self._assert_same_links(l1, l2)
|
||||
|
|
|
|||
Loading…
Reference in New Issue