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

41 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 

5from __future__ import annotations 

6 

7from datetime import date 

8from typing import TYPE_CHECKING, cast 

9 

10from appconf import AppConf 

11from django.conf import settings 

12from django.db import models 

13 

14from weblate.accounts.models import AuditLog 

15from weblate.utils.request import get_ip_address, get_user_agent 

16 

17if TYPE_CHECKING: 

18 from django.http.request import HttpRequest 

19 

20if "wllegal" in settings.INSTALLED_APPS: 

21 import wllegal.models 

22 

23 DEFAULT_TOS_DATE = wllegal.models.LEGAL_TOS_DATE 

24else: 

25 DEFAULT_TOS_DATE = date(2017, 7, 2) 

26 

27 

28class WeblateLegalConf(AppConf): 

29 # Current TOS date 

30 LEGAL_TOS_DATE = DEFAULT_TOS_DATE 

31 

32 class Meta: 

33 prefix = "" 

34 

35 

36class Agreement(models.Model): 

37 user = models.OneToOneField( 

38 settings.AUTH_USER_MODEL, unique=True, on_delete=models.deletion.CASCADE 

39 ) 

40 tos = models.DateField(default=date(1970, 1, 1)) 

41 address = models.GenericIPAddressField(null=True) 

42 user_agent = models.CharField(max_length=200, default="") 

43 timestamp = models.DateTimeField(auto_now=True) 

44 

45 class Meta: 

46 verbose_name = "TOS agreement" 

47 verbose_name_plural = "TOS agreements" 

48 

49 def __str__(self) -> str: 

50 return f"{self.user.username}:{self.tos}" 

51 

52 @staticmethod 

53 def current_tos_date() -> date: 

54 return cast( 

55 "date", 

56 settings.LEGAL_TOS_DATE, # type: ignore[misc] 

57 ) 

58 

59 def is_current(self): 

60 return self.tos == self.current_tos_date() 

61 

62 def make_current(self, request: HttpRequest) -> None: 

63 if not self.is_current(): 

64 AuditLog.objects.create( 

65 self.user, request, "tos", date=self.current_tos_date().isoformat() 

66 ) 

67 self.tos = self.current_tos_date() 

68 self.address = get_ip_address(request) 

69 self.user_agent = get_user_agent(request) 

70 self.save()