From 9108ff686734118315143206c8b41fedd50cd9c5 Mon Sep 17 00:00:00 2001 From: Gitlab Tagging Bot Date: Fri, 24 Jun 2022 17:25:15 +0200 Subject: [PATCH] chore: add logging support --- pygitguardian/client.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/pygitguardian/client.py b/pygitguardian/client.py index 53767698..3b5fcd6a 100644 --- a/pygitguardian/client.py +++ b/pygitguardian/client.py @@ -1,6 +1,8 @@ +import json +import logging import platform import urllib.parse -from typing import Any, Dict, List, Optional, Union, cast +from typing import Any, Dict, List, Mapping, Optional, Union, cast from requests import Response, Session, codes @@ -28,6 +30,9 @@ class Versions: VERSIONS = Versions() +logger = logging.getLogger(__name__) + + def load_detail(resp: Response) -> Detail: """ load_detail loads a Detail from a response @@ -138,9 +143,31 @@ def request( if extra_headers else self.session.headers ) + + class HeaderLog: + """Defer turning the `headers` dict into a string unless logger really needs + it. Obfuscate any Authorization header.""" + + def __init__(self, headers: Mapping[str, Any]) -> None: + self.headers = headers + + def __str__(self) -> str: + headers = dict(self.headers) + if "Authorization" in headers: + headers["Authorization"] = "XXX" + return json.dumps(headers, indent=2, sort_keys=True) + + logger.debug( + "Sending a %s request to %s. headers=%s", method, url, HeaderLog(headers) + ) response: Response = self.session.request( method=method, url=url, timeout=self.timeout, headers=headers, **kwargs ) + logger.debug( + "Response=%d. Headers=%s", + response.status_code, + json.dumps(dict(response.headers), indent=2, sort_keys=True), + ) self.app_version = response.headers.get("X-App-Version", self.app_version) self.secrets_engine_version = response.headers.get(