o
    bp                  
   @   s  d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ zd dlmZ d dlZW n eyO Z zede d	d
 d ddZ[ww d dlZd dlmZ d dlZd dlmZ e  ZdZdZdZdZdZdZ dZ!eeeeee e!gZ"dZ#G dd de$Z%ej&dddgidej'de(dddej'd e)d!d"dej*ejdd#e(d$e)d%dfd&d'Z+d%ej,fd(d)Z-d*ej.d+ed%ej/fd,d-Z0d.e(d%ee1eej2 f fd/d0Z3d4d1d2Z4e5d3kre4  dS dS )5    N)ExecutorProcessPoolExecutor)datetime)partial)freeze_support)SetTuple)webz%aiohttp dependency is not installed: z. z5Please re-install black with the '[d]' extra install z.to obtain aiohttp_cors: `pip install black[d]`)maybe_install_uvloop)versionzX-Protocol-VersionzX-Line-LengthzX-Python-VariantzX-Skip-String-NormalizationzX-Skip-Magic-Trailing-CommazX-Fast-Or-SafezX-DiffzX-Black-Versionc                   @   s   e Zd ZdS )InvalidVariantHeaderN)__name__
__module____qualname__ r   r   N/var/www/secure340b-portal/env/lib/python3.10/site-packages/blackd/__init__.pyr   3   s    r   Zhelp_option_namesz-hz--help)Zcontext_settingsz--bind-hostzAddress to bind the server to.	localhost)typehelpdefaultz--bind-portzPort to listen oni  	bind_host	bind_portreturnc                 C   sN   t jt jd t }tj}td| d|  d|  tj|| |dd d d S )N)levelzblackd version z listening on z port T)hostportZhandle_signalsprint)	loggingbasicConfigINFOmake_appblack__version__outr	   Zrun_app)r   r   appverr   r   r   main7   s
   r&   c               	   C   sb   t  } t }t| }|| jd}||dt	t
|ddtjg tdR ddi | S )N/POST)executor*zContent-Type)Zallow_headersZexpose_headers)r	   Applicationr   aiohttp_corssetupaddZrouterZadd_resourceZ	add_router   handleZResourceOptionsBLACK_HEADERS)r$   r)   Zcorsresourcer   r   r   r    E   s   
	r    requestr)   c              
      s  t ti}z| jtddkrtjdddW S zt| jtt	j
}W n ty4   tjddd Y W S w t| jv rk| jt }zt|\}}W n( tyj } ztjddt d|jd	  dW  Y d }~W S d }~ww d
}t }t| jtd
}t| jtd
}	d
}
| jtddkrd}
t	j|||| |	 d}| j I d H }| jd ur| jnd}||}t }t }||tt	j ||
|dI d H }t| jt!d
}|rt }d| d}d| d}t }||tt	j"||||I d H }tj| j#|||dW S  t	j$y   tjd|d Y S  t	j%y2 } ztjd|t&|dW  Y d }~S d }~w t'yS } zt()d tjd|t&|dW  Y d }~S d }~ww )N1i  z,This server only supports protocol version 1)statustexti  z Invalid line length header valuezInvalid value for z: r   FsafefastT)Ztarget_versionsZis_pyiline_lengthZstring_normalizationZmagic_trailing_commautf8)r7   modezIn	z +0000zOut	)content_typecharsetheadersr5      )r4   r=   )r4   r=   r5   z#Exception during handling a requesti  )*BLACK_VERSION_HEADERr"   r=   getPROTOCOL_VERSION_HEADERr	   ResponseintLINE_LENGTH_HEADERr!   ZDEFAULT_LINE_LENGTH
ValueErrorPYTHON_VARIANT_HEADERparse_python_variant_headerr   argssetbool SKIP_STRING_NORMALIZATION_HEADERSKIP_MAGIC_TRAILING_COMMAFAST_OR_SAFE_HEADERZFileModecontentreadr<   decoder   utcnowasyncioget_event_looprun_in_executorr   Zformat_file_contentsDIFF_HEADERdiffr;   ZNothingChangedZInvalidInputstr	Exceptionr   	exception)r2   r)   r=   r8   valuepyiversionseZskip_string_normalizationZskip_magic_trailing_commar7   r:   Z	req_bytesr<   req_strZthenloopZformatted_strZ	only_diffnowsrc_namedst_namer   r   r   r/   W   s   




 
 r/   rZ   c              
   C   sB  | dkr	dt  fS t  }| dD ]}|dr |tdd  }d|v r,|d^}}n|d }t|dkr=|dd  gng }zPt|}|dvrLtd	t|dkret|d }|d
krd|dkrdtdn|d
krkdnd}d| | }|dkrttj|std| d|	tj|  W q t
tfy   tdw d|fS )Nr[   T,py.r      )      zmajor version must be 2 or 3rg      z$minor version must be 7 for Python 2rh   ZPYz3.z is not supportedzexpected e.g. '3.7', 'py3.5'F)rI   split
startswithlenrC   r   hasattrr!   TargetVersionr.   KeyErrorrE   )rZ   r\   r   Z	major_strrestmajorminorversion_strr   r   r   rG      s<   

rG   c                   C   s   t   t  t  t  d S )N)r
   r   r!   Zpatch_clickr&   r   r   r   r   patched_main   s   
rt   __main__)r   N)6rR   r   concurrent.futuresr   r   r   	functoolsr   multiprocessingr   typingr   r   Zaiohttpr	   r,   ImportErrorier!   Zblack.concurrencyr
   ZclickZ_black_versionr   r"   EventZ_stop_signalrA   rD   rF   rK   rL   rM   rU   r0   r?   rX   r   commandoptionrW   rC   Zversion_optionr&   r+   r    RequestrB   r/   rJ   rn   rG   rt   r   r   r   r   r   <module>   st    
 P
#
