request_context.py 896 B

12345678910111213141516171819202122232425262728293031323334
  1. """DMS请求ID上下文。"""
  2. from __future__ import annotations
  3. from uuid import UUID, uuid4
  4. from flask import g, request
  5. from dms.common.errors import InvalidArgumentError
  6. REQUEST_ID_HEADER = "X-Request-Id"
  7. def initialize_request_id() -> None:
  8. """接收合法UUID,未提供时生成新的UUID。"""
  9. incoming = request.headers.get(REQUEST_ID_HEADER)
  10. if incoming:
  11. try:
  12. UUID(incoming)
  13. except (ValueError, AttributeError) as exc:
  14. g.dms_request_id = str(uuid4())
  15. raise InvalidArgumentError("X-Request-Id必须是有效UUID") from exc
  16. g.dms_request_id = incoming
  17. return
  18. g.dms_request_id = str(uuid4())
  19. def get_request_id() -> str:
  20. request_id = getattr(g, "dms_request_id", None)
  21. if request_id is None:
  22. request_id = str(uuid4())
  23. g.dms_request_id = request_id
  24. return request_id