a ˆåÏhïã@s¤dZddlmZddlmZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlmZddlmZd d „ZGd d „d eƒZdS) zpupload_docs Implements a Distutils 'upload_docs' subcommand (upload documentation to PyPI's pythonhosted.org). é)Ústandard_b64encode)Úlog)ÚDistutilsOptionErrorN)Úiter_entry_pointsé)ÚuploadcCs | dd¡S)Nzutf-8Úsurrogateescape)Úencode)Ús©r úB/usr/lib/python3.9/site-packages/setuptools/command/upload_docs.pyÚ_encodesr c@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"|jdurtddƒD]}dSdS)Nzdistutils.commandsÚ build_sphinxT)Ú upload_dirr)ÚselfZepr r r Ú has_sphinx-s zupload_docs.has_sphinxrcCst |¡d|_d|_dS)N)rÚinitialize_optionsrÚ target_dir)rr r r r4s zupload_docs.initialize_optionscCsˆt |¡|jdurN| ¡r0| d¡}|j|_q`| d¡}tj  |j d¡|_n|  d¡|j|_d|j vrtt  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)rrrr r r r9s        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&W|  ¡n |  ¡0dS)NÚwz'no files found in upload directory '%s')ÚzipfileÚZipFileZmkpathrrÚwalkrrrÚlenÚlstripÚsepÚwriteÚclose) rÚfilenameÚzip_fileÚrootÚdirsÚfilesZtmplÚnameZfullÚrelativeÚdestr r r Úcreate_zipfileIs  zupload_docs.create_zipfilec Csr| ¡D]}| |¡qt ¡}|jj ¡}tj  |d|¡}z"|  |¡|  |¡Wt   |¡n t   |¡0dS)Nz%s.zip)Zget_sub_commandsZ run_commandÚtempfileZmkdtempÚ distributionÚmetadataÚget_namerrrr/Ú upload_fileÚshutilÚrmtree)rZcmd_nameZtmp_dirr,r(r r r ÚrunYs     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"rrs éÿÿÿÿó ó )Ú isinstanceÚlistÚtupler )ÚitemÚ sep_boundaryÚkeyÚvaluesÚtitleÚvaluer r r Ú _build_partgs    zupload_docs._build_partc Csnd}d| d¡}|d}|df}tj|j|d�}t|| ¡ƒ}tj |¡}t ||¡} d|} d  | ¡| fS) z= Build up the MIME payload for the POST data z3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254s --Úasciis--r:)r?z multipart/form-data; boundary=%só) r Ú functoolsÚpartialrDÚmapÚitemsÚ itertoolsÚchainÚ from_iterabler) ÚclsÚdataÚboundaryr?Z end_boundaryZ end_itemsZbuilderZ part_groupsÚpartsZ body_itemsÚ content_typer r r Ú_build_multipart{sþ  zupload_docs._build_multipartc CsVt|dƒ�}| ¡}Wdƒn1s(0Y|jj}d| ¡tj |¡|fdœ}t|j d|j ƒ}t |ƒ  d¡}d|}|  |¡\}} d|j} | | tj¡tj |j¡\} } } }}}|sÌ|sÌ|rÐJ‚| dkrætj | ¡}n"| d krütj | ¡}n td | ƒ‚d }zZ| ¡| d | ¡| }| d |¡| dtt|ƒƒ¡| d|¡| ¡|  |¡Wn<t!j"�y¢}z | t|ƒtj#¡WYd}~dSd}~00| $¡}|j%dk�rØd|j%|j&f} | | tj¡nb|j%dk�r| 'd¡}|du�rd| ¡}d|} | | tj¡nd|j%|j&f} | | tj#¡|j(�rRt)d| ¡dƒdS)NÚrbZ doc_upload)z:actionr,Úcontentú:rEzBasic zSubmitting documentation to %sÚhttpÚhttpszunsupported schema ÚZPOSTz Content-typezContent-lengthZ AuthorizationéÈzServer response (%s): %si-ZLocationzhttps://pythonhosted.org/%s/zUpload successful. Visit %szUpload failed (%s): %szK---------------------------------------------------------------------------)*ÚopenÚreadr1r2r3rrÚbasenamer ÚusernameÚpasswordrÚdecoderSrrrÚINFOÚurllibÚparseÚurlparserWZclientZHTTPConnectionZHTTPSConnectionÚAssertionErrorZconnectZ putrequestZ putheaderÚstrr"Z endheadersÚsendÚsocketÚerrorZERRORZ getresponseÚstatusÚreasonZ getheaderZ show_responseÚprint)rr'ÚfrUÚmetarOZ credentialsZauthÚbodyZctÚmsgZschemaÚnetlocÚurlÚparamsÚqueryZ fragmentsZconnrRÚerÚlocationr r r r4Žs` &ý  ÿ         zupload_docs.upload_fileN)Ú__name__Ú __module__Ú __qualname__ZDEFAULT_REPOSITORYÚ descriptionrZ user_optionsZboolean_optionsrZ sub_commandsrrr/r7Ú staticmethodrDÚ classmethodrSr4r r r r rs(ÿû   r)Ú__doc__Úbase64rZ distutilsrZdistutils.errorsrrrhrr0r5rKrGZ http.clientrWÚ urllib.parserbZ pkg_resourcesrrr rr r r r Ús