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

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

2# 

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

4 

5from pathlib import PurePath 

6 

7from django import forms 

8from django.core.validators import FileExtensionValidator 

9from django.utils.translation import gettext_lazy 

10 

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 

15 

16 

17class UploadForm(forms.Form): 

18 """Uploading file to a translation memory.""" 

19 

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 ) 

44 

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 

59 

60 

61class DeleteForm(forms.Form): 

62 confirm = forms.BooleanField( 

63 label=gettext_lazy("Confirm deleting all translation memory entries"), 

64 required=True, 

65 )