(self, settings: BaseSettings | None = None)
| 290 | |
| 291 | class RefererMiddleware(BaseSpiderMiddleware): |
| 292 | def __init__(self, settings: BaseSettings | None = None): # pylint: disable=super-init-not-called |
| 293 | self.default_policy: type[ReferrerPolicy] = DefaultReferrerPolicy |
| 294 | self.policies: dict[str, type[ReferrerPolicy]] = { |
| 295 | p.name: p |
| 296 | for p in ( |
| 297 | NoReferrerPolicy, |
| 298 | NoReferrerWhenDowngradePolicy, |
| 299 | SameOriginPolicy, |
| 300 | OriginPolicy, |
| 301 | StrictOriginPolicy, |
| 302 | OriginWhenCrossOriginPolicy, |
| 303 | StrictOriginWhenCrossOriginPolicy, |
| 304 | UnsafeUrlPolicy, |
| 305 | DefaultReferrerPolicy, |
| 306 | ) |
| 307 | } |
| 308 | # Reference: https://www.w3.org/TR/referrer-policy/#referrer-policy-empty-string |
| 309 | self.policies[""] = NoReferrerWhenDowngradePolicy |
| 310 | if settings is None: |
| 311 | return |
| 312 | setting_policies = settings.getdict("REFERRER_POLICIES") |
| 313 | for policy_name, policy_class_import_path in setting_policies.items(): |
| 314 | if policy_class_import_path is None: |
| 315 | del self.policies[policy_name] |
| 316 | else: |
| 317 | self.policies[policy_name] = load_object(policy_class_import_path) |
| 318 | settings_policy = self._load_policy_class( |
| 319 | settings.get("REFERRER_POLICY"), allow_import_path=True |
| 320 | ) |
| 321 | assert settings_policy |
| 322 | self.default_policy = settings_policy |
| 323 | |
| 324 | @classmethod |
| 325 | def from_crawler(cls, crawler: Crawler) -> Self: |
nothing calls this directly
no test coverage detected