Exemple #1
0
def _upload(request):
    """
    Handles file uploads. The uploaded file is stored in HDFS. We just
    need to rename it to the right path.
    """
    if request.method == "POST":
        form = UploadForm(request.POST, request.FILES)
        if not form.is_valid():
            logger.error("Error in upload form: %s" % (form.errors,))
        else:
            uploaded_file = request.FILES["hdfs_file"]
            dest = form.cleaned_data["dest"]
            if request.fs.isdir(dest):
                assert posixpath.sep not in uploaded_file.name
                dest = request.fs.join(dest, uploaded_file.name)

            # Temp file is created by superuser. Chown the file.
            tmp_file = uploaded_file.get_temp_path()
            username = request.user.username
            try:
                try:
                    request.fs.setuser(request.fs.superuser)
                    request.fs.chmod(tmp_file, 0644)
                    request.fs.chown(tmp_file, username, username)
                except IOError, ex:
                    msg = _('Failed to chown uploaded file ("%(file)s") as superuser %(superuser)s') % {
                        "file": tmp_file,
                        "superuser": request.fs.superuser,
                    }
                    logger.exception(msg)
                    raise PopupException(msg, detail=str(ex))
            finally:
                request.fs.setuser(username)

            # Move the file to where it belongs
            try:
                request.fs.rename(uploaded_file.get_temp_path(), dest)
            except IOError, ex:
                raise PopupException(
                    _('Failed to rename uploaded temporary file ("%(file)s") to "%(name)s": %(error)s')
                    % {"file": tmp_file, "name": dest, "error": ex}
                )

            dest_stats = request.fs.stats(dest)
            return render(
                "upload_done.mako",
                request,
                {
                    # status is used by "fancy uploader"
                    "status": 1,
                    "path": dest,
                    "result": _massage_stats(request, dest_stats),
                    "next": request.GET.get("next"),
                },
            )
Exemple #2
0
def _upload(request):
    """
  Handles file uploads. The uploaded file is stored in HDFS. We just
  need to rename it to the right path.
  """
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if not form.is_valid():
            logger.error("Error in upload form: %s" % (form.errors, ))
        else:
            uploaded_file = request.FILES['hdfs_file']
            dest = form.cleaned_data["dest"]
            if request.fs.isdir(dest):
                assert posixpath.sep not in uploaded_file.name
                dest = request.fs.join(dest, uploaded_file.name)

            # Temp file is created by superuser. Chown the file.
            tmp_file = uploaded_file.get_temp_path()
            username = request.user.username
            try:
                try:
                    request.fs.setuser(request.fs.superuser)
                    request.fs.chmod(tmp_file, 0644)
                    request.fs.chown(tmp_file, username, username)
                except IOError, ex:
                    msg = 'Failed to chown uploaded file ("%s") as superuser %s' % \
                          (tmp_file, request.fs.superuser)
                    logger.exception(msg)
                    raise PopupException(msg, detail=str(ex))
            finally:
                request.fs.setuser(username)

            # Move the file to where it belongs
            try:
                request.fs.rename(uploaded_file.get_temp_path(), dest)
            except IOError, ex:
                raise PopupException(
                    'Failed to rename uploaded temporary file ("%s") to "%s": %s'
                    % (tmp_file, dest, ex))

            dest_stats = request.fs.stats(dest)
            return render_with_toolbars(
                'upload_done.mako',
                request,
                {
                    # status is used by "fancy uploader"
                    'status': 1,
                    'path': dest,
                    'result': _massage_stats(request, dest_stats),
                    'next': request.GET.get("next")
                })
Exemple #3
0
def _upload(request):
  """
  Handles file uploads. The uploaded file is stored in HDFS. We just
  need to rename it to the right path.
  """
  if request.method == 'POST':
    form = UploadForm(request.POST, request.FILES)
    if not form.is_valid():
      logger.error("Error in upload form: %s" % (form.errors,))
    else:
      uploaded_file = request.FILES['hdfs_file']
      dest = form.cleaned_data["dest"]
      if request.fs.isdir(dest):
        assert posixpath.sep not in uploaded_file.name
        dest = request.fs.join(dest, uploaded_file.name)

      # Temp file is created by superuser. Chown the file.
      tmp_file = uploaded_file.get_temp_path()
      username = request.user.username
      try:
        try:
          request.fs.setuser(request.fs.superuser)
          request.fs.chmod(tmp_file, 0644)
          request.fs.chown(tmp_file, username, username)
        except IOError, ex:
          msg = 'Failed to chown uploaded file ("%s") as superuser %s' % \
                (tmp_file, request.fs.superuser)
          logger.exception(msg)
          raise PopupException(msg, detail=str(ex))
      finally:
        request.fs.setuser(username)

      # Move the file to where it belongs
      try:
        request.fs.rename(uploaded_file.get_temp_path(), dest)
      except IOError, ex:
        raise PopupException(
            'Failed to rename uploaded temporary file ("%s") to "%s": %s' %
            (tmp_file, dest, ex))

      dest_stats = request.fs.stats(dest)
      return render_with_toolbars('upload_done.mako', request, {
          # status is used by "fancy uploader"
          'status': 1,
          'path': dest,
          'result': _massage_stats(request, dest_stats),
          'next': request.GET.get("next")
      })
