Passed
Pull Request — master (#1)
by
unknown
01:52
created

LocalizedCharFieldForm

Complexity

Total Complexity 0

Size/Duplication

Total Lines 3
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 3
ccs 2
cts 2
cp 1
wmc 0
1 1
from typing import List
2
3 1
from django import forms
4 1
from django.conf import settings
5
6 1
from .widgets import LocalizedFieldWidget, LocalizedCharFieldWidget
7 1
from .fields.localized_value import LocalizedValue
8
9
10
11 1
class LocalizedFieldForm(forms.MultiValueField):
12
    """Form for a localized field, allows editing
13
    the field in multiple languages."""
14
15 1
    widget = LocalizedFieldWidget
16
17 1
    def __init__(self, *args, **kwargs):
18
        """Initializes a new instance of :see:LocalizedFieldForm."""
19
20 1
        fields = []
21
22 1
        for lang_code, _ in settings.LANGUAGES:
23 1
            field_options = {'required': False}
24
25 1
            if lang_code == settings.LANGUAGE_CODE:
26 1
                field_options['required'] = True
27
28 1
            field_options['label'] = lang_code
29 1
            fields.append(forms.fields.CharField(**field_options))
30
31 1
        super(LocalizedFieldForm, self).__init__(
32
            fields,
33
            require_all_fields=False,
34
            *args, **kwargs
35
        )
36
37 1
    def compress(self, value: List[str]) -> LocalizedValue:
38
        """Compresses the values from individual fields
39
        into a single :see:LocalizedValue instance.
40
41
        Arguments:
42
            value:
43
                The values from all the widgets.
44
45
        Returns:
46
            A :see:LocalizedValue containing all
47
            the value in several languages.
48
        """
49
50 1
        localized_value = LocalizedValue()
51
52 1
        for (lang_code, _), value in zip(settings.LANGUAGES, value):
53 1
            localized_value.set(lang_code, value)
54
55 1
        return localized_value
56
57
58 1
class LocalizedCharFieldForm(LocalizedFieldForm):
59
60
    widget = LocalizedCharFieldWidget
61