§
    K" hóE  ã                   ó   — d Z ddlZddlZddlZddlmZmZ ddlmZ  e	d¦  «        Z
 e	d„ eD ¦   «         ¦  «        Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ d¦  «        ZdS )z$Adjustments are tunable parameters.
é    Né   )ÚHAS_IPV6ÚWIN)ÚPROXY_HEADERS)ÚtÚtrueÚyÚyesÚonÚ1c              #   óf   K  — | ],}|                      ¦   «                              d d¦  «        V — Œ-dS )Ú_ú-N)ÚlowerÚreplace©Ú.0Úheaders     úNc:\xampp_lite_8_4\www\timesheet\venv\Lib\site-packages\waitress/adjustments.pyú	<genexpr>r      sK   è è € ð  ð  Ø)/€F‡L‚L�N„N×Ò˜3 Ñ$Ô$ð ð  ð  ð  ð  ð  ó    c                 ó°   — | €dS t          | t          ¦  «        r| S t          | ¦  «                             ¦   «         } |                      ¦   «         t
          v S )aG  Return the boolean value ``True`` if the case-lowered value of string
    input ``s`` is any of ``t``, ``true``, ``y``, ``on``, or ``1``, otherwise
    return the boolean value ``False``.  If ``s`` is the value ``None``,
    return ``False``.  If ``s`` is already one of the boolean values ``True``
    or ``False``, return it.NF)Ú
