Skip to content

Commit ad73911

Browse files
committed
support custom default in FlaskRequestCorrelationIdLogging.get_request_id
1 parent 87ecfae commit ad73911

File tree

4 files changed

+39
-6
lines changed

4 files changed

+39
-6
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,14 @@ and start a new "In Progress" section above it.
2121

2222
## In progress
2323

24+
25+
## 0.122.0
26+
2427
- `load_collection`: more consistent cube extent handling when a buffer is applied. ([#334](https://github.com/Open-EO/openeo-python-driver/issues/334))
2528
- `load_collection`: collapse multiple `load_collection` calls into a single one in cases with buffers. ([#336](https://github.com/Open-EO/openeo-python-driver/issues/336))
2629
- `export_workspace`: fix `KeyError: 'alternate'` upon merging into existing STAC collection ([Open-EO/openeo-geopyspark-driver#677](https://github.com/Open-EO/openeo-geopyspark-driver/issues/677))
30+
- Support custom default in `FlaskRequestCorrelationIdLogging.get_request_id()`
31+
2732

2833
## 0.121.0
2934

openeo_driver/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.121.0a1"
1+
__version__ = "0.122.0a1"

openeo_driver/util/logging.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@
4444
LOG_HANDLER_ROTATING_FILE_JSON = "rotating_file_json"
4545

4646

47+
# Sentinel value for unset values
48+
_UNSET = object()
49+
50+
4751
def get_logging_config(
4852
*,
4953
root_handlers: Optional[List[str]] = None,
@@ -280,12 +284,12 @@ def before_request(cls):
280284
setattr(flask.g, cls.FLASK_G_ATTR, cls._build_request_id())
281285

282286
@classmethod
283-
def get_request_id(cls) -> str:
287+
def get_request_id(cls, *, default: Union[str, None] = _UNSET) -> str:
284288
"""Get request correlation id as stored in Flask request global `g`."""
285289
if flask.has_request_context():
286-
return flask.g.get(cls.FLASK_G_ATTR, "n/a")
290+
return flask.g.get(cls.FLASK_G_ATTR, default="n/a" if default is _UNSET else default)
287291
else:
288-
return "no-request"
292+
return "no-request" if default is _UNSET else default
289293

290294
def filter(self, record: logging.LogRecord) -> bool:
291295
"""Filter a log record (logging.Filter API)."""

tests/util/test_logging.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
_log = logging.getLogger(__name__)
3030

3131

32-
def test_filter_flask_request_correlation_id_logging():
32+
def test_flask_request_correlation_id_logging():
3333
with enhanced_logging(format="[%(req_id)s] %(message)s", context=LOGGING_CONTEXT_FLASK) as logs:
3434
app = flask.Flask(__name__)
3535
log = logging.getLogger(__name__)
@@ -53,7 +53,7 @@ def hello():
5353
assert "[123-456] Watch out!" in logs
5454

5555

56-
def test_filter_flask_request_correlation_id_logging_overriding():
56+
def test_flask_request_correlation_id_logging_overriding():
5757
"""Don't overwrite existing request id."""
5858
with enhanced_logging(format="[%(req_id)s] %(message)s", context=LOGGING_CONTEXT_FLASK) as logs:
5959
app = flask.Flask(__name__)
@@ -78,6 +78,30 @@ def hello():
7878
assert "[hello123] Watch out!" in logs
7979

8080

81+
def test_flask_request_correlation_id_get_request_id_default_no_flask_context():
82+
assert FlaskRequestCorrelationIdLogging.get_request_id() == "no-request"
83+
assert FlaskRequestCorrelationIdLogging.get_request_id(default="nope") == "nope"
84+
assert FlaskRequestCorrelationIdLogging.get_request_id(default=None) is None
85+
86+
87+
def test_flask_request_correlation_id_logging_default_flask_context():
88+
results = []
89+
90+
app = flask.Flask(__name__)
91+
92+
@app.route("/hello")
93+
def hello():
94+
results.append(FlaskRequestCorrelationIdLogging.get_request_id())
95+
results.append(FlaskRequestCorrelationIdLogging.get_request_id(default="nope"))
96+
results.append(FlaskRequestCorrelationIdLogging.get_request_id(default=None))
97+
return "Hello world"
98+
99+
with app.test_client() as client:
100+
client.get("/hello")
101+
102+
assert results == ["n/a", "nope", None]
103+
104+
81105
def test_filter_flask_user_id_logging():
82106
with enhanced_logging(format="[%(user_id)s] %(message)s", context=LOGGING_CONTEXT_FLASK) as logs:
83107
app = flask.Flask(__name__)

0 commit comments

Comments
 (0)