from django import forms
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
+from django.utils.http import urlquote
from filex.models import Favorite
name_validator = RegexValidator(r'^[^/\0]+$', msg)
+def clean_path(path):
+ return urlquote(os.path.normpath(path))
+
+
class FavoriteForm(forms.ModelForm):
class Meta:
model = Favorite
path = forms.CharField(label=u'Ścieżka', max_length=1024, validators=[path_validator], widget=forms.HiddenInput())
def clean_path(self):
- return os.path.normpath(self.cleaned_data['path'])
+ return clean_path(self.cleaned_data['path'])
class HostPathNameForm(HostPathForm):
e.message += ' - ' + name
errors.append(e)
else:
- cleaned.append(os.path.normpath(name))
+ cleaned.append(clean_path(name))
if errors:
raise ValidationError(errors)
dst = forms.CharField(label=u'Nowa nazwa', max_length=1024, validators=[path_validator])
def clean_src(self):
- return os.path.normpath(self.cleaned_data['src'])
+ return clean_path(self.cleaned_data['src'])
def clean_dst(self):
- return os.path.normpath(self.cleaned_data['dst'])
+ return clean_path(self.cleaned_data['dst'])
class ExtractForm(HostPathForm):
dst = forms.CharField(label=u'Katalog docelowy', max_length=1024, validators=[path_validator])
def clean_dst(self):
- return os.path.normpath(self.cleaned_data['dst'])
+ return clean_path(self.cleaned_data['dst'])
class CompressForm(HostPathForm):
e.message += ' - ' + name
errors.append(e)
else:
- cleaned.append(os.path.normpath(name))
+ cleaned.append(clean_path(name))
if errors:
raise ValidationError(errors)
return cleaned
def clean_archive(self):
- return os.path.normpath(self.cleaned_data['archive'])
+ return clean_path(self.cleaned_data['archive'])
class ArchiveForm(CompressForm):
return False
def compress(self, server, path, files, archive):
- for value in [path, archive] + files:
- if '#' in value:
- raise ValueError('Illegal character `#` in {}'.format(value))
-
if self.match_ext(archive, '.tar.gz', '.tgz'):
cmd, args = 'tar', ['cvzf', archive, '-C', path] + files
elif self.match_ext(archive, '.tar.bz2', '.tbz'):
return self.get(server)
def extract(self, server, archive, dst):
- for value in [archive, dst]:
- if '#' in value:
- raise ValueError('Illegal character `#` in {}'.format(value))
-
if self.match_ext(archive, '.tar.gz', '.tgz'):
cmd, args = 'tar', ('xvzf', archive, '-C', dst)
elif self.match_ext(archive, '.tar.bz2', '.tbz'):