class AuditMiddleware: def __init__(self, stats): self.stats = stats @classmethod def from_crawler(cls, crawler): return cls(crawler.stats) def process_request(self, request): request.headers.setdefault( "X-Crawl-Source", "demo", ) self.stats.inc_value("audit/request") return None def process_response(self, request, response): self.stats.inc_value( f"audit/status/{response.status}" ) return response