1 from functools import wraps
3 from django.core.validators import RegexValidator
4 from django.http import JsonResponse, HttpResponse
5 from django.template.loader import render_to_string
6 from django.views.decorators.csrf import csrf_protect, csrf_exempt
8 from filex.ftp import FTPError
11 _msg = u'Invalid value'
12 host_validator = RegexValidator(r'^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+'
13 r'(?:[a-zA-Z]{2,6}\.?|[a-zA-Z0-9-]{2,}(?<!-)\.?))(?::\d+)?$', _msg)
14 path_validator = RegexValidator(r'^~?(?:/[^/\0]*)*$', _msg)
15 name_validator = RegexValidator(r'^[^/\0]+$', _msg)
18 def with_ftp_upload_handler(view_func):
19 from filex.uploadhandler import FtpUploadHandler
22 def wrapped_view(request, *args, **kwargs):
23 request.upload_handlers = [FtpUploadHandler(request)]
26 return csrf_protect(view_func)(request, *args, **kwargs)
28 msg, status = parse_ftp_error(e)
30 return JsonResponse({'error': msg}, status=status)
32 return csrf_exempt(wrapped_view)
35 def parse_ftp_error(e):
36 msg, status = e.message, 400
38 if 'No such file or directory' in msg:
40 elif 'Permission denied' in msg: