ó »ÏâIc@s dZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z de j fd„ƒYZ de j fd„ƒYZdefd „ƒYZeid d 6ƒZd „Zd ejfd„ƒYZedkr ejeƒndS(s"Windows service. Requires pywin32.iÿÿÿÿN(twspbustpluginstConsoleCtrlHandlercBs2eZdZd„Zd„Zd„Zd„ZRS(s@A WSPBus plugin for handling Win32 console events (like Ctrl-C).cCs t|_tjj||ƒdS(N(tFalsetis_setRt SimplePlugint__init__(tselftbus((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pyRs cCsŠ|jr#|jjdddƒdStj|jdƒ}|dkrg|jjdtjƒddƒn|jjdddƒt|_dS(Ns'Handler for console events already set.tleveli(iis*Could not SetConsoleCtrlHandler (error %r)sSet handler for console events.(RRtlogtwin32apitSetConsoleCtrlHandlerthandlet GetLastErrortTrue(Rtresult((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pytstarts   cCs¨|js#|jjdddƒdSytj|jdƒ}Wntk rUd}nX|dkr…|jjdtjƒddƒn|jjdddƒt|_dS(Ns'Handler for console events already off.R i(iis1Could not remove SetConsoleCtrlHandler (error %r)s#Removed handler for console events.( RRR R R R t ValueErrorRR(RR((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pytstop"s     cCsu|tjtjtjtjtjfkrq|jjd|ƒy|jƒWnt k r_nX|jj ƒdSdS(s,Handle console control events (like Ctrl-C).s#Console event %s: shutting down busii( twin32cont CTRL_C_EVENTtCTRL_LOGOFF_EVENTtCTRL_BREAK_EVENTtCTRL_SHUTDOWN_EVENTtCTRL_CLOSE_EVENTRR RRtexit(Rtevent((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pyR 4s   (t__name__t __module__t__doc__RRRR (((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pyRs   tWin32BuscBsMeZdZd„Zd„Zd„Zd„ZeeeƒZdd„Z RS(s†A Web Site Process Bus implementation for Win32. Instead of time.sleep, this bus blocks using native win32event objects. cCsi|_tjj|ƒdS(N(teventsRtBusR(R((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pyRMs cCs`y|j|SWnJtk r[tjdddd|jtjƒfƒ}||j|<|SXdS(s@Return a win32event for the given state (creating it if needed).iuWSPBus %s Event (pid=%r)N(R tKeyErrort win32eventt CreateEventtNonetnametostgetpid(RtstateR((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pyt_get_state_eventQs  cCs|jS(N(t_state(R((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pyt _get_state\scCs)||_|j|ƒ}tj|ƒdS(N(R+R*R#t PulseEvent(RtvalueR((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pyt _set_state^s gš™™™™™¹?cCs t|ttfƒrh|j|krœtg|D]}|j|ƒ^q.ƒ}tj|dtjƒqœn4|j|krœ|j|ƒ}tj|tjƒndS(s²Wait for the given state(s), KeyboardInterrupt or SystemExit. Since this class uses native win32event objects, the interval argument is ignored. iN( t isinstancettupletlistR)R*R#tWaitForMultipleObjectstINFINITEtWaitForSingleObject(RR)tintervaltsR R((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pytwaitds(( RRRRR*R,R/tpropertyR)R8(((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pyRGs   t _ControlCodescBseZdZd„ZRS(s1Control codes used to "signal" a service via ControlService. User-defined control codes are in the range 128-255. We generally use the standard Python value for the Linux signal and add 128. Example: >>> signal.SIGUSR1 10 control_codes['graceful'] = 128 + 10 cCsAx*|jƒD]\}}||kr |Sq Wtd|ƒ‚dS(s2For the given value, return its corresponding key.s'The given object could not be found: %rN(t iteritemsR(Rtobjtkeytval((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pytkey_fors (RRRR?(((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pyR:vs iŠtgracefulcCsP|dkrtj|ƒn0|dkr8tj|ƒntj|t|ƒdS(NRtrestart(twin32serviceutilt StopServicetRestartServicetControlServicet control_codes(tservicetcommand((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pyt signal_child‹s   t PyWebServicecBsMeZdZdZdZdZdZdZdZ d„Z d„Z d„Z RS(sPython Web Service.sPython Web ServicetpywebsvccCs.ddlm}|jjƒ|jjƒdS(Niÿÿÿÿ(tprocess(tcherrypyRLRRtblock(RRL((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pytSvcDoRun s cCs1ddlm}|jtjƒ|jjƒdS(Niÿÿÿÿ(RL(RMRLtReportServiceStatust win32servicetSERVICE_STOP_PENDINGRR(RRL((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pytSvcStop¥scCstjjtj|ƒƒdS(N(RLRtpublishRFR?(Rtcontrol((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pytSvcOtherªsN( RRRt _svc_name_t_svc_display_name_R%t _svc_deps_t _exe_name_t _exe_args_t_svc_description_RORSRV(((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pyRJ”s  t__main__(RR'tthreadR RR#RQRBtcherrypy.processRRRRR!RtdictR:RFRItServiceFrameworkRJRtHandleCommandLine(((s</usr/lib/python2.7/vendor-packages/cherrypy/process/win32.pyts        9/