isinstanceÚboolÚstrÚstripr   Útruthy©Úss    r   Úasboolr       sK   € ð 	€yØˆuÝ�!•TÑÔð ØˆÝˆA‰Œ�Š‰Œ€AØ�7Š7‰9Œ9�ÐÐr   c                 ó"   — t          | d¦  «        S )z3Convert the given octal string to an actual number.é   )Úintr   s    r   Úasoctalr$   ,   s   € åˆq�!‰9Œ9Ðr   c                 ó¢   — t          | t          ¦  «        r,t          d d„ |                      ¦   «         D ¦   «         ¦  «        } t	          | ¦  «        S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS © )r   )r   Úxs     r   ú
<listcomp>z!aslist_cronly.<locals>.<listcomp>3   s    € ÐDÐDÐD¨A˜aŸgšg™iœiÐDÐDÐDr   )r   r   ÚfilterÚ
splitlinesÚlist©Úvalues    r   Úaslist_cronlyr/   1   sK   € Ý�%�ÑÔð FÝ�tÐDÐD°×1AÒ1AÑ1CÔ1CÐDÑDÔDÑEÔEˆÝ�‰;Œ;Ðr   c                 ó„   — t          | ¦  «        }g }|D ]+} |                      ¦   «         }|                     |¦  «         Œ,|S )z“Return a list of strings, separating the input based on newlines
    and, if flatten=True (the default), also split on spaces within
    each line.)r/   ÚsplitÚextend)r.   ÚvaluesÚresultÚ	subvaluess       r   Úaslistr6   7   sL   € õ ˜5Ñ!Ô!€FØ€FØð !ð !ˆØ—K’K‘M”Mˆ	Ø�Š�iÑ Ô Ð Ð Ø€Mr   c                 ó:   — t          t          | ¦  «        ¦  «        S ©N)Úsetr6   r-   s    r   Úassetr:   C   s   € Ý�v�e‰}Œ}ÑÔÐr   c                 óˆ   — |                       ¦   «         } | r+d|                      d¦  «                             d¦  «        z   } | S )Nú/)r   ÚlstripÚrstripr   s    r   Úslash_fixed_strr?   G   s@   € Ø	�Š‰	Œ	€AØð ,ð �!—(’(˜3‘-”-×&Ò& sÑ+Ô+Ñ+ˆØ€Hr   c                 ó(   — | rt          | ¦  «        nd S r8   )r   r   s    r   Ústr_iftruthyrA   P   s   € ØÐ �3ˆq‰6Œ6ˆ6˜DÐ r   c                 ó   — d„ | D ¦   «         S )zRChecks if the elements in the list are of type socket and
    removes them if not.c                 óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r'   )r   Úsocket)r   Úsocks     r   r)   z"as_socket_list.<locals>.<listcomp>W   s)   € ÐHÐHÐH�T­
°4½¼Ñ(GÔ(GÐHˆDÐHÐHÐHr   r'   )Úsocketss    r   Úas_socket_listrG   T   s   € ð IÐH˜WÐHÑHÔHÐHr   c                   ó   — e Zd ZdS )Ú_str_markerN©Ú__name__Ú
__module__Ú__qualname__r'   r   r   rI   rI   Z   ó   € € € € € Ø€Dr   rI   c                   ó   — e Zd ZdS )Ú_int_markerNrJ   r'   r   r   rP   rP   ^   rN   r   rP   c                   óX  — e Zd ZdZg def‘def‘def‘def‘def‘def‘def‘d	ef‘d
e	f‘def‘def‘def‘de
f‘def‘def‘def‘def‘def‘def‘def‘def‘def‘def‘def‘def‘def‘def‘def‘def‘def‘d ef‘d!ef‘d"ef‘d#ef‘R Z ee¦  «        Z ed$¦  «        Z ed%¦  «        Ze› d&e› �gZd'Zd(Zd(Z e¦   «         Zd)Zd*Zd+Zd,Zd-Zd.Zd/Z d0Z!d1Z"d2Z#d3Z$d4Z%d5Z&d6Z'd*Z(d7Z)d8Z*d)Z+d(Z,d9Z-e.j/        e.j0        d0fgZ1d0Z2d)Z3d*Z4d*Z5g Z6d:Z7d;Z8d<„ Z9e:d=„ ¦   «         Z;e:d>„ ¦   «         Z<d(S )?ÚAdjustmentsz'This class contains tunable parameters.ÚhostÚportÚipv4Úipv6ÚlistenÚthreadsÚtrusted_proxyÚtrusted_proxy_countÚtrusted_proxy_headersÚlog_untrusted_proxy_headersÚclear_untrusted_proxy_headersÚ
url_schemeÚ
url_prefixÚbacklogÚ
recv_bytesÚ
send_bytesÚoutbuf_overflowÚoutbuf_high_watermarkÚinbuf_overflowÚconnection_limitÚcleanup_intervalÚchannel_timeoutÚlog_socket_errorsÚmax_request_header_sizeÚmax_request_body_sizeÚexpose_tracebacksÚidentÚasyncore_loop_timeoutÚasyncore_use_pollÚunix_socketÚunix_socket_permsrF   Úchannel_request_lookaheadÚserver_namez0.0.0.0i�  ú:é   NFTÚhttpÚ Úwaitressi   i    r   i   i   i   éd   é   éx   i   i   @i€  r   zwaitress.invalidc           	      ó:	  — d|v rd|v sd|v rt          d¦  «        ‚d|v rd|v rt          d¦  «        ‚d|v rd|v sd|v rt          d¦  «        ‚d|v rd|v rt          d	¦  «        ‚d|v rd|v sd|v rt          d
¦  «        ‚d|v rd|v rt          d¦  «        ‚d|v rt          j        dt          ¦  «         |                     ¦   «         D ]E\  }}|| j        vrt          d|z  ¦  «        ‚t          | | | j        |         |¦  «        ¦  «         ŒFt          | j        t          ¦  «        rt          | j
        t          ¦  «        s| j        › d| j
        › �g| _        t          j        }| j        st           st          d¦  «        ‚| j        r| j        st          j        }| j        s| j        rt           rt          j        }g }g }| j        D �]¬}d|v r4|                     dd¦  «        \  }}	d|	v r|t+          | j
        ¦  «        }	}n|t+          | j
        ¦  «        }	}t,          r.	 t/          |	¦  «        }	n# t0          $ r t          d¦  «        ‚w xY w	 d|v r,d|v r(|                     d¦  «                             d¦  «        }|dk    rd }t          j        ||	|t          j        t          j        t          j        ¦  «        D ]˜}
