Full typing for scrapy/link.py.

This commit is contained in:
Andrey Rakhmatullin 2023-08-07 00:55:40 +04:00
parent e6d919497d
commit b50268c100
1 changed files with 13 additions and 8 deletions

View File

@ -4,6 +4,7 @@ This module defines the Link object used in Link extractors.
For actual link extractors implementation see scrapy.linkextractors, or
its documentation in: docs/topics/link-extractors.rst
"""
from typing import Any
class Link:
@ -26,16 +27,20 @@ class Link:
__slots__ = ["url", "text", "fragment", "nofollow"]
def __init__(self, url, text="", fragment="", nofollow=False):
def __init__(
self, url: str, text: str = "", fragment: str = "", nofollow: bool = False
):
if not isinstance(url, str):
got = url.__class__.__name__
raise TypeError(f"Link urls must be str objects, got {got}")
self.url = url
self.text = text
self.fragment = fragment
self.nofollow = nofollow
self.url: str = url
self.text: str = text
self.fragment: str = fragment
self.nofollow: bool = nofollow
def __eq__(self, other):
def __eq__(self, other: Any) -> bool:
if not isinstance(other, Link):
raise NotImplementedError
return (
self.url == other.url
and self.text == other.text
@ -43,12 +48,12 @@ class Link:
and self.nofollow == other.nofollow
)
def __hash__(self):
def __hash__(self) -> int:
return (
hash(self.url) ^ hash(self.text) ^ hash(self.fragment) ^ hash(self.nofollow)
)
def __repr__(self):
def __repr__(self) -> str:
return (
f"Link(url={self.url!r}, text={self.text!r}, "
f"fragment={self.fragment!r}, nofollow={self.nofollow!r})"