예제 #1
0
    def run(self):
        try:
            self.preload()

            source_abs_path = os.path.abspath(self.source_path)
            target_abs_path = os.path.abspath(self.target_path)

            self.logger.debug(
                "FM WebDav NewFile worker run(), source_abs_path = %s, target_abs_path = %s"
                % (source_abs_path, target_abs_path))

            webdav_connection = WebDavConnection.create(
                self.login, self.session.get('server_id'), self.logger)

            try:
                if webdav_connection.isdir(source_abs_path):
                    source_abs_path += '/'
                    target_abs_path += '/'
                source_info = webdav_connection.generate_file_info(
                    source_abs_path)
                webdav_connection.move_file(source_abs_path, target_abs_path)
                target_info = webdav_connection.generate_file_info(
                    target_abs_path)

                webdav_result = {"source": source_info, "target": target_info}

                result = {
                    "data": webdav_result,
                    "error": False,
                    "message": None,
                    "traceback": None
                }

                self.on_success(result)

            except Exception as e:
                result = WebDavConnection.get_error(
                    e, "Unable to rename source element.")
                self.on_error(result)

        except Exception as e:
            result = {
                "error": True,
                "message": str(e),
                "traceback": traceback.format_exc()
            }

            self.on_error(result)
예제 #2
0
    def run(self):
        try:
            self.preload()

            source_abs_path = os.path.abspath(self.source_path)
            target_abs_path = os.path.abspath(self.target_path)

            self.logger.debug("FM WebDav NewFile worker run(), source_abs_path = %s, target_abs_path = %s" %
                              (source_abs_path, target_abs_path))

            webdav_connection = WebDavConnection.create(self.login, self.session.get('server_id'), self.logger)

            try:
                if webdav_connection.isdir(source_abs_path):
                    source_abs_path += '/'
                    target_abs_path += '/'
                source_info = webdav_connection.generate_file_info(source_abs_path)
                webdav_connection.move_file(source_abs_path, target_abs_path)
                target_info = webdav_connection.generate_file_info(target_abs_path)

                webdav_result = {
                    "source": source_info,
                    "target": target_info
                }

                result = {
                    "data": webdav_result,
                    "error": False,
                    "message": None,
                    "traceback": None
                }

                self.on_success(result)

            except Exception as e:
                result = WebDavConnection.get_error(e, "Unable to rename source element.")
                self.on_error(result)

        except Exception as e:
            result = {
                "error": True,
                "message": str(e),
                "traceback": traceback.format_exc()
            }

            self.on_error(result)
예제 #3
0
    def run(self):
        try:
            self.preload()
            abs_path = os.path.abspath(self.path)
            self.logger.debug("FM WebDav MakeDir worker run(), abs_path = %s" %
                              abs_path)

            webdav_connection = WebDavConnection.create(
                self.login, self.session.get('server_id'), self.logger)

            try:
                webdav_connection.mkdir(abs_path)
                info = webdav_connection.info(abs_path)
                fileinfo = {
                    "name": abs_path,
                    "mode": webdav_connection.getmode(info),
                    "mtime": str(info['modified'])
                }

                result = {
                    "data": fileinfo,
                    "error": False,
                    "message": None,
                    "traceback": None
                }

                self.on_success(result)
            except Exception as e:
                result = WebDavConnection.get_error(
                    e, "File path already exists")
                self.on_error(result)

        except Exception as e:
            result = {
                "error": True,
                "message": str(e),
                "traceback": traceback.format_exc()
            }

            self.on_error(result)
예제 #4
0
    def run(self):
        try:
            self.preload()
            abs_path = os.path.abspath(self.path)
            self.logger.debug("FM WebDav MakeDir worker run(), abs_path = %s" % abs_path)

            webdav_connection = WebDavConnection.create(self.login, self.session.get('server_id'), self.logger)

            try:
                webdav_connection.mkdir(abs_path)
                info = webdav_connection.info(abs_path)
                fileinfo = {
                    "name": abs_path,
                    "mode": webdav_connection.getmode(info),
                    "mtime": str(info['modified'])
                }

                result = {
                    "data": fileinfo,
                    "error": False,
                    "message": None,
                    "traceback": None
                }

                self.on_success(result)
            except Exception as e:
                result = WebDavConnection.get_error(e, "File path already exists")
                self.on_error(result)

        except Exception as e:
            result = {
                "error": True,
                "message": str(e),
                "traceback": traceback.format_exc()
            }

            self.on_error(result)
