
    O=dTH                        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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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mZ d dlmZ d dlZ ee
dd          Z ed                                          Z	 d dl m Z  d Z!n# e"$ r d	 Z!Y nw xY w	 	 d3dZ#ej$        j%        ej$        j&        fZ'd Z(d Z)d4dZ*d Z+ej,        -                    d          rd4dZ.d Z/ne
j0        Z/d Z0d Z1d5dZ2d Z3d Z4d Z5	 d dl
m6Z6 n# e"$ r d Z6Y nw xY wd Z7d4dZ8d4d Z9d! Z:d" Z;d# Z<d$ Z=d6d%Z>d& Z?d4d'Z@d( ZAd) ZBd7d+ZCd, ZDd- ZEd. ZFd/ ZGd6d0ZHd1 ZId2 ZJdS )8    N)AppImportError)SUPPORTED_WORKERSdevnullz	/dev/nullz
    connection keep-alive proxy-authenticate proxy-authorization
    te trailers transfer-encoding upgrade
    server date
    setproctitlec                 *    t          d| z             d S )Nzgunicorn: %sr   titles    7D:\Sites\api_v1\venv\Lib\site-packages\gunicorn/util.py_setproctitler   2   s    ^e+,,,,,    c                     d S N r	   s    r   r   r   5   s    r    gunicorn.workers.sync.SyncWorkergunicorn.workersc                     t          j        |           r| S |                     d          r|                     d          d         }	 |                    dd          \  }}n# t
          $ r |}|}Y nw xY w	 t          j        |||          S # t          $ r* t          j
                    }d}t          || |fz            w xY w|                     d          }t          |          dk    r	 |                     d          r
| dd          } | t          v r!t          |                              d          }nN	 t          j        d||           S # t          $ r* t          j
                    }d}t          || |fz            w xY w|                    d          }		 t          j        d                    |                    }
n.#  t          j
                    }d}t          || |fz            xY wt%          |
|	          S )	Nzegg:   #z)class uri %r invalid or not found: 

[%s].Tgunicorn)inspectisclass
startswithsplitrsplit
ValueErrorpkg_resourcesload_entry_point	Exception	traceback
format_excRuntimeErrorlenr   pop	importlibimport_modulejoingetattr)uridefaultsection	entry_strdistnameexcmsg
componentsklassmods              r   
load_classr6   9   s;   s 

~~f +#IIf%%a(		"))#q11JD$$ 	 	 	DDDD		1 1$FFF 	1 	1 	1&((C?Csc3Z/000	1
 YYs^^
z??a9>>#&& "abb'C+++!23!7!=!=c!B!BJ9(9"GS   ! 9 9 9#.00CGC&sc3Z'78889
 r""	1)#((:*>*>??CC	1&((C?Csc3Z/000sE"""s6   A" "A32A37B 4C7E 4F'G +G-c                     t          j        |           }d}|j                                        D ]}|j        t
          v r|dz  }|S )Nr   r   )r   	signature
parametersvalueskindpositionals)fsigarityparams       r   	get_arityrA   q   sP    

A

CE&&((  :$$QJELr   c                 4    t          j        |           j        S )z get the username for a user id)pwdgetpwuidpw_name)uids    r   get_usernamerG   |   s    <$$r   Fc                 .   |rz| r#	 t          |           }n# t          $ r d}Y nw xY wt          |          dz  }|rt          j        ||           n+|t          j                    k    rt          j        |           | rt          j        |            dS dS )z) set user and group of workers processes FiN)rG   KeyErrorabsos
initgroupsgetgidsetgidsetuid)rF   gidrL   usernames       r   set_owner_processrR      s       	##',, # # #"


#
 #hh# 	M(C((((BIKKIcNNN
 
	# s    %%c                 2    t          j        | ||           d S r   )rK   chown)pathrF   rP   s      r   rT   rT      s    HT3r   winc                 <    | |           |r|}n&t           j                            |          \  }}|pd}d}|dk     r>t          j        |          }|r|sn||v rd S t	          j        |           |dz  }|dk     >t          j        d|z   t          d           d S )Nr   gMbP?g      ?   z)tests may fail, delete still pending for    )
