Coverage for app/venv/lib/python3.14/site-packages/weblate/utils/request.py: 52%
19 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 07:15 +0000
1# Copyright © Michal Čihař <michal@weblate.org>
2#
3# SPDX-License-Identifier: GPL-3.0-or-later
4from __future__ import annotations
6from typing import TYPE_CHECKING
8if TYPE_CHECKING: 8 ↛ 9line 8 didn't jump to line 9 because the condition on line 8 was never true
9 from django.http.request import HttpRequest
12def get_request_meta(request: HttpRequest | None, name: str) -> str:
13 """Return request meta if request is set and meta available."""
14 if request is None: 14 ↛ 15line 14 didn't jump to line 15 because the condition on line 14 was never true
15 return ""
16 return request.META.get(name, "")
19def get_ip_address(request: HttpRequest | None) -> str:
20 """Return IP address for request."""
21 return get_request_meta(request, "REMOTE_ADDR")
24def get_user_agent_raw(request: HttpRequest | None) -> str:
25 """Return raw user agent string."""
26 return get_request_meta(request, "HTTP_USER_AGENT")
29def get_user_agent(request: HttpRequest | None, max_length: int = 200) -> str:
30 """Return formatted user agent for request."""
31 raw = get_user_agent_raw(request)
32 if not raw:
33 return ""
35 # Lazily import as this is expensive
36 import user_agents
38 uaobj = user_agents.parse(raw)
39 return str(uaobj)[:max_length]