|
\  }}}}}|d         dk    s,|d                              dd¦  «        d         |d         f|vrV|                      ||||f¦  «         |                      |d                              dd¦  «        d         |d         f¦  «         Œ™�Œ‘# t0          $ r t          d¦  «        ‚w xY w| j!        �| j"        €t          d¦  «        ‚| j!        €d| _!        | j#        r| j"        €t          d¦  «        ‚| j#        r‹d„ | j#        D ¦   «         | _#        | j#        tH          z
  }|r@t          dd %                    |¦  «        ›dd %                    tH          ¦  «        ›�¦  «        ‚d| j#        v r| j#        dhz
  rt          d ¦  «        ‚n)| j"        �"t          j        d!t          ¦  «         d"h| _#        || _        |  &                    | j'        ¦  «         d S )#NrW   rS   rT   z-host or port may not be set if listen is set.rF   z'socket may not be set if listen is set.z.host or port may not be set if sockets is set.rp   z,unix_socket may not be set if sockets is setz1unix_socket may not be set if host or port is setz+unix_socket may not be set if listen is setrb   z.send_bytes will be removed in a future releasezUnknown adjustment %rrt   zGIPv4 is disabled but IPv6 is not available. Cowardly refusing to start.r   ú]z>Windows does not support service names instead of port numbersú[Ú*r   ú%zInvalid host/port specified.z@trusted_proxy_count has no meaning without setting trusted_proxyzBtrusted_proxy_headers has no meaning without setting trusted_proxyc                 ó6   — h | ]}|                      ¦   «         ’ŒS r'   )r   r   s     r   ú	<setcomp>z'Adjustments.__init__.<locals>.<setcomp>›  s-   € ð *ð *ð *Ø#)�—’‘”ð*ð *ð *r   z.Received unknown trusted_proxy_headers value (z, z) expected one of Ú	forwardedzyThe Forwarded proxy header and the X-Forwarded-{By,Host,Proto,Port,For} headers are mutually exclusive. Can't trust both!z»No proxy headers were marked as trusted, but trusted_proxy was set. Implicitly trusting X-Forwarded-Proto for backwards compatibility. This will be removed in future versions of waitress.zx-forwarded-proto)(Ú
