Coverage for app/venv/lib/python3.14/site-packages/weblate/utils/pii.py: 0%

20 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 

4 

5 

6def mask_string(string: str, include_first: bool = False, limit: int = 3) -> str: 

7 length = len(string) 

8 if length <= limit: 

9 return length * "*" 

10 

11 parts = [] 

12 if include_first: 

13 parts.append(string[0]) 

14 string = string[1:] 

15 length -= 1 

16 

17 parts.extend(("*" * (length - 1), string[-1])) 

18 return "".join(parts) 

19 

20 

21def mask_email(email: str) -> str: 

22 name, domain = email.rsplit("@", maxsplit=1) 

23 masked_name = mask_string(name, include_first=True) 

24 

25 if len(domain) <= 4 or "." not in domain: 

26 masked_domain = mask_string(domain, limit=0) 

27 else: 

28 part, tld = domain.rsplit(".", maxsplit=1) 

29 masked_tld = mask_string(tld, limit=0) 

30 masked_domain = f"{len(part) * '*'}.{masked_tld}" 

31 

32 return f"{masked_name}@{masked_domain}"