Exemple #4
0
def upload(request):
  """
  Handles file uploads.

  Django has a hook for "upload handlers" that could make this more
  efficient.  Currently Django will store files greater than 2.5MB in
  a temp directory.  We could implement an upload handler to
  send data right through to the destination.

  http://docs.djangoproject.com/en/1.0/topics/http/file-uploads/#upload-handlers
  """
  if request.method == 'POST':
    form = UploadForm(request.POST, request.FILES)
    if form.is_valid():
      # Bit of a wart that form.file doesn't give you the file,
      # and you have to do form.files.get("file").
      file = form.files.get("file")
      dest = form.cleaned_data["dest"]
      if request.fs.isdir(dest):
        assert posixpath.sep not in file.name
        dest = posixpath.join(dest, file.name)
      output = request.fs.open(dest, "w")
      try:
        for chunk in file.chunks():
          output.write(chunk)
      finally:
        output.close()

      dest_stats = request.fs.stats(dest)
      return render_with_toolbars('upload_done.mako', request, {
          # status is used by "fancy uploader"
          'status': 1,
          'path': dest,
          'result': _massage_stats(request, dest_stats),
          'next': request.GET.get("next")
      })
  else:
    dest = request.GET.get("dest")
    initial_values = {}
    if dest:
      initial_values["dest"] = dest
    form = UploadForm(initial=initial_values)
  return render_with_toolbars('upload.mako', request,
                              {'form': form, 'next': request.REQUEST.get("dest")})
Exemple #5
0
def _upload(request):
    """
    Handles file uploaded by HDFSfileUploadHandler.
    The uploaded file is stored in HDFS. We just need to rename it to the destination path.
    """
    form = UploadForm(request.POST, request.FILES)

    if form.is_valid():
        uploaded_file = request.FILES['hdfs_file']
        dest = form.cleaned_data['dest']

        if request.fs.isdir(dest) and posixpath.sep in uploaded_file.name:
            raise PopupException(_('Sorry, no "%(sep)s" in the filename %(name)s.' % {'sep': posixpath.sep, 'name': uploaded_file.name}))

        dest = request.fs.join(dest, uploaded_file.name)
        tmp_file = uploaded_file.get_temp_path()
        username = request.user.username

        try:
            # Temp file is created by superuser. Chown the file.
            request.fs.do_as_superuser(request.fs.chmod, tmp_file, 0644)
            request.fs.do_as_superuser(request.fs.chown, tmp_file, username, username)

            # Move the file to where it belongs
            request.fs.rename(uploaded_file.get_temp_path(), dest)
        except IOError, ex:
            already_exists = False
            try:
                already_exists = request.fs.exists(dest)
            except Exception:
              pass
            if already_exists:
                msg = _('Destination %(name)s already exists.' % {'name': dest})
            else:
                msg = _('Copy to "%(name)s failed: %(error)s') % {'name': dest, 'error': ex}
            raise PopupException(msg)

        return {
          'status': 0,
          'path': dest,
          'result': _massage_stats(request, request.fs.stats(dest)),
          'next': request.GET.get("next")
          }
def file_process(request):
    query = request.GET
    path = get_path(query.get('dir', ''))

    abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path)

    from filebrowser.forms import UploadForm
    form = UploadForm(data=request.POST, files=request.FILES, path=abs_path)

    if form.is_valid():
        f = form.cleaned_data['file']

        f.name = convert_filename(f.name)
        # PRE UPLOAD SIGNAL
        filebrowser_pre_upload.send(sender=request, path=abs_path, file=f)
        # HANDLE UPLOAD
        uploadedfile = handle_file_upload(abs_path, f)
        # POST UPLOAD SIGNAL
        filebrowser_post_upload.send(sender=request, path=abs_path, file=uploadedfile)
    else:
        return form.errors
def file_process(request):
    query = request.GET
    path = get_path(query.get('dir', ''))

    abs_path = os.path.join(MEDIA_ROOT, DIRECTORY, path)

    from filebrowser.forms import UploadForm
    form = UploadForm(data=request.POST, files=request.FILES, path=abs_path)

    if form.is_valid():
        f = form.cleaned_data['file']

        f.name = convert_filename(f.name)
        # PRE UPLOAD SIGNAL
        filebrowser_pre_upload.send(sender=request, path=abs_path, file=f)
        # HANDLE UPLOAD
        uploadedfile = handle_file_upload(abs_path, f)
        # POST UPLOAD SIGNAL
        filebrowser_post_upload.send(sender=request, path=abs_path, file=uploadedfile)
    else:
        return form.errors
Exemple #8
0
            return render_with_toolbars(
                'upload_done.mako',
                request,
                {
                    # status is used by "fancy uploader"
                    'status': 1,
                    'path': dest,
                    'result': _massage_stats(request, dest_stats),
                    'next': request.GET.get("next")
                })
    else:
        dest = request.GET.get("dest")
        initial_values = {}
        if dest:
            initial_values["dest"] = dest
        form = UploadForm(initial=initial_values)
    return render_with_toolbars('upload.mako', request, {
        'form': form,
        'next': request.REQUEST.get("dest")
    })


def status(request):
    status = request.fs.status()
    data = {
        # Beware: "messages" is special in the context browser.
        'msgs': status.get_messages(),
        'health': status.get_health(),
        'datanode_report': status.get_datanode_report(),
        'name': request.fs.name
    }