ValueErrorÚwarningsÚwarnÚDeprecationWarningÚitemsÚ
_param_mapÚsetattrr   rS   rI   rT   rP   rW   rD   Ú	AF_UNSPECrU   r   rV   ÚAF_INETÚAF_INET6Úrsplitr   r   r#   Ú	Exceptionr   r>   ÚgetaddrinfoÚSOCK_STREAMÚIPPROTO_TCPÚ
AI_PASSIVEr1   ÚappendrZ   rY   r[   ÚKNOWN_PROXY_HEADERSÚjoinÚcheck_socketsrF   )ÚselfÚkwÚkÚvÚenabled_familiesÚwanted_socketsÚhp_pairsÚirS   rT   r   ÚfamilyÚsocktypeÚprotor   ÚsockaddrÚunknown_valuess                    r   Ú__init__zAdjustments.__init__$  s°  € Ø�rˆ>ˆ>˜v¨˜|˜|¨v¸¨|¨|ÝÐLÑMÔMÐMà�rˆ>ˆ>˜i¨2˜o˜oÝÐFÑGÔGÐGà˜ˆ?ˆ? ¨"  °¸"°°ÝÐMÑNÔNÐNà˜ˆ?ˆ?˜}°Ð2Ð2ÝÐKÑLÔLÐLà˜BÐÐ F¨b L L°F¸b°L°LÝÐPÑQÔQÐQà˜BÐÐ 8¨r > >ÝÐJÑKÔKÐKà˜2ÐÐÝŒMØ@ÕBTñô ð ð —H’H‘J”Jð 	4ð 	4‰DˆAˆqØ˜œÐ'Ð'Ý Ð!8¸1Ñ!<Ñ=Ô=Ð=Ý�D˜!Ð/˜Tœ_¨QÔ/°Ñ2Ô2Ñ3Ô3Ð3Ð3å˜$œ)¥[Ñ1Ô1ð 	7½ØŒI•{ñ:
ô :
ð 	7ð #œiÐ5Ð5¨$¬)Ð5Ð5Ð6ˆDŒKå!Ô+ÐàŒyð 	¥ð 	ÝØYñô ð ð Œ9ð 	.˜TœYð 	.Ý%œ~ÐàŒyð 	/˜TœYð 	/­8ð 	/Ý%œÐàˆØˆØ”ð 6	Añ 6	AˆAØ�aˆxˆxØ Ÿxšx¨¨QÑ/Ô/‘��tð ˜$�;�;Ø$%¥s¨4¬9¡~¤~˜4�Tøà !¥3 t¤y¡>¤>�t�åð ðå˜t™9œ9�D�Døå ð ð ð Ý$ØXñô ð ðøøøð
"AØ˜$�;�; 3¨$ ; ;ØŸ:š: c™?œ?×1Ò1°#Ñ6Ô6�Dà˜3’;�;Ø�DåÔ+ØØØ$ÝÔ&ÝÔ&ÝÔ%ñô ð Uð U�Að >?Ñ:�V˜X u¨a°ð ! œ qÒ(Ð(Ø$ QœK×-Ò-¨c°1Ñ5Ô5°aÔ8¸(À1¼+ÐFÈhÐVÐVà&×-Ò-¨v°xÀÈÐ.QÑRÔRÐRØ Ÿš¨°!¬×):Ò):¸3ÀÑ)BÔ)BÀ1Ô)EÀxÐPQÄ{Ð(SÑTÔTÐTøñ1Uøõ4 ð Að Að AÝ Ð!?Ñ@Ô@Ð@ðAøøøð Ô#Ð/°DÔ4FÐ4NÝØUñô ð ð Ô%Ð-Ø'(ˆDÔ$àÔ%ð 	¨$Ô*<Ð*DÝØWñô ð ð Ô%ð 	?ð*ð *Ø-1Ô-Gð*ñ *ô *ˆDÔ&ð "Ô7Õ:MÑMˆNØð Ý �jð —y’y Ñ0Ô0Ð0Ð0°$·)²)Õ<OÑ2PÔ2PÐ2PðRñô ð ð ˜tÔ9Ð9Ð9ØÔ.°+°Ñ>ð :õ !ð3ñô ð øð ÔÐ+ÝŒMðGõ #ñ	ô ð ð +>Ð)>ˆDÔ&à$ˆŒà×Ò˜4œ<Ñ(Ô(Ð(Ð(Ð(s   È"H2È2IÉDMÍM4c                 ó˜  — ddg}| j         D ]j\  }}|                     dd¦  «        }|t          u r.|                     |¦  «         |                     d|z   ¦  «         ŒR|                     |dz   ¦  «         Œkdddœ}t	          j        |d	|¦  «        \  }}|D ]°\  }}|                     d¦  «                             dd¦  «        }	|	d
k    r.d                     |                     d
d	¦  «        |¦  «        |d
<   Œb|	                     d¦  «        r|	dd…         }	d||	<   Œ‡|	dv rd||	<   Œ‘| j	        |	         t          u rd||	<   Œ«|||	<   Œ±||fS )zøPre-parse command line arguments for input into __init__.  Note that
        this does not cast values into adjustment types, it just creates a
        dictionary suitable for passing into __init__, where __init__ does the
        casting.
        ÚhelpÚcallr   r   zno-ú=F)r§   r¨   rw   rW   z{} {}Úno_é   NÚfalseTr   )
Ú_paramsr   r    r”   Úgetoptr=   ÚformatÚgetÚ
startswithr‰   )
ÚclsÚargvÚ	long_optsÚoptÚcastr™   ÚoptsÚargsr.   Úparams
             r   Ú
parse_argszAdjustments.parse_args¾  s‘  € ð ˜VÐ$ˆ	Øœð 	,ð 	,‰IˆC�Ø—+’+˜c 3Ñ'Ô'ˆCØ•vˆ~ˆ~Ø× Ò  Ñ%Ô%Ð%Ø× Ò  ¨¡Ñ-Ô-Ð-Ð-à× Ò   s¡Ñ+Ô+Ð+Ð+ð Øð
ð 
ˆõ
 ”] 4¨¨YÑ7Ô7‰
