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

1# Copyright © Michal Čihař <michal@weblate.org> 

2# 

3# SPDX-License-Identifier: GPL-3.0-or-later 

4from __future__ import annotations 

5 

6from typing import TYPE_CHECKING 

7 

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 

10 

11 

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, "") 

17 

18 

19def get_ip_address(request: HttpRequest | None) -> str: 

20 """Return IP address for request.""" 

21 return get_request_meta(request, "REMOTE_ADDR") 

22 

23 

24def get_user_agent_raw(request: HttpRequest | None) -> str: 

25 """Return raw user agent string.""" 

26 return get_request_meta(request, "HTTP_USER_AGENT") 

27 

28 

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 "" 

34 

35 # Lazily import as this is expensive 

36 import user_agents 

37 

38 uaobj = user_agents.parse(raw) 

39 return str(uaobj)[:max_length]