stacklevel)	rK   rU   r   listdirtimesleepwarningswarnRuntimeWarning)funcpathnamewaitalldirnamer0   timeoutLs          r   _waitforrg      s    X 	%GGGMM(33MGTnG mm 
7##A 1  TQYYJwqLG mm 	AHL$	4 	4 	4 	4 	4 	4r   c                 :    t          t          j        |            d S r   )rg   rK   unlink)filenames    r   _unlinkrk      s    H%%%%%r   c                     	 t          |            d S # t          $ r+}|j        t          j        t          j        fvr Y d }~d S d }~ww xY wr   )rk   OSErrorerrnoENOENTENOTDIR)rj   errors     r   ri   ri      sg       ;u|U];;; <;;;;;s    
A AAc                     	 t          j        t           j        |            n"# t           j        $ r Y dS t          $ r Y dS w xY wdS )NFT)socket	inet_ptonAF_INET6rq   r   )addrs    r   is_ipv6rw      sa    $////<   uu   uu4s   " A	A A8000c                    t          j        d|           rt          j        d|           d         S |                     d          r;| dd          }	 t	          |          S # t
          $ r t          d|z            d w xY w|                     d          r|                     d          d         } | |}}d| v rGd	| v rC|                     d	          d
         dd          }|                     d          |gz   d         }n3d| v r%|                     d          |gz   d d         \  }}n
| dk    rd|}}	 t	          |          }n # t
          $ r t          d|z            w xY w|                                |fS )Nz
unix:(//)?r   zfd://   z"%r is not a valid file descriptor.ztcp://r   []r   z]::rX    z0.0.0.0z%r is not a valid port number.)rematchr   r   intr   r$   lower)netlocdefault_portfdhostports        r   parse_addressr      s   	xv&& 3xv..r22!! TABBZ	Tr77N 	T 	T 	TCbHIItS	T "" +h''*$D
f}}||C  #ABB'T""l^3Q7	ll3''<.8"1"=
dd	2dD4yy D D D;dBCCCD ::<<s   A   A>4E E!c                     t          j         | t           j                  }|t           j        z  }t          j         | t           j        |           d S r   )fcntlF_GETFD
FD_CLOEXECF_SETFDr   flagss     r   close_on_execr      s>    KEM**E	UE	KEM5)))))r   c                     t          j         | t           j                  t          j        z  }t          j         | t           j        |           d S r   )r   F_GETFLrK   
O_NONBLOCKF_SETFLr   s     r   set_non_blockingr      s8    KEM**R]:E	KEM5)))))r   c                 \    	 |                                   d S # t          j        $ r Y d S w xY wr   )closers   rq   )socks    r   r   r     s<    

<   s    ++)
closerangec                 v    t          | |          D ]'}	 t          j        |           # t          $ r Y $w xY wd S r   )rangerK   r   rm   )fd_lowfd_highr   s      r   r   r     sY    (( 	 	B   	 	s   )
66c                     t          |t                    r|                    d          }dt          |          z  }d                    |                    d          |dg          }|                     |           d S )Nzutf-8z%X
r   s   
)
isinstancestrencoder%   r)   sendall)r   data
chunk_sizechunks       r   write_chunkr     ss    $ ${{7##CII%JHHj''00$@AAELLr   c                 T    |rt          | |          S |                     |           d S r   )r   r   )r   r   chunkeds      r   writer     s2     '4&&&LLr   c                    |                                  }|dk    rV	 |                     d           t          | ||          |                     d           S # |                     d           w xY wt          | ||          S )Ng        r   r   )
gettimeoutsetblockingr   )r   r   r   re   s       r   write_nonblockr   "  s    ooG#~~	 QtW--QDQT4)))s   %A A.c                    t          j        d          |t          j        |          dz  }t          j        d          t	          |          |t          |          |fz  }t          | |                    d                     d S )Nz    <html>
      <head>
        <title>%(reason)s</title>
      </head>
      <body>
        <h1><p>%(reason)s</p></h1>
        %(mesg)s
      </body>
    </html>
    )reasonmesgzl    HTTP/1.1 %s %s
    Connection: close
    Content-Type: text/html
    Content-Length: %d
    
    %slatin1)textwrapdedenthtmlescaper   r%   r   r   )r   
status_intr   r   
html_errorhttps         r   write_errorr   .  s     
" 
	 
	 dk$&7&788
9J ? 
   *oovs:
