コード例 #1
0
ファイル: TransferClient.py プロジェクト: zhangxiaomei/DIRAC
    def receiveFile(self, filename, fileId, token=""):
        """
    Receive a file from the server

    @type filename : string / file descriptor / file object
    @param filename : File to receive from server
    @type fileId : any
    @param fileId : Identification of the file being received
    @type token : string
    @param token : Optional token for the file
    @return : S_OK/S_ERROR
    """
        fileHelper = FileHelper()
        retVal = fileHelper.getDataSink(filename)
        if not retVal['OK']:
            return retVal
        dS = retVal['Value']
        closeAfterUse = retVal['closeAfterUse']
        try:
            retVal = self._sendTransferHeader("ToClient", (fileId, token))
            if not retVal['OK']:
                return retVal
            transport = retVal['Value']
            fileHelper.setTransport(transport)
            retVal = fileHelper.networkToDataSink(dS)
            if not retVal['OK']:
                return retVal
            retVal = transport.receiveData()
            self._disconnect()
            if closeAfterUse:
                dS.close()
            return retVal
        finally:
            self._disconnect()
コード例 #2
0
ファイル: GatewayService.py プロジェクト: KrzysztofCiba/DIRAC
 def getDataFromService( self, srvMethod, params ):
   self.infoMsg( "Sending header request to %s" % self.getDestinationService(), str( params ) )
   result = self._sendTransferHeader( srvMethod, params )
   if not result[ 'OK' ]:
     self.errMsg( "Could not send header", result[ 'Message' ] )
     return result
   self.infoMsg( "Starting to receive data from service" )
   srvTransport = result[ 'Value' ]
   srvFileHelper = FileHelper( srvTransport )
   srvFileHelper.setDirection( "receive" )
   sIO = cStringIO.StringIO()
   result = srvFileHelper.networkToDataSink( sIO, self.__transferBytesLimit )
   if not result[ 'OK' ]:
     self.errMsg( "Could receive data from server", result[ 'Message' ] )
     srvTransport.close()
     sIO.close()
     return result
   dataReceived = sIO.getvalue()
   sIO.close()
   self.infoMsg( "Received %s bytes from service" % len( dataReceived ) )
   retVal = srvTransport.receiveData()
   srvTransport.close()
   if not retVal[ 'OK' ]:
     return retVal
   return S_OK( { 'data' : dataReceived, 'srvResponse' : retVal } )
コード例 #3
0
 def getDataFromService(self, srvMethod, params):
     self.infoMsg("Sending header request to %s" % self.getDestinationService(), str(params))
     result = self._sendTransferHeader(srvMethod, params)
     if not result["OK"]:
         self.errMsg("Could not send header", result["Message"])
         return result
     self.infoMsg("Starting to receive data from service")
     _, srvTransport = result["Value"]
     srvFileHelper = FileHelper(srvTransport)
     srvFileHelper.setDirection("receive")
     sIO = BytesIO()
     result = srvFileHelper.networkToDataSink(sIO, self.__transferBytesLimit)
     if not result["OK"]:
         self.errMsg("Could not receive data from server", result["Message"])
         srvTransport.close()
         sIO.close()
         return result
     dataReceived = sIO.getvalue()
     sIO.close()
     self.infoMsg("Received %s bytes from service" % len(dataReceived))
     retVal = srvTransport.receiveData()
     srvTransport.close()
     if not retVal["OK"]:
         return retVal
     return S_OK({"data": dataReceived, "srvResponse": retVal})
コード例 #4
0
ファイル: TransferClient.py プロジェクト: bmb/DIRAC
  def receiveFile( self, filename, fileId, token = "" ):
    """
    Receive a file from the server

    @type filename : string / file descriptor / file object
    @param filename : File to receive from server
    @type fileId : any
    @param fileId : Identification of the file being received
    @type token : string
    @param token : Optional token for the file
    @return : S_OK/S_ERROR
    """
    fileHelper = FileHelper()
    retVal = fileHelper.getDataSink( filename )
    if not retVal[ 'OK' ]:
      return retVal
    dS = retVal[ 'Value' ]
    closeAfterUse = retVal[ 'closeAfterUse' ]
    retVal = self._sendTransferHeader( "ToClient", ( fileId, token ) )
    if not retVal[ 'OK' ]:
      return retVal
    trid, transport = retVal[ 'Value' ]
    try:
      fileHelper.setTransport( transport )
      retVal = fileHelper.networkToDataSink( dS )
      if not retVal[ 'OK' ]:
        return retVal
      retVal = transport.receiveData()
      if closeAfterUse:
        dS.close()
      return retVal
    finally:
      self._disconnect( trid )
コード例 #5
0
    def receiveFile(self, filename, fileId, token=""):
        """
        Receive a file from the server

        :type filename: string / file descriptor / file object
        :param filename: File to receive from server
        :type fileId: any
        :param fileId: Identification of the file being received
        :type token: string
        :param token: Optional token for the file
        :return: S_OK/S_ERROR
        """
        fileHelper = FileHelper()
        if "NoCheckSum" in token:
            fileHelper.disableCheckSum()
        retVal = fileHelper.getDataSink(filename)
        if not retVal["OK"]:
            return retVal
        dS = retVal["Value"]
        closeAfterUse = retVal["closeAfterUse"]
        retVal = self._sendTransferHeader("ToClient", (fileId, token))
        if not retVal["OK"]:
            return retVal
        trid, transport = retVal["Value"]
        try:
            fileHelper.setTransport(transport)
            retVal = fileHelper.networkToDataSink(dS)
            if not retVal["OK"]:
                return retVal
            retVal = transport.receiveData()
            if closeAfterUse:
                dS.close()
            return retVal
        finally:
            self._disconnect(trid)