
y X                 @   s   d  d l  m  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l j Z d  d l	 j j
 Z
 d  d l j Z d  d l j j Z d  d l m Z Gd d   d e  Z Gd d   d e j  Z d S)    )datetimeN)sixc               @   s   e  Z d  Z d Z d S)StopWaitingz4 exception raised to stop waiting for a connnection N)__name__
__module____qualname____doc__ r	   r	   E/home/ubuntu/projects/ifolica/build/gunicorn/gunicorn/workers/sync.pyr      s   r   c               @   sp   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d S)
SyncWorkerc             C   sC   | j    \ } } | j d  t j |  |  j | | |  d  S)N   )acceptsetblockingutilZclose_on_exechandle)selflistenerclientaddrr	   r	   r
   r      s    zSyncWorker.acceptc             C   s   yl |  j    t j |  j g  g  |  } | d rk |  j d | d k rc t j |  j d d  n  | d SWn} t j k
 r } zZ | j d t j	 k r |  j
 S| j d t j k r |  j d k  r |  j
 St  n    WYd  d  } ~ Xn Xd  S)Nr   r   )notifyselectZwait_fdsPIPEosreaderrorargserrnoEINTRsocketsEBADFnrr   )r   timeoutreter	   r	   r
   wait    s    

	zSyncWorker.waitc             C   s0   |  j  t j   k r, |  j j d |   d Sd S)Nz!Parent changed, shutting down: %sFT)Zppidr   getppidloginfo)r   r	   r	   r
   is_parent_alive3   s    zSyncWorker.is_parent_alivec             C   s   |  j  d } x |  j r |  j   y |  j |  w WnL t k
 r } z, | j t j t j t j f k rs   n  WYd  d  } ~ Xn X|  j	   s d  Sy |  j
 |  Wq t k
 r d  SYq Xq Wd  S)Nr   )r   aliver   r   EnvironmentErrorr   EAGAINECONNABORTEDEWOULDBLOCKr(   r$   r   )r   r!   r   r#   r	   r	   r
   run_for_one:   s     
zSyncWorker.run_for_onec             C   s   x |  j  r |  j   y |  j |  } Wn t k
 rA d  SYn X| d  k	 r x | D] } | |  j d k rt qU n  y |  j |  WqU t k
 r } z, | j t j t j	 t j
 f k r   n  WYd  d  } ~ XqU XqU Wn  |  j   s d  Sq Wd  S)Nr   )r)   r   r$   r   r   r   r*   r   r+   r,   r-   r(   )r   r!   readyr   r#   r	   r	   r
   run_for_multipleW   s$    
	 zSyncWorker.run_for_multiplec             C   sf   |  j  p d } x |  j D] } | j d  q Wt |  j  d k rU |  j |  n |  j |  d  S)Ng      ?r   r   )r!   r   r   lenr0   r.   )r   r!   sr	   r	   r
   runo   s    zSyncWorker.runc             C   sC  d  } z(yk |  j  j r9 t j | d d |  j  j } n  t j |  j  |  } t j |  } |  j	 | | | |  Wnt j
 j k
 r } z |  j j d |  WYd  d  } ~ Xnyt k
 r } z |  j j d |  WYd  d  } ~ XnBt j k
 rk} z^ | j d t j k r3|  j j d  | j   n& |  j j d  |  j | | | |  WYd  d  } ~ Xn t k
 r} zh | j t j t j f k r|  j j d  n5 | j t j k r|  j j d	  n |  j j d
  WYd  d  } ~ Xn; t k
 r,} z |  j | | | |  WYd  d  } ~ Xn XWd  t j |  Xd  S)Nserver_sideTz*Ignored premature client disconnection. %szClosing connection. %sr   zssl connection closedzError processing SSL request.z Socket error processing request.zIgnoring connection resetzIgnoring EPIPE)cfgZis_sslsslwrap_socketZssl_optionshttpZRequestParserr   nexthandle_requesterrorsZ
NoMoreDatar&   debugStopIterationSSLErrorr   SSL_ERROR_EOFclosehandle_errorr*   r   EPIPE
ECONNRESET	exception	Exceptionr   )r   r   r   r   reqparserr#   r	   r	   r
   r   ~   s6    %%("-zSyncWorker.handlec              C   s5  i  } d  } zyA|  j  j |  |  t j   } t j | | | | j   |  j   \ } } | j   |  j d 7_ |  j |  j	 k r |  j
 j d  d |  _ n  |  j | | j  } zx t | | d  r | j |  n x | D] }	 | j |	  q W| j   t j   | }
 |  j
 j | | | |
  Wd  t | d  rN| j   n  XWn t k
 rwt j t j     Yns t k
 r| r| j r|  j
 j d  y | j t j  | j   Wn t k
 rYn Xt    n    Yn XWd  y |  j  j  |  | | |  Wn" t k
 r/|  j
 j d  Yn XXd  S)Nr   z,Autorestarting worker after current request.Fzwsgi.file_wrapperr@   zError handling requestzException in post_request hook)!r5   Zpre_requestr   nowwsgicreategetsocknameZforce_closer    Zmax_requestsr&   r'   r)   Zstart_response
isinstance
write_filewriter@   accesshasattrr*   r   reraisesysexc_inforE   Zheaders_sentrD   shutdownsocket	SHUT_RDWRr=   Zpost_request)r   r   rF   r   r   environrespZrequest_startZrespiteritemZrequest_timer	   r	   r
   r:      sN    

zSyncWorker.handle_requestN)r   r   r   r   r$   r(   r.   r0   r3   r   r:   r	   r	   r	   r
   r      s   "r   )r   r   r   r   rU   r6   rR   Zgunicorn.httpr8   Zgunicorn.http.wsgirI   Zgunicorn.utilr   Zgunicorn.workers.baseZworkersbaseZgunicornr   rE   r   ZWorkerr   r	   r	   r	   r
   <module>   s   