CDD 4X../////r   c                     t          j                    d         }	 | |j        j        | j        u r	 ~dS |j        }| 	 ~dS # ~w xY w)zCheck whether calling a function raised a ``TypeError`` because
    the call failed or because something in the function raised the
    error.

    :param f: The function that was called.
    :return: ``True`` if the call failed.
    rX   NFT)sysexc_infotb_framef_code__code__tb_next)r=   tbs     r   _called_with_wrong_argsr   E  se     
	Bn{!QZ// BB B n  BBBs   A 	A Ac           	         |                      dd          }t          |          dk    rd}n|d         |d         }} 	 t          j        |           }ns# t          $ rf |                     d          rOt          j                            |           r0d}t	          || 	                    dd          d         |fz             w xY w	 t          j        |d	          j        }n # t          $ r t          d
|z            w xY wt          |t          j                  r|j        }d x}}nt          |t          j                  rt          |j        t          j                  st          d|z            |j        j        }	 d |j        D             }d |j        D             }n2# t,          $ r t          d|z            w xY wt          d
|z            t.          j        j        t.          j        k    }		 t7          ||          }
nE# t8          $ r8 |	rt;          j        t?          j                       t          d|d| d          w xY w|x	  |
|i |}
nn# tB          $ ra}tE          |
          rLt          d#                    t;          j$        tB          |                    %                                           d }~ww xY w|
t          d|z            tM          |
          st          d          |
S )Nr}   r   applicationr   z.pyz1Failed to find application, did you mean '%s:%s'?r   eval)modez9Failed to parse %r as an attribute name or function call.z,Function reference must be a simple name: %rc                 6    g | ]}t          j        |          S r   )astliteral_eval).0args     r   
<listcomp>zimport_app.<locals>.<listcomp>  s#    EEEcC$S))EEEr   c                 L    i | ]!}|j         t          j        |j                  "S r   )r   r   r   value)r   kws     r   
<dictcomp>zimport_app.<locals>.<dictcomp>  s)    WWWRbfc.rx88WWWr   z/Failed to parse arguments as literal values: %rzFailed to find attribute z in r~   z%Failed to find application object: %rz$Application object must be callable.)'r   r%   r'   r(   ImportErrorendswithrK   rU   existsr   r   parsebodySyntaxErrorr   r   NameidCallra   argskeywordsr   loggingrootlevelDEBUGr*   AttributeErrorr"   print_exceptionr   r   	TypeErrorr   r)   format_exception_onlystripcallable)modulepartsobjr5   r2   
expressionr0   r   kwargsis_debugappes               r   
import_appr   _  sj   LLa  E
5zzQAha%f--   ??5!! 	EbgnnV&<&< 	EECcV]]3%:%:1%=s$CCDDD	
Ys0005

 
 
 
G#M
 
 	


 *ch'' 
}vv	J	)	) 
*/3844 	W !ORU!UVVV!	EEZ_EEEDWW:CVWWWFF 	 	 	 !ACG  	 G#M
 
 	
 |!W]2HTc4   T T T 	7%s|~~66nTTT666RSSST 	#t&v&&CC 	 	 	 's++ $GGI;IqIIJJPPRR   	 {DsJKKKC== ECDDDJsJ   A A0CC# #D "F$ $G6H AI	I 
K"AJ>>Kc                  n   	 t          j        t           j        d                   } t          j        t          j                              }| j        |j        k    r#| j        |j        k    rt           j        d         }nt          j                    }n## t          $ r t          j                    }Y nw xY w|S )NPWD)rK   statenvirongetcwdst_inost_devr!   )abcwds      r   r   r     s    GBJu%&&GBIKK  8qxAH$8$8*U#CC)++C   ikkJs   BB B21B2c                 t    | t          j                     } t          j                            | dd          }|S )z@Return the current date and time formatted for a message header.NFT)	localtimeusegmt)r\   emailutils
formatdate)	timestampss     r   	http_dater    s4    IKK	yE$GGAHr   c                 \    |                                                                  t          v S r   )r   r   hop_headers)headers    r   
is_hoppishr    s!    <<>>!![00r   c                    dt           j        vrxt          j                    rt          j        d           t          j                     t          j                    rt          j        d           t          j        d           | s{t          dd           t          j        t          t           j	                  dk    rt          j
        d           t          j
        d           t          j
        d           dS t          j        t          t           j	                  dk    r)t          j        d           t          j
        d           fd} |t          j        d            |t          j        d           dS dS )	z~    Standard daemonization of a process.
    http://www.svbug.com/documentation/comp.unix.programmer-FAQ/faq_2.html#SEC16
    GUNICORN_FDr         r   rX   c                     	 |                                  }||k    r?|                                 r-t          j        |           t          j        |           d S d S d S # t
          $ r Y d S w xY wr   )filenoisattyrK   r   dup2r   )stream	fd_expectr   fd_nulls      r   redirectzdaemonize.<locals>.redirect  s~    BY6==??,,,,, ' &   DDs   AA   