예제 #5
0
    def run(self):
        try:
            self.preload()
            abs_path = self.path
            self.logger.debug(
                "FM WebDav WriteFile worker run(), abs_path = %s" % abs_path)

            self.logger.debug("content %s" % pprint.pformat(self.content))
            self.logger.debug("encoding %s" % pprint.pformat(self.encoding))

            try:
                decoded = self.content.decode('utf-8')
                self.logger.debug("DECODED %s" % pprint.pformat(decoded))
            except Exception as e:
                self.logger.error("Error %s , %s" %
                                  (str(e), traceback.format_exc()))
                raise e

            webdav = WebDavConnection.create(self.login,
                                             self.session.get('server_id'),
                                             self.logger)

            try:
                hash_str = self.random_hash()
                temp_dir = os.path.abspath(TMP_DIR + '/' + self.login + '/' +
                                           hash_str + '/')
                os.makedirs(temp_dir)
                filedir = webdav.parent(self.path)
                filename = self.path
                if filedir != '/':
                    filename = filename.replace(filedir, "/", 1)
                temp_filename = temp_dir + filename
            except Exception as e:
                result = WebDavConnection.get_error(
                    e, "Unable to make file backup before saving \"%s\"." %
                    os.path.basename(abs_path))
                self.on_error(result)
                return

            try:
                content = decoded.encode(self.encoding)
                self.create_local_file(temp_filename, content)

                folder = webdav.parent(self.path)
                webdav.upload(temp_filename, folder, True)

                file_info = webdav.generate_file_info(self.path)

                shutil.rmtree(temp_dir, True)

                file_result = {"encoding": self.encoding, "item": file_info}

                result = {
                    "data": file_result,
                    "error": False,
                    "message": None,
                    "traceback": None
                }

                self.on_success(result)

            except Exception as e:
                try:
                    webdav.upload(
                        os.path.join(temp_dir, os.path.basename(abs_path)),
                        abs_path, True)
                except Exception as e:
                    result = WebDavConnection.get_error(
                        e,
                        "Unable to upload tmp file during write error \"%s\"."
                        % os.path.basename(abs_path))
                    self.on_error(result)
                    return

                result = WebDavConnection.get_error(
                    e, "Unable to write file \"%s\"." %
                    os.path.basename(abs_path))
                self.on_error(result)
                return

        except Exception as e:
            result = {
                "error": True,
                "message": str(e),
                "traceback": traceback.format_exc()
            }

            self.on_error(result)
예제 #6
0
    def run(self):
        try:
            self.preload()
            abs_path = self.path
            self.logger.debug("FM WebDav WriteFile worker run(), abs_path = %s" % abs_path)

            self.logger.debug("content %s" % pprint.pformat(self.content))
            self.logger.debug("encoding %s" % pprint.pformat(self.encoding))

            try:
                decoded = self.content.decode('utf-8')
                self.logger.debug("DECODED %s" % pprint.pformat(decoded))
            except Exception as e:
                self.logger.error("Error %s , %s" % (str(e), traceback.format_exc()))
                raise e

            webdav = WebDavConnection.create(self.login, self.session.get('server_id'), self.logger)

            try:
                hash_str = self.random_hash()
                temp_dir = os.path.abspath(TMP_DIR + '/' + self.login + '/' + hash_str + '/')
                os.makedirs(temp_dir)
                filedir = webdav.parent(self.path)
                filename = self.path
                if filedir != '/':
                    filename = filename.replace(filedir, "/", 1)
                temp_filename = temp_dir + filename
            except Exception as e:
                result = WebDavConnection.get_error(e,
                                                 "Unable to make file backup before saving \"%s\"." % os.path.basename(
                                                     abs_path))
                self.on_error(result)
                return

            try:
                content = decoded.encode(self.encoding)
                self.create_local_file(temp_filename, content)

                folder = webdav.parent(self.path)
                webdav.upload(temp_filename, folder, True)

                file_info = webdav.generate_file_info(self.path)

                shutil.rmtree(temp_dir, True)

                file_result = {
                    "encoding": self.encoding,
                    "item": file_info
                }

                result = {
                    "data": file_result,
                    "error": False,
                    "message": None,
                    "traceback": None
                }

                self.on_success(result)

            except Exception as e:
                try:
                    webdav.upload(os.path.join(temp_dir, os.path.basename(abs_path)), abs_path, True)
                except Exception as e:
                    result = WebDavConnection.get_error(e,
                                                     "Unable to upload tmp file during write error \"%s\"."
                                                     % os.path.basename(abs_path))
                    self.on_error(result)
                    return

                result = WebDavConnection.get_error(e, "Unable to write file \"%s\"." % os.path.basename(abs_path))
                self.on_error(result)
                return

        except Exception as e:
            result = {
                "error": True,
                "message": str(e),
                "traceback": traceback.format_exc()
            }

            self.on_error(result)