U âQab�ã@s°dZddlmZddlmZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlmZddlmZmZddlmZd d lmZd d „ZGd d„deƒZdS)zpupload_docs Implements a Distutils 'upload_docs' subcommand (upload documentation to PyPI's pythonhosted.org). é)Ústandard_b64encode)Úlog)ÚDistutilsOptionErrorN)Úsix)Ú http_clientÚurllib)Úiter_entry_pointsé)ÚuploadcCstjr dnd}| d|¡S)NÚsurrogateescapeÚstrictzutf-8)rÚPY3Úencode)ÚsÚerrors©rúB/usr/lib/python3.8/site-packages/setuptools/command/upload_docs.pyÚ_encodesrc@s‚eZdZdZdZdddejfddgZejZdd „Zd efgZ d d „Z d d„Z dd„Z dd„Z edd„ƒZedd„ƒZdd„ZdS)Ú upload_docszhttps://pypi.python.org/pypi/zUpload documentation to PyPIz repository=Úrzurl of repository [default: %s])z show-responseNz&display full response text from server)z upload-dir=Nzdirectory to uploadcCs"|jdkrtddƒD]}dSdS)Nzdistutils.commandsÚ build_sphinxT)Ú upload_dirr)ÚselfZeprrrÚ has_sphinx/s zupload_docs.has_sphinxrcCst |¡d|_d|_dS)N)r Úinitialize_optionsrÚ target_dir)rrrrr6s zupload_docs.initialize_optionscCsˆt |¡|jdkrN| ¡r0| d¡}|j|_q`| d¡}tj  |j d¡|_n|  d¡|j|_d|j krtt  d¡| d|j¡dS)NrÚbuildZdocsrzpypi.python.orgz3Upload_docs command is deprecated. Use RTD instead.zUsing upload directory %s)r Úfinalize_optionsrrZget_finalized_commandZbuilder_target_dirrÚosÚpathÚjoinZ build_baseZensure_dirnameÚ repositoryrÚwarnÚannounce)rrrrrrr;s        zupload_docs.finalize_optionsc Cs²t |d¡}z–| |j¡t |j¡D]x\}}}||jkrP|sPd}t||jƒ‚|D]H}tj  ||¡}|t |jƒd…  tjj ¡} tj  | |¡} |  || ¡qTq&W5| ¡XdS)NÚwz'no files found in upload directory '%s')ÚzipfileZZipFileÚcloseZmkpathrrÚwalkrrr ÚlenÚlstripÚsepÚwrite) rÚfilenameÚzip_fileÚrootÚdirsÚfilesZtmplÚnameZfullÚrelativeÚdestrrrÚcreate_zipfileKs  zupload_docs.create_zipfilec Csh| ¡D]}| |¡qt ¡}|jj ¡}tj  |d|¡}z|  |¡|  |¡W5t   |¡XdS)Nz%s.zip)Zget_sub_commandsZ run_commandÚtempfileZmkdtempÚ distributionÚmetadataÚget_namerrr ÚshutilZrmtreer4Ú upload_file)rZcmd_nameZtmp_dirr1r-rrrÚrun[s    zupload_docs.runccs�|\}}d|}t|tƒs |g}|D]f}t|tƒrL|d|d7}|d}nt|ƒ}|Vt|ƒVdV|V|r$|dd…dkr$dVq$dS) Nz* Content-Disposition: form-data; name="%s"z; filename="%s"rr s éÿÿÿÿó ó )Ú isinstanceÚlistÚtupler)ÚitemÚ sep_boundaryÚkeyÚvaluesÚtitleÚvaluerrrÚ _build_partis    zupload_docs._build_partc Csnd}d|}|d}|df}tj|j|d�}t|| ¡ƒ}tj |¡}t ||¡} d| d¡} d  | ¡| fS) z= Build up the MIME payload for the POST data s3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254s --s--r>)rCz multipart/form-data; boundary=%sÚasciió) Ú functoolsÚpartialrHÚmapÚitemsÚ itertoolsÚchainÚ from_iterableÚdecoder ) ÚclsÚdataÚboundaryrCZ end_boundaryZ end_itemsZbuilderZ part_groupsÚpartsZ body_itemsÚ content_typerrrÚ_build_multipart}sþ  zupload_docs._build_multipartc Cs:t|dƒ�}| ¡}W5QRX|jj}d| ¡tj |¡|fdœ}t|j d|j ƒ}t |ƒ}t j rn| d¡}d|}| |¡\}} d|j} | | tj¡tj |j¡\} } } }}}| dkrÊt | ¡}n | d krÞt | ¡}n td | ƒ‚d }zZ| ¡| d | ¡| }| d |¡| dtt|ƒƒ¡| d|¡|  ¡| !|¡Wn>t"j#k �r†}z| t|ƒtj$¡WY¢dSd}~XYnX| %¡}|j&dk�r¼d|j&|j'f} | | tj¡nb|j&dk�r| (d¡}|dk�rèd| ¡}d|} | | tj¡nd|j&|j'f} | | tj$¡|j)�r6t*d| ¡dƒdS)NÚrbZ doc_upload)z:actionr1Úcontentú:rIzBasic zSubmitting documentation to %sZhttpZhttpszunsupported schema ÚZPOSTz Content-typezContent-lengthZ AuthorizationéÈzServer response (%s): %si-ZLocationzhttps://pythonhosted.org/%s/zUpload successful. Visit %szUpload failed (%s): %szK---------------------------------------------------------------------------)+ÚopenÚreadr6r7r8rrÚbasenamerZusernameZpasswordrrr rRrXr!r#rÚINFOrÚparseZurlparserZHTTPConnectionZHTTPSConnectionÚAssertionErrorZconnectZ putrequestZ putheaderÚstrr(Z endheadersÚsendÚsocketÚerrorZERRORZ getresponseZstatusÚreasonZ getheaderZ show_responseÚprint)rr,ÚfrZÚmetarTZ credentialsZauthZbodyZctÚmsgZschemaZnetlocZurlZparamsZqueryZ fragmentsZconnrWÚerÚlocationrrrr:�sb ý   ÿ           zupload_docs.upload_fileN)Ú__name__Ú __module__Ú __qualname__ZDEFAULT_REPOSITORYÚ descriptionr Z user_optionsZboolean_optionsrZ sub_commandsrrr4r;Ú staticmethodrHÚ classmethodrXr:rrrrrs(ÿû   r)Ú__doc__Úbase64rZ distutilsrZdistutils.errorsrrrfr%r5r9rOrKZsetuptools.externrZsetuptools.extern.six.movesrrZ pkg_resourcesrr rrrrrrÚs