hydrus/include/HydrusServer.py

72 lines
2.0 KiB
Python
Raw Normal View History

2013-02-19 00:11:43 +00:00
import HydrusConstants as HC
2013-10-02 22:06:06 +00:00
import HydrusServerResources
2013-02-19 00:11:43 +00:00
import traceback
2015-03-25 22:04:19 +00:00
from twisted.web.server import Request, Site
2013-10-02 22:06:06 +00:00
from twisted.web.resource import Resource
2015-03-25 22:04:19 +00:00
import HydrusData
2015-11-18 22:44:07 +00:00
import time
2013-02-19 00:11:43 +00:00
2014-07-09 22:15:14 +00:00
LOCAL_DOMAIN = HydrusServerResources.HydrusDomain( True )
REMOTE_DOMAIN = HydrusServerResources.HydrusDomain( False )
2013-10-02 22:06:06 +00:00
class HydrusRequest( Request ):
2013-02-19 00:11:43 +00:00
2013-10-02 22:06:06 +00:00
def __init__( self, *args, **kwargs ):
2013-02-19 00:11:43 +00:00
2013-10-02 22:06:06 +00:00
Request.__init__( self, *args, **kwargs )
2013-02-19 00:11:43 +00:00
2015-11-18 22:44:07 +00:00
self.start_time = time.clock()
2013-10-02 22:06:06 +00:00
self.is_hydrus_client = True
self.hydrus_args = None
self.hydrus_response_context = None
2013-02-19 00:11:43 +00:00
2013-09-25 20:20:10 +00:00
2015-11-18 22:44:07 +00:00
def finish( self ):
Request.finish( self )
host = self.getHost()
if self.hydrus_response_context is not None:
status_text = HydrusData.ToUnicode( self.hydrus_response_context.GetStatusCode() )
2017-03-02 02:14:56 +00:00
elif hasattr( self, 'code' ):
status_text = str( self.code )
else:
status_text = '200'
2015-11-18 22:44:07 +00:00
message = str( host.port ) + ' ' + HydrusData.ToUnicode( self.method ) + ' ' + HydrusData.ToUnicode( self.path ) + ' ' + status_text + ' in ' + HydrusData.ConvertTimeDeltaToPrettyString( time.clock() - self.start_time )
HydrusData.Print( message )
2013-10-02 22:06:06 +00:00
class HydrusService( Site ):
2013-09-25 20:20:10 +00:00
2017-03-02 02:14:56 +00:00
def __init__( self, service ):
2013-09-25 20:20:10 +00:00
2017-03-02 02:14:56 +00:00
self._service = service
2013-09-25 20:20:10 +00:00
2013-10-02 22:06:06 +00:00
root = self._InitRoot()
2013-09-25 20:20:10 +00:00
2013-10-02 22:06:06 +00:00
Site.__init__( self, root )
2013-09-25 20:20:10 +00:00
2013-10-02 22:06:06 +00:00
self.requestFactory = HydrusRequest
2013-09-25 20:20:10 +00:00
2013-10-02 22:06:06 +00:00
def _InitRoot( self ):
2013-09-25 20:20:10 +00:00
2013-10-02 22:06:06 +00:00
root = Resource()
2013-09-25 20:20:10 +00:00
2017-03-02 02:14:56 +00:00
root.putChild( '', HydrusServerResources.HydrusResourceWelcome( self._service, REMOTE_DOMAIN ) )
2013-10-02 22:06:06 +00:00
root.putChild( 'favicon.ico', HydrusServerResources.hydrus_favicon )
2017-05-31 21:50:53 +00:00
root.putChild( 'robots.txt', HydrusServerResources.HydrusResourceRobotsTXT( self._service, REMOTE_DOMAIN ) )
2013-09-25 20:20:10 +00:00
2013-10-02 22:06:06 +00:00
return root
2013-09-25 20:20:10 +00:00