Exemplo n.º 1
0
 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()
Exemplo n.º 2
0
 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()
Exemplo n.º 3
0
 def stream_opened(fd):
     producer = NoRangeStaticProducer(request, fd)
     producer.start()