Ñò
@ó¥Oc           @   só   d  d k  l Z d d k l Z l Z d d k Z d d k l Z l	 Z	 l
 Z
 d d k l Z d d k Z d d k Z d d k Z d d k Z d d k l Z d d k Z e i e ƒ Z d Z d „  Z d „  Z d „  Z e d „ Z d „  Z d S(   i   (   t   VERSIONiÿÿÿÿ(   t   VersionMismatchErrort   AuthenticationRequiredN(   t
   checkTokent   checkTicketst   RenewTicketsTimer(   t   Event(   t   upgradet   exportedt   assetCompatablet   assertAuthenticatedt	   runserverc         C   s   t  |  _ |  S(   N(   t   Truet   _export(   t   obj(    (    s@   /mit/zmobile/testing/lib/python2.6/site-packages/zserv/server.pyR      s    	c         C   sD   t  |  t ƒ p t d ƒ ‚ n |  t j o t t |  ƒ ‚ n d  S(   Ns   Version must be an int(   t
   isinstancet   intt	   TypeErrort   server_versionR   (   t   version(    (    s@   /mit/zmobile/testing/lib/python2.6/site-packages/zserv/server.pyt   assertCompatable   s    c         C   s-   t  |  ƒ p t ƒ  o t d ƒ ‚ n d  S(   Ns   Invalid token.(   R   R   R   (   t   token(    (    s@   /mit/zmobile/testing/lib/python2.6/site-packages/zserv/server.pyR
      s    c      "   C   s"  t  ƒ  } t i t i d „  ƒ t i t i d „  ƒ t i d |  i ƒ t i d ƒ d  } y- t	 i
 t i t	 i t	 i Bt	 i Bd ƒ } Wn6 t t f j
 o$ d  } t i d ƒ t d ƒ n Xz­t i d ƒ y t i | t i t i Bƒ Wn t i d	 ƒ t d ƒ n Xt i d
 ƒ y t ƒ  Wn t i d ƒ t d ƒ n X| o t i d ƒ t | ƒ n t i d ƒ y  t	 i | t t	 i ƒ  ƒ ƒ Wn0 t t f j
 o t i d ƒ t d ƒ n Xt i d ƒ |  |   } t i d ƒ h t d 6} | i | i ƒ  ƒ yS t
 t i  d d ƒ i! i" ƒ  } z* | ~ } | i# d „  | i$ ƒ  Dƒ ƒ Wd  QXWn* t j
 o t i d ƒ t d ƒ n X| i% ƒ  t i d ƒ t& | i' ƒ }	 z¨ y2 |	 i( ƒ  t i d ƒ | i) ƒ  t i d ƒ Wno t* j
 o t i d ƒ nQ t+ j
 o# }
 t i d |
 i, ƒ |
 ‚ n# t- j
 o }
 t. i/ d ƒ n XWd  |	 i0 ƒ  XWd  | d  j	 o1 y t	 i1 | ƒ Wq¯t t f j
 o q¯Xn t	 i2 i3 t i  ƒ o! t i d ƒ t	 i4 t i  ƒ n t	 i2 i3 t i ƒ o! t i d ƒ t	 i4 t i ƒ n Xd  S(   Nc          W   s
   t  d  ƒ S(   i    (   t   exit(   t   args(    (    s@   /mit/zmobile/testing/lib/python2.6/site-packages/zserv/server.pyt   <lambda>   s    c          W   s
   t  d  ƒ S(   i    (   R   (   R   (    (    s@   /mit/zmobile/testing/lib/python2.6/site-packages/zserv/server.pyR       s    s   Starting server: '%s's   Creating lock file.i€  s   Failed to create lock.i   s   Locking lock file.s   Failed to lock lock.s   Upgrading configs.s    Failed to upgrade server config.s   Forking.s   Writing pid to lock file.s   Failed to write PID to lock.s   Initializing server.s   Writing info file.R    s   w+c         s   s   x |  ] } d  | Vq Wd S(   s   %s='%s'
N(    (   t   .0t   i(    (    s@   /mit/zmobile/testing/lib/python2.6/site-packages/zserv/server.pys	   <genexpr>W   s   	 s   Failed to write info file.s   Starting renewal ticket timer.s   Starting server loop.s   Server died for no reason.s   Interrupted. Exiting.s   Exiting with status %ds   Unhandled exception.s   Removing info file.s   Removing lock file.(5   R   t   signalt   SIGHUPt   SIGTERMt   loggert   infot   __name__t   debugt   Nonet   ost   opent   settingst	   LOCK_FILEt   O_WRONLYt   O_CREATt   O_EXCLt   IOErrort   OSErrort   errorR   t   fcntlt   flockt   LOCK_EXt   LOCK_NBR   t   forkt   writet   strt   getpidR   t   updatet   getInfot	   INFO_FILEt   __exit__t	   __enter__t
   writelinest	   iteritemst   setR   t   shutdownt   startt   serve_forevert   KeyboardInterruptt
   SystemExitt   codet	   Exceptiont   loggingt	   exceptiont   stopt   closet   patht   existst   remove(   t   server_classR   t   doforkt   server_startedt   lck_fdt   servert   info_contentst   _[1]t	   info_filet   ticket_timert   e(    (    s@   /mit/zmobile/testing/lib/python2.6/site-packages/zserv/server.pyR      s’    	- ,'
 


	c      	   C   s…  t  i ƒ  } d } | o© z” t  i | d ƒ \ } } | | j ok t  i | ƒ o! t i d ƒ t  i | ƒ } q¬ t  i | ƒ o t  i | ƒ } q¬ t i d ƒ d } n Wd  t  i	 | ƒ XnÀt  i
 ƒ  t  i ƒ  } | o*zyØ |  i d ƒ |  i ƒ  o— t  i | t  i ƒ \ } } | | j ok t  i | ƒ o! t i d ƒ t  i | ƒ } q’t  i | ƒ o t  i | ƒ } q’t i d ƒ d } q¹n$ t i d ƒ t  i | d ƒ d } Wn6 t j
 o* t i d	 ƒ t  i | d ƒ d } n XWd  t  i	 | ƒ Xny t i i ƒ  t i i ƒ  t i i ƒ  t  i d ƒ t  i d ƒ t  i d
 ƒ t t i d ƒ t _ t t i d ƒ t _ d  S(   Ni    s(   Child killed. Grandchild should be dead.s6   WTF. The child didn't exit normally and wasn't killed.iÿÿÿÿi   s5   Timed out waiting for grandchild. Killing grandchild.i   i   s'   Exception in child. Killing grandchild.i   t   a(   R#   R1   t   waitpidt   WIFSIGNALEDR   R,   t   WTERMSIGt	   WIFEXITEDt   WEXITSTATUSt   _exitt   setsidt   waitt   is_sett   WNOHANGt   killt   BaseExceptiont   syst   stdinRG   t   stdoutt   stderrR$   R%   t   LOG_FILE(   t   eventt   pidt   rett   new_pidt   status(    (    s@   /mit/zmobile/testing/lib/python2.6/site-packages/zserv/server.pyR1   {   s\    
 
(   s   exportedR	   s   assertAuthenticateds	   runserver(   t    R    R   t
   exceptionsR   R   R%   t   authR   R   R   t   multiprocessingR   Rb   R#   R-   R   R   RD   t	   getLoggerR    R   t   __all__R   R   R
   t   FalseR   R1   (    (    (    s@   /mit/zmobile/testing/lib/python2.6/site-packages/zserv/server.pyt   <module>   s   0			`