A.-A.N)rK   r   fork_exitsetsidumaskr   openREDIRECT_TOO_RDWRr  r   r   stdoutstderr)enable_stdio_inheritancer  r  s     @r   	daemonizer    se   
 BJ&&799 	HQKKK
	799 	HQKKK
 ( ;	$
 q!gk2955G!||###GGQGGQ gk2955G
 !||###4     HSZ###HSZ#####W '&r   c                      	 t          j        t          j        d                     d S # t          $ r? t          j        t          j                    dt          j                               Y d S w xY w)N@   r   )randomseedrK   urandomNotImplementedErrorr\   getpidr   r   r   r   r     sp    :BJrNN##### : : :ty{{{{BIKKK8999999:s   &* AA32A3c                     	 t          | d          }n(# t          $ r}t          d| d|d          d }~ww xY w|                                 d S )Nr   zError: 'z' isn't writable [r|   )r  IOErrorr$   r   )rU   r=   r   s      r   check_is_writeabler&  &  sh    JsOO J J JlaaaHIIIJGGIIIIIs    
838utf8c                     t          | t                    r| S t          | t                    st          d| z            |                     |          S )z+Converts a string argument to a byte stringz%r is not a string)r   bytesr   r   r   )r   encodings     r   to_bytestringr+  .  sQ    % eS!! 6,u4555<<!!!r   c                     t          | d          sdS 	 |                                  n## t          t          t          j        f$ r Y dS w xY wdS )Nr  FT)hasattrr  r   r%  ioUnsupportedOperation)r   s    r   
has_filenor0  8  s`    3!! u

GR%<=   uu 4s   ) A	A	c                 R   t          dt          j                   |                                 }t	          |          D ].\  }}|dk    rd|z  }t          d|z  t          j                   /t          dt          j                   t          j                                         d S )Nz!!!)filer   zWARNING: %sz!!! %sz!!!
)printr   r  
splitlines	enumerateflush)r2   linesilines       r   r_   r_   E  s    	%cj!!!!NNEU## 0 0466 4'DhoCJ/////	'
####Jr   c                 0     t                       fd}|S )Nc           
      ^     |dddt          t                              fg           gS )Nz500 Internal Server Error)zContent-Typez
text/plainzContent-Length)r   r%   )r   start_responser2   s     r   r   zmake_fail_app.<locals>.appU  s?    2*s3s88}}-5
 	 	 	 ur   )r+  )r2   r   s   ` r   make_fail_appr=  R  s0    


C     Jr   c                     |                      d          rEt          j                            d| z             }|                    |j        dd                    S t          j                            |           S )Nz//r   r   )rU   )r   urllibr   urlsplit_replacerU   )r+   r   s     r   split_request_urirB  _  se    
~~d 3
 %%cCi00~~5:abb>~222<  %%%r   c                 n    	 |
 |             }|j         |ur|                    |          |# d }d }w xY wr   )__traceback__with_traceback)tpr   r   s      r   reraiserG  l  sQ    =BDDEb((&&r***				s   ,. 4c                 P    t          | t                    r| S t          | d          S )Nr   )r   r   )r   s    r   bytes_to_strrI  x  s)    !S q(r   c                 f    t           j                            |                               d          S )Nzlatin-1)r?  r   unquote_to_bytesdecode)strings    r   unquote_to_wsgi_strrN  ~  s&    <((0077	BBBr   )r   r   )F)rx   r   )r'  )Kr   email.utilsr   rn   r   r   r'   r   r.  r   rK   rC   r  r   rs   r   r   r\   r"   r^   r   gunicorn.errorsr   gunicorn.workersr   urllib.parser?  r*   r  setr   r  r   r   r   r6   	ParameterPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORDr<   rA   rG   rR   rT   platformr   rg   rk   ri   rw   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r&  r+  r0  r_   r=  rB  rG  rI  rN  r   r   r   <module>rX     s`  
 


             				  				 



  				  



            * * * * * * . . . . . .    gb)[11 c  		 ))))))- - - -       
 ?)/# /# /# /#f %+  % % %
   .   <5!! %4 4 4 4B& & & & iG       >* * ** * *
  	            	* 	* 	* 	*0 0 0.  4P P Pf     1 1 1P$ P$ P$ P$f: : :  " " " "
 
 

 
 

 
 
	& 	& 	&	 	 	 	  C C C C Cs$   	B B! B!D DD