a
    eh                     @   s,  d 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	m
Z
 edZedZdd Zd	d
 Zd8ddZdd Zg dZg dZeeedZeeedZi ZedD ]Zeeee < eeee < qededg dZg dZi ZedD ]Zed eee < q eeedZeeededeededgdZeeZdd Z eeedeedeedgdedgdZ!ee!Z"d d! Z#g d"Z$g d#Z%d$d% Z&d&d' Z'd(d) Z(d*d+ Z)G d,d- d-Z*G d.d/ d/e*Z+G d0d1 d1e+Z,G d2d3 d3e+Z-G d4d5 d5e*Z.G d6d7 d7e*Z/dS )9zUtility functions
    N   )QUOTED_PAIR_REQUOTED_STRING_REZwaitresszwaitress.queuec                 C   s   |  d}|dkr|d7 }|S )zEReturns the position just after a double newline in the given string.s   

r      )find)spos r	   N/var/www/html/requester/venv/lib/python3.9/site-packages/waitress/utilities.pyfind_double_newline   s    
r   c                  G   s
   d | S )N join)argsr	   r	   r
   concat)   s    r    c                 C   s
   | | S Nr   )seqfieldr	   r	   r
   r   -   s    r   c                 C   s   d|  d S )N()r	   )r   r	   r	   r
   group1   s    r   )sunmontuewedthufrisat)ZsundayZmondayZtuesdayZ	wednesdayZthursdayZfridayZsaturday|      z
[0-9][0-9]:)janfebmaraprmayjunjulaugsepoctnovdec   ,z[0-9][0-9]?z[0-9]+Zgmtc              	   C   sL   | j }t|dt|d t|dt|dt|dt|ddddf	S )Nr   r!            r    r   )r   intmonmap)mgr	   r	   r
   unpack_rfc822v   s    





r8   -c              	   C   sd   | j }|d}t|dkr"d| }t|t|d t|dt|dt|dt|ddddf	S )	Nr   r1   Z19r!   r2   r3   r    r   )r   lenr4   r5   )r6   r7   yrr	   r	   r
   unpack_rfc850   s    




r<   )MonTueWedThuFriSatSun)NJanFebMarAprMayJunJulAugSepOctNovDecc           
   	   C   s:   t | \	}}}}}}}}}	dt| |t| ||||f S )Nz#%s, %02d %3s %4d %02d:%02d:%02d GMT)timegmtimeweekdayname	monthname)
whenyearmonthdayhhmmsswdyzr	   r	   r
   build_http_date   s    r^   c                 C   st   |   } t| }|r:| t| kr:ttt|}n6t	| }|rl| t| krlttt
|}ndS |S )Nr   )lower
rfc850_regmatchendr:   r4   calendartimegmr<   
rfc822_regr8   )dr6   retvalr	   r	   r
   parse_http_date   s    

rh   c                 C   st   |  drP| drPt| }|rh| t| krh| dd } td| } | S n|  dsh| dsh| S tdd S )N"r   z\1zInvalid quoting in value)	
startswithendswithr   ra   rb   r:   r   sub
ValueError)valuematchesr	   r	   r
   undquote   s    
rq   c              
   C   st   zt | }W n2 ty@ } z|jtjkr, W Y d }~n8d }~0 0 t|jrpzt |  W n tyn   Y n0 d S r   )osstatOSErrorerrnoENOENTS_ISSOCKst_moderemove)pathstexcr	   r	   r
   cleanup_unix_socket   s    r}   c                   @   s.   e Zd ZdZdZdd Zd
ddZdd	 ZdS )Error  Internal Server Errorc                 C   s
   || _ d S r   )body)selfr   r	   r	   r
   __init__  s    zError.__init__Nc                 C   sZ   | j  d| j }| j d| j }|r,|nd}d| d}|| d}dg}|||fS )Nr   z

serverz

(generated by r   zutf-8)zContent-Typeztext/plain; charset=utf-8)codereasonr   encode)r   identstatusr   tagheadersr	   r	   r
   to_response  s    zError.to_responsec                 c   s"   |   \}}}||| |V  d S r   )r   )r   environZstart_responser   r   r   r	   r	   r
   wsgi_response  s    
zError.wsgi_response)N)__name__
__module____qualname__r   r   r   r   r   r	   r	   r	   r
   r~      s
   

r~   c                   @   s   e Zd ZdZdZdS )
BadRequesti  zBad RequestNr   r   r   r   r   r	   r	   r	   r
   r     s   r   c                   @   s   e Zd ZdZdZdS )RequestHeaderFieldsTooLargei  zRequest Header Fields Too LargeNr   r	   r	   r	   r
   r     s   r   c                   @   s   e Zd ZdZdZdS )RequestEntityTooLargei  zRequest Entity Too LargeNr   r	   r	   r	   r
   r   !  s   r   c                   @   s   e Zd ZdZdZdS )InternalServerErrorr   r   Nr   r	   r	   r	   r
   r   &  s   r   c                   @   s   e Zd ZdZdZdS )ServerNotImplementedi  zNot ImplementedNr   r	   r	   r	   r
   r   +  s   r   )r   )0__doc__rc   ru   loggingrr   rers   rP   Zrfc7230r   r   	getLoggerloggerZqueue_loggerr   r   r   r   Z
short_daysZ	long_daysZshort_day_regZlong_day_regZdaymaprangeiZhms_regmonthsr5   Z
months_regZrfc822_datecompilere   r8   Zrfc850_dater`   r<   rR   rS   r^   rh   rq   r}   r~   r   r   r   r   r   r	   r	   r	   r
   <module>   s|   







