Skip to content

Commit ac68fce

Browse files
authored
Merge pull request #116 from rednikisfun/fix-90-fastapi-client-none
fix: handle missing FastAPI request client
2 parents 9dc550d + e6d236b commit ac68fce

2 files changed

Lines changed: 25 additions & 2 deletions

File tree

json_logging/framework/fastapi/implementation.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,14 @@ def get_method(self, request: starlette.requests.Request):
111111
return request.method
112112

113113
def get_remote_ip(self, request: starlette.requests.Request):
114-
return request.client.host
114+
if request.client is not None:
115+
return request.client.host
116+
return json_logging.EMPTY_VALUE
115117

116118
def get_remote_port(self, request: starlette.requests.Request):
117-
return request.client.port
119+
if request.client is not None:
120+
return request.client.port
121+
return json_logging.EMPTY_VALUE
118122

119123

120124
class FastAPIResponseInfoExtractor(BaseResponseInfoExtractor):

tests/test_fastapi.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,3 +215,22 @@ def test_excluded_from_request_instrumentation(client_and_log_handler):
215215

216216
assert response.status_code == 200
217217
assert len(handler.messages) == 0
218+
219+
220+
def test_request_info_extractor_handles_missing_client():
221+
"""Test if missing request client information falls back to empty values"""
222+
import json_logging
223+
from json_logging.framework.fastapi.implementation import FastAPIRequestInfoExtractor
224+
225+
request = fastapi.Request({
226+
"type": "http",
227+
"method": "GET",
228+
"path": "/",
229+
"headers": [],
230+
"query_string": b"",
231+
"client": None,
232+
})
233+
extractor = FastAPIRequestInfoExtractor()
234+
235+
assert extractor.get_remote_ip(request) == json_logging.EMPTY_VALUE
236+
assert extractor.get_remote_port(request) == json_logging.EMPTY_VALUE

0 commit comments

Comments
 (0)