def __doFileTransfer(self, sDirection): """ Execute a file transfer action :type sDirection: string :param sDirection: Direction of the transfer :return: S_OK/S_ERROR """ retVal = self.__trPool.receive(self.__trid) if not retVal["OK"]: raise ConnectionError( "Error while receiving file description %s %s" % (self.srv_getFormattedRemoteCredentials(), retVal["Message"]) ) # Reconvert to tuple fileInfo = tuple(retVal["Value"]) sDirection = "%s%s" % (sDirection[0].lower(), sDirection[1:]) if "transfer_%s" % sDirection not in dir(self): self.__trPool.send(self.__trid, S_ERROR("Service can't transfer files %s" % sDirection)) return retVal = self.__trPool.send(self.__trid, S_OK("Accepted")) if not retVal["OK"]: return retVal self.__logRemoteQuery("FileTransfer/%s" % sDirection, fileInfo) self.__lockManager.lock("FileTransfer/%s" % sDirection) try: try: fileHelper = FileHelper(self.__trPool.get(self.__trid)) if sDirection == "fromClient": fileHelper.setDirection("fromClient") uRetVal = self.transfer_fromClient(fileInfo[0], fileInfo[1], fileInfo[2], fileHelper) elif sDirection == "toClient": fileHelper.setDirection("toClient") uRetVal = self.transfer_toClient(fileInfo[0], fileInfo[1], fileHelper) elif sDirection == "bulkFromClient": fileHelper.setDirection("fromClient") uRetVal = self.transfer_bulkFromClient(fileInfo[0], fileInfo[1], fileInfo[2], fileHelper) elif sDirection == "bulkToClient": fileHelper.setDirection("toClient") uRetVal = self.transfer_bulkToClient(fileInfo[0], fileInfo[1], fileHelper) elif sDirection == "listBulk": fileHelper.setDirection("toClient") uRetVal = self.transfer_listBulk(fileInfo[0], fileInfo[1], fileHelper) else: return S_ERROR("Direction %s does not exist!!!" % sDirection) if uRetVal["OK"] and not fileHelper.finishedTransmission(): gLogger.error("You haven't finished receiving/sending the file", str(fileInfo)) return S_ERROR("Incomplete transfer") del fileHelper return uRetVal finally: self.__lockManager.unlock("FileTransfer/%s" % sDirection) except Exception as e: # pylint: disable=broad-except gLogger.exception("Uncaught exception when serving Transfer", "%s" % sDirection, lException=e) return S_ERROR("Server error while serving %s: %s" % (sDirection, repr(e)))
def __doFileTransfer(self, sDirection): """ Execute a file transfer action @type sDirection: string @param sDirection: Direction of the transfer @return: S_OK/S_ERROR """ retVal = self.__trPool.receive(self.__trid) if not retVal["OK"]: raise RequestHandler.ConnectionError( "Error while receiving file description %s %s" % (self.srv_getFormattedRemoteCredentials(), retVal["Message"]) ) fileInfo = retVal["Value"] sDirection = "%s%s" % (sDirection[0].lower(), sDirection[1:]) if "transfer_%s" % sDirection not in dir(self): self.__trPool.send(self.__trid, S_ERROR("Service can't transfer files %s" % sDirection)) return retVal = self.__trPool.send(self.__trid, S_OK("Accepted")) if not retVal["OK"]: return retVal self.__logRemoteQuery("FileTransfer/%s" % sDirection, fileInfo) self.__lockManager.lock(sDirection) try: try: fileHelper = FileHelper(self.__trPool.get(self.__trid)) if sDirection == "fromClient": fileHelper.setDirection("fromClient") uRetVal = self.transfer_fromClient(fileInfo[0], fileInfo[1], fileInfo[2], fileHelper) elif sDirection == "toClient": fileHelper.setDirection("toClient") uRetVal = self.transfer_toClient(fileInfo[0], fileInfo[1], fileHelper) elif sDirection == "bulkFromClient": fileHelper.setDirection("fromClient") uRetVal = self.transfer_bulkFromClient(fileInfo[0], fileInfo[1], fileInfo[2], fileHelper) elif sDirection == "bulkToClient": fileHelper.setDirection("toClient") uRetVal = self.transfer_bulkToClient(fileInfo[0], fileInfo[1], fileHelper) elif sDirection == "listBulk": fileHelper.setDirection("toClient") uRetVal = self.transfer_listBulk(fileInfo[0], fileInfo[1], fileHelper) else: return S_ERROR("Direction %s does not exist!!!" % sDirection) if uRetVal["OK"] and not fileHelper.finishedTransmission(): gLogger.error("You haven't finished receiving/sending the file", str(fileInfo)) return S_ERROR("Incomplete transfer") return uRetVal finally: self.__lockManager.unlock(sDirection) except Exception, v: gLogger.exception("Uncaught exception when serving Transfer", "%s" % sDirection) return S_ERROR("Server error while serving %s: %s" % (sDirection, str(v)))
def __doFileTransfer( self, sDirection ): """ Execute a file transfer action @type sDirection: string @param sDirection: Direction of the transfer @return: S_OK/S_ERROR """ retVal = self.__trPool.receive( self.__trid ) if not retVal[ 'OK' ]: gLogger.error( "Error while receiving file description", "%s %s" % ( self.srv_getFormattedRemoteCredentials(), retVal[ 'Message' ] ) ) return S_ERROR( "Error while receiving file description: %s" % retVal[ 'Message' ] ) fileInfo = retVal[ 'Value' ] sDirection = "%s%s" % ( sDirection[0].lower(), sDirection[1:] ) if "transfer_%s" % sDirection not in dir( self ): self.__trPool.send( self.__trid, S_ERROR( "Service can't transfer files %s" % sDirection ) ) return retVal = self.__trPool.send( self.__trid, S_OK( "Accepted" ) ) if not retVal[ 'OK' ]: return retVal self.__logRemoteQuery( "FileTransfer/%s" % sDirection, fileInfo ) self.__lockManager.lock( sDirection ) try: try: fileHelper = FileHelper( self.__trPool.get( self.__trid ) ) if sDirection == "fromClient": fileHelper.setDirection( "fromClient" ) uRetVal = self.transfer_fromClient( fileInfo[0], fileInfo[1], fileInfo[2], fileHelper ) elif sDirection == "toClient" : fileHelper.setDirection( "toClient" ) uRetVal = self.transfer_toClient( fileInfo[0], fileInfo[1], fileHelper ) elif sDirection == "bulkFromClient" : fileHelper.setDirection( "fromClient" ) uRetVal = self.transfer_bulkFromClient( fileInfo[0], fileInfo[1], fileInfo[2], fileHelper ) elif sDirection == "bulkToClient" : fileHelper.setDirection( "toClient" ) uRetVal = self.transfer_bulkToClient( fileInfo[0], fileInfo[1], fileHelper ) elif sDirection == "listBulk": fileHelper.setDirection( "toClient" ) uRetVal = self.transfer_listBulk( fileInfo[0], fileInfo[1], fileHelper ) else: return S_ERROR( "Direction %s does not exist!!!" % sDirection ) if uRetVal[ 'OK' ] and not fileHelper.finishedTransmission(): gLogger.error( "You haven't finished receiving/sending the file", str( fileInfo ) ) return S_ERROR( "Incomplete transfer" ) return uRetVal finally: self.__lockManager.unlock( sDirection ) except Exception, v: gLogger.exception( "Uncaught exception when serving Transfer", "%s" % sDirection ) return S_ERROR( "Server error while serving %s: %s" % ( sDirection, str( v ) ) )