B
    Khh              
   @   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 yd dlmZ dd	lmZ W n< ek
r Z zed
e dd d dW ddZ[X Y nX d dlZd dlZd dlmZ d dlmZ e  ZdZdZdZdZdZ dZ!dZ"dZ#dZ$ee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e+e,dd'd(d)Z.ej/d*d+d,Z0ej1eej2d-d.d/Z3e+ee4eej5 f d0d1d2Z6dd*d3d4Z7e8d5kre7  dS )6    N)ExecutorProcessPoolExecutor)datetime)partial)freeze_support)SetTuple)web   )corsz%aiohttp dependency is not installed: z. z5Please re-install black with the '[d]' extra install z.to obtain aiohttp_cors: `pip install black[d]`)version)maybe_install_uvloopzX-Protocol-VersionzX-Line-LengthzX-Python-VariantzX-Skip-Source-First-LinezX-Skip-String-NormalizationzX-Skip-Magic-Trailing-Commaz	X-PreviewzX-Fast-Or-SafezX-DiffzX-Black-Versionc               @   s   e Zd ZdS )InvalidVariantHeaderN)__name__
__module____qualname__ r   r   2/tmp/pip-install-vv81h98y/black/blackd/__init__.pyr   8   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   main<   s
    r(   )r   c           	   C   s>   t jttddgd} t }| t dtt|dg | S )NContent-Type)Zallow_headers)middlewares/)executor)r)   )	r	   Applicationr   BLACK_HEADERSr   Z
add_routespostr   handle)r&   r,   r   r   r   r"   J   s
    r"   )requestr,   r   c          
      s2  t ti}y| jtddkr,tjdddS yt| jtt	j
}W n tk
rb   tjdddS X t| jkr| jt }yt|\}}W q tk
r } z tjddt d|jd	  dS d }~X Y qX n
d
}t }t| jtd
}t| jtd
}	t| jtd
}
t| jtd
}d
}| jtddkr8d}t	j||||
| |	 |d}| j I d H }| jd k	rv| jnd}||}t }d}|
r|dd }|d | }||d  }t  }|!|t"t	j#|||dI d H }||dd  dkr|$dd}||krt	j%|| }|| }t| jt&d
}|rt }d| d}d| d}t  }|!|t"t	j'||||I d H }tj| j(|||dS  t	j%k
r   tjd|dS  t	j)k
r } ztjd|t*|dS d }~X Y n> t+k
r, } zt,-d tjd|t*|dS d }~X Y nX d S )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_lengthskip_source_first_lineZstring_normalizationZmagic_trailing_commapreviewutf8 
r
   )r6   modez
zIn	z +0000zOut	)content_typecharsetheadersr4      )r3   rA   )r3   rA   r4   z#Exception during handling a requesti  ).BLACK_VERSION_HEADERr$   rA   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SKIP_SOURCE_FIRST_LINEPREVIEWFAST_OR_SAFE_HEADERZFileModecontentreadr@   decoder   utcnowfindasyncioZget_event_loopZrun_in_executorr   Zformat_file_contentsreplaceZNothingChangedDIFF_HEADERZdiffr?   ZInvalidInputstr	Exceptionr   	exception)r1   r,   rA   r7   valuepyiversionseZskip_string_normalizationZskip_magic_trailing_commar8   r9   r6   r=   Z	req_bytesr@   Zreq_strZthenheaderZfirst_newline_positionZloopZformatted_strZ	only_diffnowsrc_namedst_namer   r   r   r0   S   s    


*

 
r0   )r_   r   c          
   C   sV  | dkrdt  fS t  }x.| dD ]}|drF|tdd  }d|kr^|d^}}n&|d }t|dkr|dd  gng }yt|}|dkrtd	t|dkrt|d }|d
krtdn|d
krdnd}d| | }|dkrttj|std| d|	tj|  W q& t
tfk
rD   tdd Y q&X q&W d|fS d S )Nr`   T,py.r   r
   )      zmajor version must be 2 or 3rj   zPython 2 is not supported   rk   ZPYz3.z is not supportedzexpected e.g. '3.7', 'py3.5'F)rM   split
startswithlenrG   r   hasattrr#   TargetVersionaddKeyErrorrI   )r_   ra   r   Z	major_strrestmajorminorversion_strr   r   r   rK      s4    


rK   c               C   s   t   t  t  t  d S )N)r   r   r#   Zpatch_clickr(   r   r   r   r   patched_main   s    rx   __main__)9rY   r   concurrent.futuresr   r   r   	functoolsr   multiprocessingr   typingr   r   Zaiohttpr	   r*   r   ImportErrorZieZclickr#   Z_black_versionr   r$   Zblack.concurrencyr   EventZ_stop_signalrE   rH   rJ   rQ   rO   rP   rR   rS   r[   r.   rC   r]   r   commandoptionr\   rG   Zversion_optionr(   r-   r"   RequestrF   r0   rN   rq   rK   rx   r   r   r   r   r   <module>   sd   	g!