ˆˆdØð 	"ð 	"‰JˆC�Ø—J’J˜s‘O”O×+Ò+¨C°Ñ5Ô5ˆEà˜Ò Ð Ø&Ÿ~š~¨b¯fªf°X¸rÑ.BÔ.BÀEÑJÔJ��8‘Øà×Ò Ñ&Ô&ð "Ø˜a˜b˜bœ	�Ø#��5‘	�	ØÐ*Ð*Ð*Ø ��5‘	�	Ø” Ô&­&Ð0Ð0Ø"��5‘	�	à!��5‘	�	à�4ˆxˆr   c                 óp  — d}d}d}|D ]ˆ}|j         t          j        k    s|j         t          j        k    r|j        t          j        k    rd}ŒDt          t          d¦  «        r-|j         t          j        k    r|j        t          j        k    rd}Œ†d}Œ‰|r|rt          d¦  «        ‚|rt          d¦  «        ‚d S )NFTÚAF_UNIXz+Internet and UNIX sockets may not be mixed.z1Only Internet or UNIX stream sockets may be used.)	r    rD   rŒ   r�   Útyper‘   Úhasattrr¼   r„   )r²   rF   Úhas_unix_socketÚhas_inet_socketÚhas_unsupported_socketrE   s         r   r—   zAdjustments.check_socketsç  sÚ   € àˆØˆØ!&ÐØð 	.ð 	.ˆDà”�vœ~Ò-Ð-°´ÅÄÒ1OÐ1OØ”)�vÔ1Ò1Ð1Ø"&��å� 	Ñ*Ô*ð.à”K¥6¤>Ò1Ð1Ø”I¥Ô!3Ò3Ð3à"&��à)-Ð&Ð&Øð 	L˜ð 	LÝÐJÑKÔKÐKØ!ð 	RÝÐPÑQÔQÐQð	Rð 	Rr   )=rK   rL   rM   Ú__doc__r   r#   r    r6   rA   r:   r?   r$   rG   r­   Údictr‰   rI   rS   rP   rT   rW   rX   rY   rZ   r9   r[   r\   r]   r^   r_   rm   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rp   rq   rD   ÚSOL_TCPÚTCP_NODELAYÚsocket_optionsrn   ro   rU   rV   rF   rr   rs   r¥   Úclassmethodrº   r—   r'   r   r   rR   rR   b   sÁ  € € € € € Ø1Ð1ð#Ø	�ˆð#à	�ˆð#ð 
�Ðð#ð 
�Ðð	#ð
 
�6Ðð#ð 
�CÐð#ð 
˜,Ð'ð#ð 
 Ð$ð#ð 
! %Ð(ð#ð 
'¨Ð/ð#ð 
)¨&Ð1ð#ð 
�sÐð#ð 
�Ð'ð#ð 
�CÐð#ð 
�sÐð#ð  
�sÐð!#ð" 
˜CÐ ð##ð$ 
! #Ð&ð%#ð& 
˜3Ðð'#ð( 
˜SÐ!ð)#ð* 
˜SÐ!ð+#ð, 
˜CÐ ð-#ð. 
˜fÐ%ð/#ð0 
# CÐ(ð1#ð2 
! #Ð&ð3#ð4 
˜fÐ%ð5#ð6 
�,Ðð7#ð8 
! #Ð&ð9#ð: 
˜fÐ%ð;#ð< 
˜Ðð=#ð> 
˜gÐ&ð?#ð@ 
�NÐ#ðA#ðB 
% cÐ*ðC#ðD 
˜ÐðE#ð #€GðJ ��g‘”€Jð ˆ;�yÑ!Ô!€Dð ˆ;�tÑÔ€DàÐÐ˜ÐÐÐ€Fð €Gð €Mð Ðð
  ˜C™EœEÐð #(Ðð %)Ð!ð €Jð €Jð €Eð €Gð €Jð €Jð
 €Oð %Ðð
 €Nð Ðð Ðð €Oð Ðð %Ðð 'Ðð Ðð €Kð Ðð 
Œ˜Ô+¨QÐ/ð€Nð
 Ðð Ðð €Dð €Dð €Gð !"Ðð
 %€KðX)ð X)ð X)ðt ð&ð &ñ „[ð&ðP ðRð Rñ „[ðRð Rð Rr   rR   )rÂ   r®   rD   r…   Úcompatr   r   Úproxy_headersr   Ú	frozensetr   r•   r    r$   r/   r6   r:   r?   rA   rG   r   rI   r#   rP   rR   r'   r   r   ú<module>rË      s§  ððð à €€€Ø €€€Ø €€€à !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ø (Ð (Ð (Ð (Ð (Ð (à	ˆÐ7Ñ	8Ô	8€à�ið  ð  Ø3@ð ñ  ô  ñ ô Ð ð
ð ð ðð ð ð
ð ð ð	ð 	ð 	ðð ð ðð ð ð!ð !ð !ðIð Ið Ið	ð 	ð 	ð 	ð 	�#ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�#ñ 	ô 	ð 	ðZRð ZRð ZRð ZRð ZRñ ZRô ZRð ZRð ZRð ZRr   