o
    bbD                     @   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   }home/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/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   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   get_finalized_commanddictZbuilder_target_dirsr   ospathjoin
build_base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ZipFile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   get_sub_commandsrun_commandtempfilemkdtempdistributionr   get_namer#   r$   r%   r=   upload_fileshutilrmtree)r   cmd_nameZtmp_dirr   r6   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   --rL   )rQ   z multipart/form-data; boundary=%s    )
r   	functoolspartialrV   mapitems	itertoolschainfrom_iterabler%   )clsdataboundaryrQ   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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rd|j%|j&f }
| |
tj n0|j%dkr|'d}|d u rd|  }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:rW   zBasic zSubmitting documentation to %shttphttpszunsupported schema  ZPOSTzContent-typezContent-lengthZAuthorization   zServer response (%s): %si-  ZLocationzhttps://pythonhosted.org/%s/zUpload successful. Visit %szUpload failed (%s): %szK---------------------------------------------------------------------------)*openreadrC   r   rD   r#   r$   basenamer   usernamepasswordr   decoderf   r(   r*   r   INFOurllibparseurlparserj   ZclientZHTTPConnectionZHTTPSConnectionAssertionErrorconnectZ
putrequestZ	putheaderstrr0   Z
endheaderssendsocketerrorERRORZgetresponsestatusreason	getheadershow_responseprint)r   r5   frh   metara   ZcredentialsZauthbodyctmsgZschemanetlocurlparamsqueryZ	fragmentsZconnre   er   locationr   r   r   rE      sh   



zupload_docs.upload_fileN)__name__
__module____qualname__DEFAULT_REPOSITORYdescriptionr	   user_optionsboolean_optionsr   sub_commandsr   r    r=   rI   staticmethodrV   classmethodrf   rE   r   r   r   r   r       s*    


r   )__doc__base64r   	distutilsr   distutils.errorsr   r#   r|   r,   rA   rF   r]   rY   Zhttp.clientrj   urllib.parseru   r>   
_importlibr   rl   r   r	   r   r   r   r   r   r   <module>   s&   