| 61 | |
| 62 | class Rule: |
| 63 | def __init__( |
| 64 | self, |
| 65 | link_extractor: LinkExtractor | None = None, |
| 66 | callback: CallbackT | str | None = None, |
| 67 | cb_kwargs: dict[str, Any] | None = None, |
| 68 | follow: bool | None = None, |
| 69 | process_links: ProcessLinksT | str | None = None, |
| 70 | process_request: ProcessRequestT | str | None = None, |
| 71 | errback: Callable[[Failure], Any] | str | None = None, |
| 72 | ): |
| 73 | self.link_extractor: LinkExtractor = link_extractor or _default_link_extractor |
| 74 | self.callback: CallbackT | str | None = callback |
| 75 | self.errback: Callable[[Failure], Any] | str | None = errback |
| 76 | self.cb_kwargs: dict[str, Any] = cb_kwargs or {} |
| 77 | self.process_links: ProcessLinksT | str = process_links or _identity |
| 78 | self.process_request: ProcessRequestT | str = ( |
| 79 | process_request or _identity_process_request |
| 80 | ) |
| 81 | self.follow: bool = follow if follow is not None else not callback |
| 82 | |
| 83 | def _compile(self, spider: Spider) -> None: |
| 84 | # this replaces method names with methods and we can't express this in type hints |