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

1import os.path 

2 

3from django import forms 

4from django.conf import settings 

5from django.contrib.admin.helpers import ActionForm 

6from django.utils.translation import gettext_lazy as _ 

7 

8 

9class ImportExportFormBase(forms.Form): 

10 resource = forms.ChoiceField( 

11 label=_('Resource'), 

12 choices=(), 

13 required=False, 

14 ) 

15 

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'] 

25 

26 

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 ) 

35 

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' 

46 

47 self.fields['input_format'].choices = choices 

48 

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 ) 

59 

60 

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) 

66 

67 def clean_import_file_name(self): 

68 data = self.cleaned_data['import_file_name'] 

69 data = os.path.basename(data) 

70 return data 

71 

72 

73class ExportForm(ImportExportFormBase): 

74 file_format = forms.ChoiceField( 

75 label=_('Format'), 

76 choices=(), 

77 ) 

78 

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, ('', '---')) 

86 

87 self.fields['file_format'].choices = choices 

88 

89 

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') 

102 

103 return _ExportActionForm