
`@_                 @   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-tw3_dw7d/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   s.   |  j  d  k r* x t d d  D] } d SWd  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 rp | rp t d |  j   xp | D]h } t j j | |  } | t	 |  j  d   j
 t j j  } t j j | |  }	 | j | |	  qw 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   si  t  | d  } | j   } | j   |  j j } d d d | j   d t j j |  | f i } t	 |  j
 d |  j  } t |  } t j r | j d  } d | } d	 } t	 d
  t	 |  }	 |	 t	 d  }
 g  } xt j |  D] \ } } d | } t | t  s| g } x | D] } t |  t k rW| d | d 7} | d } n t	 |  } | j |	  | j t	 |   | j t	 d   | j |  | r | d& d   t	 d  k r | j t	 d   q Wq W| j |
  | j t	 d   t	 d  j |  } |  j d |  j t j  t j j |  j  \ } } } } } } | rk| rk| sq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  nw | j- d k r| j/ d   } | d  k rd! | j   } |  j d" | t j  n# |  j d# | j- | j. f t j+  |  j0 ret1 d$ d% | j   d$ d%  d  S)'Nrbz:actionZ
doc_uploadr;   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   Z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   