a
    ñ»j�  ã                   @   s¨   d Z ddlmZ ddlmZ ddlm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mZ dd„ ZG dd„ deƒZdS )z|upload_docs

Implements a Distutils 'upload_docs' subcommand (upload documentation to
sites other than PyPi such as devpi).
é    )Ústandard_b64encode)Úlog)ÚDistutilsOptionErrorNé   )Úmetadata)ÚSetuptoolsDeprecationWarningé   )Úuploadc                 C   s   |   dd¡S )Nzutf-8Úsurrogateescape)Úencode)Ús© r   úDE:\soccer\ml_env\Lib\site-packages\setuptools/command/upload_docs.pyÚ_encode   s    r   c                   @   s‚   e Zd ZdZdZdddej fddgZejZdd	„ Zd
efgZ	dd„ Z
dd„ Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZdd„ ZdS )Úupload_docszhttps://pypi.python.org/pypi/z;Upload documentation to sites other than PyPi such as devpizrepository=Úrzurl of repository [default: %s])zshow-responseNz&display full response text from server)zupload-dir=Nzdirectory to uploadc                 C   s   t | jd u otjddd�ƒS )Nzdistutils.commandsÚbuild_sphinx)ÚgroupÚname)ÚboolÚ
upload_dirr   Úentry_points©Úselfr   r   r   Ú
has_sphinx/   s    
þzupload_docs.has_sphinxr   c                 C   s   t  | ¡ d | _d | _d S )N)r	   Úinitialize_optionsr   Ú
target_dirr   r   r   r   r   7   s    
zupload_docs.initialize_optionsc                 C   s†   t  d¡ t | ¡ | jd u r`|  ¡ rB|  d¡}t|jƒd | _	qr|  d¡}t
j |jd¡| _	n|  d¡ | j| _	|  d| j	 ¡ d S )NzWUpload_docs command is deprecated. Use Read the Docs (https://readthedocs.org) instead.r   ÚhtmlÚbuildÚdocsr   zUsing upload directory %s)r   Úwarnr	   Úfinalize_optionsr   r   Úget_finalized_commandÚdictZbuilder_target_dirsr   ÚosÚpathÚjoinÚ
build_baseÚensure_dirnameÚannounce)r   r   r   r   r   r   r!   <   s    ÿ




zupload_docs.finalize_optionsc                 C   sº   t  |d¡}zž|  | j¡ t | j¡D ]x\}}}|| jkrP|sPd}t|| j ƒ‚|D ]H}tj ||¡}|t	| jƒd …  
tjj¡}	tj |	|¡}
| ||
¡ qTq&W | ¡  n
| ¡  0 d S )NÚwz'no files found in upload directory '%s')ÚzipfileÚZipFileÚmkpathr   r$   Úwalkr   r%   r&   ÚlenÚlstripÚsepÚwriteÚclose)r   ÚfilenameÚzip_fileÚrootÚdirsÚfilesÚtmplr   ÚfullÚrelativeÚdestr   r   r   Úcreate_zipfileN   s    zupload_docs.create_zipfilec              	   C   s‚   t jdddd� |  ¡ D ]}|  |¡ qt ¡ }| jj ¡ }t	j
 |d| ¡}z"|  |¡ |  |¡ W t |¡ nt |¡ 0 d S )NzDeprecated commanda  
            upload_docs is deprecated and will be removed in a future version.
            Instead, use tools like devpi and Read the Docs; or lower level tools like
            httpie and curl to interact directly with your hosting service API.
            )iç  é	   é   )Zdue_datez%s.zip)r   ÚemitÚget_sub_commandsÚrun_commandÚtempfileÚmkdtempÚdistributionr   Úget_namer$   r%   r&   r=   Úupload_fileÚshutilÚrmtree)r   Úcmd_nameZtmp_dirr   r5   r   r   r   Úrun^   s    ù
zupload_docs.runc                 c   s�   | \}}d| }t |tƒs |g}|D ]f}t |tƒrL|d|d  7 }|d }nt|ƒ}|V  t|ƒV  dV  |V  |r$|dd … dkr$dV  q$d S )	Nz*
Content-Disposition: form-data; name="%s"z; filename="%s"r   r   s   

éÿÿÿÿó   ó   
)Ú
isinstanceÚlistÚtupler   )ÚitemÚsep_boundaryÚkeyÚvaluesÚtitleÚvaluer   r   r   Ú_build_partv   s    



zupload_docs._build_partc                 C   sn   d}d|  d¡ }|d }|df}tj| j|d�}t|| ¡ ƒ}tj |¡}t ||¡}	d| }
d 	|	¡|
fS )	z=
        Build up the MIME payload for the POST data
        z3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254s   
--Úasciis   --rN   )rS   z multipart/form-data; boundary=%só    )
r   Ú	functoolsÚpartialrX   ÚmapÚitemsÚ	itertoolsÚchainÚfrom_iterabler&   )ÚclsÚdataÚboundaryrS   Zend_boundaryZ	end_itemsÚbuilderZpart_groupsÚpartsZ
body_itemsÚcontent_typer   r   r   Ú_build_multipartŠ   s    þþzupload_docs._build_multipartc              
   C   sT  t |dƒ�}| ¡ }W d   ƒ n1 s(0    Y  | jj}d| ¡ tj |¡|fdœ}t| j	d | j
 ƒ}t|ƒ d¡}d| }|  |¡\}}	d| j }
|  |
tj¡ tj | j¡\}}}}}}|sÌ|sÌ|rÐJ ‚|dkrætj |¡}n"|d	krütj |¡}ntd
| ƒ‚d}zZ| ¡  | d|¡ |	}| d|¡ | dtt|ƒƒ¡ | d|¡ | ¡  |  |¡ W n: t!�y  } z |  t|ƒtj"¡ W Y d }~d S d }~0 0 | #¡ }|j$dk�rÖd|j$|j%f }
|  |
tj¡ nb|j$dk�r| &d¡}|d u �rd| ¡  }d| }
|  |
tj¡ nd|j$|j%f }
|  |
tj"¡ | j'�rPt(d| ¡ dƒ d S )NÚrbZ
doc_upload)z:actionr   Úcontentú:rY   zBasic zSubmitting documentation to %sÚhttpÚhttpszunsupported schema Ú ÚPOSTzContent-typezContent-lengthÚAuthorizationéÈ   zServer response (%s): %si-  ZLocationzhttps://pythonhosted.org/%s/zUpload successful. Visit %szUpload failed (%s): %szK---------------------------------------------------------------------------))ÚopenÚreadrE   r   rF   r$   r%   Úbasenamer   ÚusernameÚpasswordr   Údecoderh   Ú
repositoryr)   r   ÚINFOÚurllibÚparseÚurlparserl   ÚclientÚHTTPConnectionÚHTTPSConnectionÚAssertionErrorÚconnectÚ
putrequestÚ	putheaderÚstrr/   Ú
endheadersÚsendÚOSErrorÚERRORÚgetresponseÚstatusÚreasonÚ	getheaderÚshow_responseÚprint)r   r4   Úfrj   Úmetarc   ÚcredentialsÚauthÚbodyÚctÚmsgZschemaÚnetlocÚurlÚparamsÚqueryÚ	fragmentsÚconnrg   Úer   Úlocationr   r   r   rG       sb    &ý
ÿ

zupload_docs.upload_fileN)Ú__name__Ú
__module__Ú__qualname__ÚDEFAULT_REPOSITORYÚdescriptionr	   Úuser_optionsÚboolean_optionsr   Úsub_commandsr   r!   r=   rK   ÚstaticmethodrX   Úclassmethodrh   rG   r   r   r   r   r      s*   ýù	


r   )Ú__doc__Úbase64r   Ú	distutilsr   Údistutils.errorsr   r$   r+   rC   rH   r_   r[   Úhttp.clientrl   Úurllib.parserz   Z
_importlibr   Úwarningsr   r	   r   r   r   r   r   r   Ú<module>   s    