MRe@sdZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl mZddlmZddlmZmZmZmZmZerd nd Zd d d ZGdddeZdS)zpupload_docs Implements a Distutils 'upload_docs' subcommand (upload documentation to PyPI's pythonhosted.org). N)standard_b64encode)iter_entry_points)log)DistutilsOptionError)upload)httpliburlparseunicode iteritemsPY3surrogateescapestrictzutf-8cCs#t|tr|j|tS|S)N) isinstancer encodeerrors)sencodingr9/tmp/pip-l4uy7dan-build/setuptools/command/upload_docs.pybsrc@seZdZdZdddejfddgZejZd d Zd efgZ d dZ ddZ ddZ ddZ ddZdS) upload_docszUpload documentation to PyPIz repository=rzurl of repository [default: %s] show-responseN&display full response text from server upload-dir=directory to uploadcCs1|jdkr-xtddD]}dSWndS)Nzdistutils.commands build_sphinxT) upload_dirr)selfeprrr has_sphinx0szupload_docs.has_sphinxrcCs#tj|d|_d|_dS)N)rinitialize_optionsr target_dir)rrrrr!7s  zupload_docs.initialize_optionscCstj||jdkrs|jrF|jd}|j|_q|jd}tjj |j d|_n|j d|j|_|j d|jdS)NrbuildZdocsrzUsing upload directory %s) rfinalize_optionsrr get_finalized_commandZbuilder_target_dirr"ospathjoin build_baseensure_dirnameannounce)rrr#rrrr$<s    zupload_docs.finalize_optionsc Cstj|d}z|j|jxtj|jD]\}}}||jkrs| rstd|jnxp|D]h}tjj||}|t |jdj tjj }tjj||} |j || qzWq8WWd|j XdS)Nwz'no files found in upload directory '%s')zipfileZipFilemkpathr"r&walkrr'r(lenlstripsepwriteclose) rfilenamezip_filerootdirsfilesnamefullZrelativedestrrrcreate_zipfileJs" (zupload_docs.create_zipfilec Csx!|jD]}|j|q Wtj}|jjj}tjj |d|}z|j ||j |Wdt j |XdS)Nz%s.zip)get_sub_commands run_commandtempfilemkdtemp distributionmetadataget_namer&r'r(r> upload_fileshutilrmtree)rcmd_nameZtmp_dirr;r7rrrrun[s  zupload_docs.runc Cslt|d}|j}|j|jj}idd6|jd6tjj||fd6}t |j d|j }t |}t r|jd}nd|}d }t d t |} | t d } g} xt|D]\} } d | }t| tr| g} nx| D]}t|tkrZ|d |d7}|d}n t |}| j| | jt || jt d| j||r#|d&dt dkr#| jt dq#q#WqW| j| | jt dt dj| } |jd|jtjt|j\}}}}}}| rk| rk| sqt|dkrtj|}n.|dkrtj|}ntd|d}y{|j|j d|d|}|j!d||j!dt"t#| |j!d||j$|j%| WnBt&j'k rt(j)d}|jt"|tj*dSYnX|j+}|j,dkr|jd|j,|j-ftjnz|j,dkr|j.d }|dkrd!|j}n|jd"|tjn#|jd#|j,|j-ftj*|j/rht0d$d%|jd$d%ndS)'NrbZ doc_uploadz:actionr;content:asciizBasic z3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254z --z--z* Content-Disposition: form-data; name="%s"z; filename="%s"rz   zSubmitting documentation to %shttphttpszunsupported schema POSTz multipart/form-data; boundary=%sz Content-typezContent-length AuthorizationzServer response (%s): %si-ZLocationzhttps://pythonhosted.org/%s/zUpload successful. Visit %szUpload failed (%s): %s-K)1openreadr5rCrDrEr&r'basenamerusernamepasswordrr decoder rlisttypetupleappendr(r+ repositoryrINFOrAssertionErrorrHTTPConnectionHTTPSConnectionconnect putrequest putheaderstrr1 endheaderssendsocketerrorsysexc_infoERROR getresponsestatusreason getheader show_responseprint)rr6frLmetadata credentialsauthboundaryZ sep_boundaryZ end_boundarybodykeyvaluestitlevalueZschemanetlocurlparamsqueryZ fragmentsconn content_typeerlocationrrrrFis             "  !             zupload_docs.upload_file)rNr)rNr)__name__ __module__ __qualname__ descriptionrDEFAULT_REPOSITORY user_optionsboolean_optionsr sub_commandsr!r$r>rJrFrrrrr#s         r)__doc__r&rpr-rArrrGbase64r pkg_resourcesr distutilsrdistutils.errorsrZdistutils.command.uploadrZsetuptools.compatrrr r r rrrrrrrs      (