Skip to content

Commit 8e324b5

Browse files
committed
[hooks] Refactor logging hooks
1 parent eb105ce commit 8e324b5

File tree

1 file changed

+43
-38
lines changed

1 file changed

+43
-38
lines changed

src/apitist/hooks.py

Lines changed: 43 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import dataclasses
2+
import logging
23
import types
34
from typing import Type
45

@@ -12,75 +13,79 @@
1213
from .requests import PreparedRequestHook, RequestHook, ResponseHook
1314

1415

15-
class RequestDebugLoggingHook(RequestHook):
16-
formatter = "Request {req.method} {req.url} {req.data}"
16+
class BaseLogging:
17+
formatter = None
18+
logging_level = logging.NOTSET
1719

18-
def run(self, request: Request) -> Request:
20+
def get_formatter(self, data):
1921
formatter = self.formatter
20-
if request.name:
21-
formatter = self.formatter.replace("req.url", "req.name", 1)
22-
Logging.logger.debug(formatter.format(req=request))
22+
if getattr(data, "name"):
23+
formatter = self.formatter.replace("data.url", "data.name", 1)
24+
return formatter
25+
26+
def log(self, data):
27+
Logging.logger.log(
28+
self.logging_level, self.get_formatter(data).format(data=data)
29+
)
30+
31+
32+
class RequestDebugLoggingHook(RequestHook, BaseLogging):
33+
formatter = "Request {data.method} {data.url} {data.data}"
34+
logging_level = logging.DEBUG
35+
36+
def run(self, request: Request) -> Request:
37+
self.log(request)
2338
return request
2439

2540

26-
class RequestInfoLoggingHook(RequestHook):
27-
formatter = "Request {req.method} {req.url} {req.data}"
41+
class RequestInfoLoggingHook(RequestHook, BaseLogging):
42+
formatter = "Request {data.method} {data.url} {data.data}"
43+
logging_level = logging.INFO
2844

2945
def run(self, request: Request) -> Request:
30-
formatter = self.formatter
31-
if request.name:
32-
formatter = self.formatter.replace("req.url", "req.name", 1)
33-
Logging.logger.info(formatter.format(req=request))
46+
self.log(request)
3447
return request
3548

3649

37-
class PrepRequestDebugLoggingHook(PreparedRequestHook):
38-
formatter = "Request {req.method} {req.url} {req.body}"
50+
class PrepRequestDebugLoggingHook(PreparedRequestHook, BaseLogging):
51+
formatter = "Request {data.method} {data.url} {data.body}"
52+
logging_level = logging.DEBUG
3953

4054
def run(self, request: PreparedRequest) -> PreparedRequest:
41-
formatter = self.formatter
42-
if request.name:
43-
formatter = self.formatter.replace("req.url", "req.name", 1)
44-
Logging.logger.debug(formatter.format(req=request))
55+
self.log(request)
4556
return request
4657

4758

48-
class PrepRequestInfoLoggingHook(PreparedRequestHook):
49-
formatter = "Request {req.method} {req.url} {req.body}"
59+
class PrepRequestInfoLoggingHook(PreparedRequestHook, BaseLogging):
60+
formatter = "Request {data.method} {data.url} {data.body}"
61+
logging_level = logging.INFO
5062

5163
def run(self, request: PreparedRequest) -> PreparedRequest:
52-
formatter = self.formatter
53-
if request.name:
54-
formatter = self.formatter.replace("req.url", "req.name", 1)
55-
Logging.logger.info(formatter.format(req=request))
64+
self.log(request)
5665
return request
5766

5867

59-
class ResponseDebugLoggingHook(ResponseHook):
68+
class ResponseDebugLoggingHook(ResponseHook, BaseLogging):
6069
formatter = (
61-
"Response {res.status_code} {res.request.method} "
62-
"{res.url} {res.content}"
70+
"Response {data.status_code} {data.request.method} "
71+
"{data.url} {data.content}"
6372
)
73+
logging_level = logging.DEBUG
6474

6575
def run(self, response: Response) -> Response:
66-
formatter = self.formatter
67-
if response.name:
68-
formatter = self.formatter.replace("res.url", "res.name", 1)
69-
Logging.logger.debug(formatter.format(res=response))
76+
self.log(response)
7077
return response
7178

7279

73-
class ResponseInfoLoggingHook(ResponseHook):
80+
class ResponseInfoLoggingHook(ResponseHook, BaseLogging):
7481
formatter = (
75-
"Response {res.status_code} {res.request.method} "
76-
"{res.url} {res.content}"
82+
"Response {data.status_code} {data.request.method} "
83+
"{data.url} {data.content}"
7784
)
85+
logging_level = logging.INFO
7886

7987
def run(self, response: Response) -> Response:
80-
formatter = self.formatter
81-
if response.name:
82-
formatter = self.formatter.replace("res.url", "res.name", 1)
83-
Logging.logger.info(formatter.format(res=response))
88+
self.log(response)
8489
return response
8590

8691

0 commit comments

Comments
 (0)