o
    “siD  ã                   @   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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   úmC:\Users\PC\students\dividedattentionclub\venv\lib\python3.10\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   Zentry_points©Úselfr   r   r   Ú
has_sphinx0   s   
þzupload_docs.has_sphinxr   c                 C   s   t  | ¡ d | _d | _d S )N)r	   Úinitialize_optionsr   Ú
target_dirr   r   r   r   r   8   s   

zupload_docs.initialize_optionsc                 C   s�   t  | ¡ | jd u r+|  ¡ r|  d¡}t|jƒd | _n|  d¡}tj	 
|jd¡| _n	|  d¡ | j| _d| jv r>t d¡ |  d| j ¡ d S )	Nr   ÚhtmlÚbuildÚdocsr   zpypi.python.orgz<Upload_docs command is deprecated for PyPi. Use RTD instead.zUsing upload directory %s)r	   Úfinalize_optionsr   r   Zget_finalized_commandÚdictZbuilder_target_dirsr   ÚosÚpathÚjoinZ
build_baseZensure_dirnameÚ
repositoryr   ÚwarnÚannounce)r   r   r   r   r   r   r   =   s   






zupload_docs.finalize_optionsc                 C   s¸   t  |d¡}zP|  | j¡ t | j¡D ]<\}}}|| jkr(|s(d}t|| j ƒ‚|D ]$}tj ||¡}|t	| jƒd …  
tjj¡}	tj |	|¡}
| ||
¡ q*qW | ¡  d S | ¡  w )NÚwz'no files found in upload directory '%s')ÚzipfileÚZipFileZmkpathr   r!   Úwalkr   r"   r#   ÚlenÚlstripÚsepÚwriteÚclose)r   ÚfilenameÚzip_fileÚrootÚdirsÚfilesÚtmplr   ÚfullZrelativeÚdestr   r   r   Úcreate_zipfileM   s   üü
zupload_docs.create_zipfilec              	   C   s|   t  dt¡ |  ¡ D ]}|  |¡ q
t ¡ }| jj 	¡ }t
j |d| ¡}z|  |¡ |  |¡ W t |¡ d S t |¡ w )Nziupload_docs is deprecated and will be removed in a future version. Use tools like httpie or curl instead.z%s.zip)Úwarningsr%   r   Zget_sub_commandsÚrun_commandÚtempfileÚmkdtempÚdistributionr   Úget_namer!   r"   r#   r8   Úupload_fileÚshutilÚrmtree)r   Úcmd_nameZtmp_dirr   r1   r   r   r   Úrun]   s   ý
zupload_docs.runc                 c   s’   � | \}}d| }t |tƒs|g}|D ]3}t |tƒr'|d|d  7 }|d }nt|ƒ}|V  t|ƒV  dV  |V  |rF|dd … dkrFd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_partq   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   --rF   )rK   z multipart/form-data; boundary=%só    )
r   Ú	functoolsÚpartialrP   ÚmapÚitemsÚ	itertoolsÚchainÚfrom_iterabler#   )ÚclsÚdataÚboundaryrK   Zend_boundaryZ	end_itemsZ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w   Y  | jj}d| ¡ tj |¡|fdœ}t| j	d | j
 ƒ}t|ƒ d¡}d| }|  |¡\}}	d| j }
|  |
tj¡ tj | j¡\}}}}}}|sf|sf|rhJ ‚|dkrstj |¡}n|d	kr~tj |¡}ntd
| ƒ‚d}z-| ¡  | d|¡ |	}| d|¡ | dtt|ƒƒ¡ | d|¡ | ¡  |  |¡ W n t!j"yÐ } z|  t|ƒtj#¡ W Y d }~d S d }~ww | $¡ }|j%dkrêd|j%|j&f }
|  |
tj¡ n0|j%dk�r| 'd¡}|d u rÿd| ¡  }d| }
|  |
tj¡ nd|j%|j&f }
|  |
tj#¡ | j(�r(t)d| ¡ dƒ d S d S )NÚrbZ
doc_upload)z:actionr   Úcontentú:rQ   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Úreadr=   r   r>   r!   r"   Úbasenamer   ÚusernameÚpasswordr   Údecoder_   r$   r&   r   ÚINFOÚurllibÚparseÚurlparserc   ÚclientÚHTTPConnectionÚHTTPSConnectionÚAssertionErrorÚconnectÚ
putrequestÚ	putheaderÚstrr+   Ú
endheadersÚsendÚsocketÚerrorÚERRORÚgetresponseÚstatusÚreasonÚ	getheaderZshow_responseÚprint)r   r0   Úfra   Úmetar[   ÚcredentialsÚauthÚbodyÚctÚmsgZschemaÚnetlocÚurlÚparamsÚqueryÚ	fragmentsÚconnr^   Úer   Úlocationr   r   r   r?   ˜   sh   
ÿý
ÿ€þ

ÿzupload_docs.upload_fileN)Ú__name__Ú
__module__Ú__qualname__ÚDEFAULT_REPOSITORYÚdescriptionr	   Zuser_optionsZboolean_optionsr   Zsub_commandsr   r   r8   rC   ÚstaticmethodrP   Úclassmethodr_   r?   r   r   r   r   r       s*    ÿû


r   )Ú__doc__Úbase64r   Ú	distutilsr   Zdistutils.errorsr   r!   r}   r(   r;   r@   rW   rS   Úhttp.clientrc   Úurllib.parserp   r9   Z
_importlibr   re   r   r	   r   r   r   r   r   r   Ú<module>   s&   