î
Ó^ÝVŸ  ã               @   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 m Z d d l m Z m Z d d l m Z d	 d
 l m Z e j rÇ d n d Z d d d „ Z Gd d „  d e ƒ Z d S)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é   )ÚuploadÚsurrogateescapeÚstrictzutf-8c             C   s&   t  |  t j ƒ r" |  j | t ƒ S|  S)N)Ú
isinstancer   Ú	text_typeÚencodeÚerrors)ÚsÚencoding© r   úD/tmp/pip-build-9m6vxulb/setuptools/setuptools/command/upload_docs.pyÚb   s    r   c               @   s•   e  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 d d „  Z d S)Úupload_docszUpload documentation to PyPIzrepository=Úrzurl of repository [default: %s]úshow-responseNú&display full response text from serverúupload-dir=údirectory to uploadc             C   s1   |  j  d  k r- x t d d ƒ D] } d SWn  d  S)Nzdistutils.commandsÚbuild_sphinxT)Ú
upload_dirr   )ÚselfÚepr   r   r   Ú
has_sphinx/   s    zupload_docs.has_sphinxr   c             C   s#   t  j |  ƒ d  |  _ d  |  _ d  S)N)r
   Úinitialize_optionsr   Ú
target_dir)r   r   r   r   r!   6   s    	zupload_docs.initialize_optionsc             C   s¤   t  j |  ƒ |  j d  k rs |  j ƒ  rF |  j d ƒ } | j |  _ qŒ |  j d ƒ } t j j	 | j
 d ƒ |  _ n |  j d ƒ |  j |  _ |  j d |  j ƒ d  S)Nr   ÚbuildZdocsr   zUsing upload directory %s)r
   Úfinalize_optionsr   r    Úget_finalized_commandZbuilder_target_dirr"   ÚosÚpathÚjoinÚ
build_baseÚensure_dirnameÚannounce)r   r   r#   r   r   r   r$   ;   s    zupload_docs.finalize_optionsc       
      C   sý   t  j | d ƒ } zÙ |  j |  j ƒ xÂ t j |  j ƒ D]® \ } } } | |  j k rs | rs t d |  j ƒ ‚ n  xp | D]h } t j j | | ƒ } | t	 |  j ƒ d  … j
 t j j ƒ } t j j | | ƒ }	 | j | |	 ƒ qz Wq8 WWd  | j ƒ  Xd  S)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ÚnameÚfullZrelativeÚdestr   r   r   Úcreate_zipfileI   s    "(zupload_docs.create_zipfilec             C   sŽ   x! |  j  ƒ  D] } |  j | ƒ q Wt j ƒ  } |  j j j ƒ  } t j j	 | d | ƒ } z |  j
 | ƒ |  j | ƒ Wd  t j | ƒ Xd  S)Nz%s.zip)Úget_sub_commandsÚrun_commandÚtempfileÚmkdtempÚdistributionÚmetadataÚget_namer&   r'   r(   r>   Úupload_fileÚshutilÚrmtree)r   Úcmd_nameZtmp_dirr;   r7   r   r   r   ÚrunZ   s    zupload_docs.runc             C   s{  t  | d ƒ } | j ƒ  } | j ƒ  |  j j } i d d 6| j ƒ  d 6t j j | ƒ | f d 6} t	 |  j
 d |  j ƒ } t | ƒ } t j r¥ | j d ƒ } n  d | } d	 } t	 d
 ƒ t	 | ƒ }	 |	 t	 d ƒ }
 g  } xt j | ƒ D]÷ \ } } d | } t | t ƒ s"| g } n  xÃ | D]» } t | ƒ t k r`| d | d 7} | d } n t	 | ƒ } | j |	 ƒ | j t	 | ƒ ƒ | j t	 d ƒ ƒ | j | ƒ | r)| d& d  … t	 d ƒ k r)| j t	 d ƒ ƒ q)q)Wqñ W| j |
 ƒ | j t	 d ƒ ƒ t	 d ƒ j | ƒ } |  j d |  j t j ƒ t j j |  j ƒ \ } } } } } } | rw| rw| s}t ‚ | d k r›t j  | ƒ } n. | d k r¹t j! | ƒ } n t d | ƒ ‚ d } y{ | j" ƒ  | j# d | ƒ d | } | j$ d | ƒ | j$ d t% t& | ƒ ƒ ƒ | j$ d | ƒ | j' ƒ  | j( | ƒ WnE t) j* k
 r‘} z" |  j t% | ƒ t j+ ƒ d  SWYd  d  } ~ Xn X| j, ƒ  } | j- d k rÓ|  j d | j- | j. f t j ƒ nz | j- d k r*| j/ d  ƒ } | d  k rd! | j ƒ  } n  |  j d" | t j ƒ n# |  j d# | j- | j. f t j+ ƒ |  j0 rwt1 d$ d% | j ƒ  d$ d% ƒ n  d  S)'NÚrbZ
doc_uploadz:actionr;   Úcontentú:ÚasciizBasic z3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254z
--z--z*
Content-Disposition: form-data; name="%s"z; filename="%s"r   r	   z

úÚ
Ú zSubmitting documentation to %sÚhttpÚhttpszunsupported schema ÚPOSTz multipart/form-data; boundary=%szContent-typezContent-lengthÚAuthorizationéÈ   zServer response (%s): %si-  ZLocationzhttps://pythonhosted.org/%s/zUpload successful. Visit %szUpload failed (%s): %sú-éK   éÿÿÿÿ)2ÚopenÚreadr5   rC   rD   rE   r&   r'   Úbasenamer   ÚusernameÚpasswordr   r   ÚPY3ÚdecodeÚ	iteritemsr   ÚlistÚtypeÚtupleÚappendr(   r+   Ú
repositoryr   ÚINFOr   ÚparseÚurlparseÚAssertionErrorr   ÚHTTPConnectionÚHTTPSConnectionÚconnectÚ
putrequestÚ	putheaderÚstrr1   Ú
endheadersÚsendÚsocketÚerrorÚERRORÚgetresponseÚstatusÚreasonÚ	getheaderÚshow_responseÚprint)r   r6   ÚfrL   ÚmetaÚdataÚcredentialsÚauthÚboundaryZsep_boundaryZend_boundaryÚbodyÚkeyÚvaluesÚtitleÚvalueZschemaÚnetlocÚurlÚparamsÚqueryZ	fragmentsÚconnÚcontent_typeÚer   Úlocationr   r   r   rF   h   sŽ    
	

"
'



	zupload_docs.upload_file)r   Nr   )r   Nr   )Ú__name__Ú
__module__Ú__qualname__Údescriptionr
   ÚDEFAULT_REPOSITORYÚuser_optionsÚboolean_optionsr    Úsub_commandsr!   r$   r>   rJ   rF   r   r   r   r   r   #   s    		r   )Ú__doc__Úbase64r   Ú	distutilsr   Údistutils.errorsr   r&   rs   r-   rA   rG   Zsetuptools.externr   Zsetuptools.extern.six.movesr   r   Úpkg_resourcesr   r
   r_   r   r   r   r   r   r   r   Ú<module>   s   