4 from django import forms
5 from django.core.exceptions import ValidationError
7 from filex.models import Favorite
8 from filex.utils import host_validator, path_validator, name_validator
11 class FavoriteForm(forms.ModelForm):
14 fields = ('owner', 'host', 'path')
15 widgets = {'owner': forms.HiddenInput()}
18 return os.path.normpath(self.cleaned_data['path'])
21 class HostForm(forms.Form):
22 host = forms.CharField(label=u'Host', max_length=256, validators=[host_validator], widget=forms.HiddenInput())
25 class HostPathForm(HostForm):
26 path = forms.CharField(label=u'Ścieżka', max_length=1024, validators=[path_validator], widget=forms.HiddenInput())
29 return os.path.normpath(self.cleaned_data['path'])
32 class HostPathNameForm(HostPathForm):
33 name = forms.CharField(label=u'Nazwa', max_length=256, validators=[name_validator])
36 return os.path.normpath(self.cleaned_data['name'])
39 class HostItemsForm(HostForm):
40 dirs = forms.MultipleChoiceField(label=u'Katalogi', required=False, widget=forms.MultipleHiddenInput())
41 files = forms.MultipleChoiceField(label=u'Pliki', required=False, widget=forms.MultipleHiddenInput())
43 def __init__(self, data=None, *args, **kwargs):
44 super(HostItemsForm, self).__init__(data, *args, **kwargs)
47 # accept user defined choices
48 self.fields['dirs'].choices += ((v, v) for v in data.getlist('dirs'))
49 self.fields['files'].choices += ((v, v) for v in data.getlist('files'))
52 data = super(HostItemsForm, self).clean()
54 if not (data.get('dirs') or data.get('files')):
55 raise ValidationError('No items specified')
60 def _clean_paths(values):
61 errors, cleaned = [], []
65 except ValidationError as e:
66 e.message += ' - ' + name
69 cleaned.append(os.path.normpath(name))
71 raise ValidationError(errors)
76 return self._clean_paths(self.cleaned_data['dirs'])
78 def clean_files(self):
79 return self._clean_paths(self.cleaned_data['files'])
82 class RenameForm(HostForm):
83 src = forms.CharField(label=u'Stara nazwa', max_length=1024, validators=[path_validator], widget=forms.HiddenInput())
84 dst = forms.CharField(label=u'Nowa nazwa', max_length=1024, validators=[path_validator])
87 return os.path.normpath(self.cleaned_data['src'])
90 return os.path.normpath(self.cleaned_data['dst'])
93 class ExtractForm(HostPathForm):
94 dst = forms.CharField(label=u'Katalog docelowy', max_length=1024, validators=[path_validator])
97 return os.path.normpath(self.cleaned_data['dst'])
100 class CompressForm(HostPathForm):
101 archive = forms.CharField(label=u'Nazwa', max_length=1024, validators=[path_validator])
102 files = forms.MultipleChoiceField(label=u'Pliki', widget=forms.MultipleHiddenInput())
104 def __init__(self, data=None, *args, **kwargs):
105 super(CompressForm, self).__init__(data, *args, **kwargs)
108 # accept user defined choices
109 self.fields['files'].choices += ((v, v) for v in data.getlist('files'))
111 def clean_files(self):
112 errors, cleaned = [], []
113 for name in self.cleaned_data['files']:
116 except ValidationError as e:
117 e.message += ' - ' + name
120 cleaned.append(os.path.normpath(name))
122 raise ValidationError(errors)
126 def clean_archive(self):
127 return os.path.normpath(self.cleaned_data['archive'])
130 class ArchiveForm(CompressForm):
141 type = forms.ChoiceField(label=u'Typ archiwum', choices=TYPE_CHOICES, initial=ZIP)