Coverage for app/venv/lib/python3.14/site-packages/weblate/memory/forms.py: 60%
21 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 pathlib import PurePath
7from django import forms
8from django.core.validators import FileExtensionValidator
9from django.utils.translation import gettext_lazy
11from weblate.lang.models import Language
12from weblate.memory.models import SUPPORTED_FORMATS
13from weblate.utils.forms import SortedSelect
14from weblate.utils.html import format_html_join_comma, list_to_tuples
17class UploadForm(forms.Form):
18 """Uploading file to a translation memory."""
20 file = forms.FileField(
21 label=gettext_lazy("File"),
22 validators=[FileExtensionValidator(allowed_extensions=SUPPORTED_FORMATS)],
23 help_text=gettext_lazy("You can upload a file of following formats: %s.")
24 % format_html_join_comma("{}", list_to_tuples(SUPPORTED_FORMATS)),
25 )
26 source_language = forms.ModelChoiceField(
27 widget=SortedSelect,
28 label=gettext_lazy("Source language"),
29 help_text=gettext_lazy(
30 "Source language of the document when not specified in file"
31 ),
32 queryset=Language.objects.all(),
33 required=False,
34 )
35 target_language = forms.ModelChoiceField(
36 widget=SortedSelect,
37 label=gettext_lazy("Target language"),
38 help_text=gettext_lazy(
39 "Target language of the document when not specified in file"
40 ),
41 queryset=Language.objects.all(),
42 required=False,
43 )
45 def clean(self):
46 data = self.cleaned_data
47 if "file" not in self.errors:
48 extension = PurePath(data["file"].name).suffix[1:].lower()
49 if extension in {"xliff", "po", "csv"} and not all(
50 [data["source_language"], data["target_language"]]
51 ):
52 raise forms.ValidationError(
53 gettext_lazy(
54 "Source language and target language must be specified for this file format."
55 ),
56 code="missing_languages",
57 )
58 return data
61class DeleteForm(forms.Form):
62 confirm = forms.BooleanField(
63 label=gettext_lazy("Confirm deleting all translation memory entries"),
64 required=True,
65 )