From b47f5330fd969eb6a071cc7cf7314411a1aca87a Mon Sep 17 00:00:00 2001 From: Pablo Hoffman Date: Wed, 27 Jul 2011 12:28:36 -0300 Subject: [PATCH] added fragment attribute ot Link object --- scrapy/link.py | 17 +++++++++-------- scrapy/tests/test_link.py | 39 +++++++++++++++++++++++++++------------ 2 files changed, 36 insertions(+), 20 deletions(-) diff --git a/scrapy/link.py b/scrapy/link.py index e4a25784a..0909709a6 100644 --- a/scrapy/link.py +++ b/scrapy/link.py @@ -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) diff --git a/scrapy/tests/test_link.py b/scrapy/tests/test_link.py index 32e0095e6..b0edd642d 100644 --- a/scrapy/tests/test_link.py +++ b/scrapy/tests/test_link.py @@ -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)