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