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
« 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
5from __future__ import annotations
7from datetime import date
8from typing import TYPE_CHECKING, cast
10from appconf import AppConf
11from django.conf import settings
12from django.db import models
14from weblate.accounts.models import AuditLog
15from weblate.utils.request import get_ip_address, get_user_agent
17if TYPE_CHECKING:
18 from django.http.request import HttpRequest
20if "wllegal" in settings.INSTALLED_APPS:
21 import wllegal.models
23 DEFAULT_TOS_DATE = wllegal.models.LEGAL_TOS_DATE
24else:
25 DEFAULT_TOS_DATE = date(2017, 7, 2)
28class WeblateLegalConf(AppConf):
29 # Current TOS date
30 LEGAL_TOS_DATE = DEFAULT_TOS_DATE
32 class Meta:
33 prefix = ""
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)
45 class Meta:
46 verbose_name = "TOS agreement"
47 verbose_name_plural = "TOS agreements"
49 def __str__(self) -> str:
50 return f"{self.user.username}:{self.tos}"
52 @staticmethod
53 def current_tos_date() -> date:
54 return cast(
55 "date",
56 settings.LEGAL_TOS_DATE, # type: ignore[misc]
57 )
59 def is_current(self):
60 return self.tos == self.current_tos_date()
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()