def _callbackRenderResponseContext( self, request ): self._CleanUpTempFile( request ) if request.channel is None: # Connection was lost, it seems. # no need for request.finish return if request.requestHeaders.hasHeader( 'Origin' ): if self._service.SupportsCORS(): request.setHeader( 'Access-Control-Allow-Origin', '*' ) response_context = request.hydrus_response_context status_code = response_context.GetStatusCode() request.setResponseCode( status_code ) for ( k, v, kwargs ) in response_context.GetCookies(): request.addCookie( k, v, **kwargs ) do_finish = True if response_context.HasPath(): path = response_context.GetPath() size = os.path.getsize( path ) mime = response_context.GetMime() content_type = HC.mime_string_lookup[ mime ] content_length = size ( base, filename ) = os.path.split( path ) content_disposition = 'inline; filename="' + filename + '"' request.setHeader( 'Content-Type', str( content_type ) ) request.setHeader( 'Content-Length', str( content_length ) ) request.setHeader( 'Content-Disposition', str( content_disposition ) ) request.setHeader( 'Expires', time.strftime( '%a, %d %b %Y %H:%M:%S GMT', time.gmtime( time.time() + 86400 * 365 ) ) ) request.setHeader( 'Cache-Control', 'max-age={}'.format( 86400 * 365 ) ) fileObject = open( path, 'rb' ) producer = NoRangeStaticProducer( request, fileObject ) producer.start() do_finish = False elif response_context.HasBody(): mime = response_context.GetMime() body_bytes = response_context.GetBodyBytes() content_type = HC.mime_string_lookup[ mime ] content_length = len( body_bytes ) content_disposition = 'inline' request.setHeader( 'Content-Type', content_type ) request.setHeader( 'Content-Length', str( content_length ) ) request.setHeader( 'Content-Disposition', content_disposition ) request.write( body_bytes ) else: content_length = 0 if status_code != 204: # 204 is No Content request.setHeader( 'Content-Length', str( content_length ) ) self._reportDataUsed( request, content_length ) self._reportRequestUsed( request ) if do_finish: request.finish()
def _callbackRenderResponseContext( self, request ): self._CleanUpTempFile( request ) response_context = request.hydrus_response_context status_code = response_context.GetStatusCode() request.setResponseCode( status_code ) for ( k, v, kwargs ) in response_context.GetCookies(): request.addCookie( k, v, **kwargs ) do_finish = True if response_context.HasPath(): path = response_context.GetPath() size = os.path.getsize( path ) mime = response_context.GetMime() content_type = HC.mime_string_lookup[ mime ] content_length = size ( base, filename ) = os.path.split( path ) content_disposition = 'inline; filename="' + filename + '"' # can't be unicode! request.setHeader( 'Content-Type', str( content_type ) ) request.setHeader( 'Content-Length', str( content_length ) ) request.setHeader( 'Content-Disposition', str( content_disposition ) ) request.setHeader( 'Expires', time.strftime( '%a, %d %b %Y %H:%M:%S GMT', time.gmtime( time.time() + 86400 * 365 ) ) ) request.setHeader( 'Cache-Control', str( 86400 * 365 ) ) fileObject = open( path, 'rb' ) producer = NoRangeStaticProducer( request, fileObject ) producer.start() do_finish = False elif response_context.HasBody(): mime = response_context.GetMime() body = response_context.GetBody() content_type = HC.mime_string_lookup[ mime ] content_length = len( body ) content_disposition = 'inline' request.setHeader( 'Content-Type', content_type ) request.setHeader( 'Content-Length', str( content_length ) ) request.setHeader( 'Content-Disposition', content_disposition ) request.write( HydrusData.ToByteString( body ) ) else: content_length = 0 request.setHeader( 'Content-Length', str( content_length ) ) self._reportDataUsed( request, content_length ) self._reportRequestUsed( request ) if do_finish: request.finish()
def stream_opened(fd): producer = NoRangeStaticProducer(request, fd) producer.start()