Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/import_export/forms.py: 42%
54 statements
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
« prev ^ index » next coverage.py v6.4.4, created at 2023-07-17 14:22 -0600
1import os.path
3from django import forms
4from django.conf import settings
5from django.contrib.admin.helpers import ActionForm
6from django.utils.translation import gettext_lazy as _
9class ImportExportFormBase(forms.Form):
10 resource = forms.ChoiceField(
11 label=_('Resource'),
12 choices=(),
13 required=False,
14 )
16 def __init__(self, resources=None, *args, **kwargs):
17 super().__init__(*args, **kwargs)
18 if resources and len(resources) > 1:
19 resource_choices = []
20 for i, resource in enumerate(resources):
21 resource_choices.append((i, resource.get_display_name()))
22 self.fields['resource'].choices = resource_choices
23 else:
24 del self.fields['resource']
27class ImportForm(ImportExportFormBase):
28 import_file = forms.FileField(
29 label=_('File to import')
30 )
31 input_format = forms.ChoiceField(
32 label=_('Format'),
33 choices=(),
34 )
36 def __init__(self, import_formats, *args, **kwargs):
37 super().__init__(*args, **kwargs)
38 choices = [
39 (str(i), f().get_title())
40 for i, f in enumerate(import_formats)
41 ]
42 if len(import_formats) > 1:
43 choices.insert(0, ('', '---'))
44 self.fields['import_file'].widget.attrs['class'] = 'guess_format'
45 self.fields['input_format'].widget.attrs['class'] = 'guess_format'
47 self.fields['input_format'].choices = choices
49 @property
50 def media(self):
51 extra = "" if settings.DEBUG else ".min"
52 return forms.Media(
53 js=(
54 f'admin/js/vendor/jquery/jquery{extra}.js',
55 'admin/js/jquery.init.js',
56 'import_export/guess_format.js',
57 )
58 )
61class ConfirmImportForm(forms.Form):
62 import_file_name = forms.CharField(widget=forms.HiddenInput())
63 original_file_name = forms.CharField(widget=forms.HiddenInput())
64 input_format = forms.CharField(widget=forms.HiddenInput())
65 resource = forms.CharField(widget=forms.HiddenInput(), required=False)
67 def clean_import_file_name(self):
68 data = self.cleaned_data['import_file_name']
69 data = os.path.basename(data)
70 return data
73class ExportForm(ImportExportFormBase):
74 file_format = forms.ChoiceField(
75 label=_('Format'),
76 choices=(),
77 )
79 def __init__(self, formats, *args, **kwargs):
80 super().__init__(*args, **kwargs)
81 choices = []
82 for i, f in enumerate(formats):
83 choices.append((str(i), f().get_title(),))
84 if len(formats) > 1:
85 choices.insert(0, ('', '---'))
87 self.fields['file_format'].choices = choices
90def export_action_form_factory(formats):
91 """
92 Returns an ActionForm subclass containing a ChoiceField populated with
93 the given formats.
94 """
95 class _ExportActionForm(ActionForm):
96 """
97 Action form with export format ChoiceField.
98 """
99 file_format = forms.ChoiceField(
100 label=_('Format'), choices=formats, required=False)
101 _ExportActionForm.__name__ = str('ExportActionForm')
103 return _ExportActionForm