ó
.¿”Wc           @   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 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 d „  Z d e f d „  ƒ  YZ d S(   sp   upload_docs

Implements a Distutils 'upload_docs' subcommand (upload documentation to
PyPI's pythonhosted.org).
iÿÿÿÿ(   t   standard_b64encode(   t   log(   t   DistutilsOptionErrorN(   t   six(   t   http_clientt   urllib(   t   iter_entry_pointsi   (   t   uploadc         C   s%   t  j r d n d } |  j d | ƒ S(   Nt   surrogateescapet   stricts   utf-8(   R   t   PY3t   encode(   t   st   errors(    (    sB   /tmp/pip-build-Q3rTTP/setuptools/setuptools/command/upload_docs.pyt   _encode   s    t   upload_docsc           B   s™   e  Z d  Z d d d e j f d d g Z e j Z d „  Z d	 e f g Z	 d
 „  Z
 d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z d „  Z RS(   s   Upload documentation to PyPIs   repository=t   rs   url of repository [default: %s]s   show-responses&   display full response text from servers   upload-dir=s   directory to uploadc         C   s1   |  j  d  k r- x t d d ƒ D] } t SWn  d  S(   Ns   distutils.commandst   build_sphinx(   t
   upload_dirt   NoneR   t   True(   t   selft   ep(    (    sB   /tmp/pip-build-Q3rTTP/setuptools/setuptools/command/upload_docs.pyt
   has_sphinx+   s    R   c         C   s#   t  j |  ƒ d  |  _ d  |  _ d  S(   N(   R   t   initialize_optionsR   R   t
   target_dir(   R   (    (    sB   /tmp/pip-build-Q3rTTP/setuptools/setuptools/command/upload_docs.pyR   2   s    	c         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   t   buildt   docsR   s   Using upload directory %s(   R   t   finalize_optionsR   R   R   t   get_finalized_commandt   builder_target_dirR   t   ost   patht   joint
   build_baset   ensure_dirnamet   announce(   R   R   R   (    (    sB   /tmp/pip-build-Q3rTTP/setuptools/setuptools/command/upload_docs.pyR   7   s    c   
      C   s÷   t  j | d ƒ } zÓ |  j |  j ƒ x¼ t j |  j ƒ D]¨ \ } } } | |  j k rs | rs t d |  j ƒ ‚ n  xj | D]b } t j j | | ƒ } | t	 |  j ƒ j
 t j j ƒ } t j j | | ƒ }	 | j | |	 ƒ qz Wq8 WWd  | j ƒ  Xd  S(   Nt   ws'   no files found in upload directory '%s'(   t   zipfilet   ZipFilet   mkpathR   R   t   walkR   R    R!   t   lent   lstript   sept   writet   close(
   R   t   filenamet   zip_filet   roott   dirst   filest   namet   fullt   relativet   dest(    (    sB   /tmp/pip-build-Q3rTTP/setuptools/setuptools/command/upload_docs.pyt   create_zipfileE   s    ""c         C   sŽ   x! |  j  ƒ  D] } |  j | ƒ q Wt j ƒ  } |  j j j ƒ  } t j j	 | d | ƒ } z |  j
 | ƒ |  j | ƒ Wd  t j | ƒ Xd  S(   Ns   %s.zip(   t   get_sub_commandst   run_commandt   tempfilet   mkdtempt   distributiont   metadatat   get_nameR   R    R!   R8   t   upload_filet   shutilt   rmtree(   R   t   cmd_namet   tmp_dirR4   R0   (    (    sB   /tmp/pip-build-Q3rTTP/setuptools/setuptools/command/upload_docs.pyt   runV   s    c         c   s¸   |  \ } } d | } t  | t ƒ s1 | g } n  x€ | D]x } t  | t ƒ rl | d | d 7} | d } n t | ƒ } | Vt | ƒ Vd V| V| r8 | d d k r8 d Vq8 q8 Wd  S(	   Ns*   
Content-Disposition: form-data; name="%s"s   ; filename="%s"i    i   s   

iÿÿÿÿs   s   
(   t
   isinstancet   listt   tupleR   (   t   itemt   sep_boundaryt   keyt   valuest   titlet   value(    (    sB   /tmp/pip-build-Q3rTTP/setuptools/setuptools/command/upload_docs.pyt   _build_partd   s    
c         C   s”   d } d | } | d } | d f } t  j |  j d | ƒ} t | | j ƒ  ƒ } t j j | ƒ } t j | | ƒ }	 d | }
 d j |	 ƒ |
 f S(   s=   
        Build up the MIME payload for the POST data
        s3   --------------GHSKFJDLGDS7543FJKLFHRE75642756743254s   
--s   --s   
RJ   s    multipart/form-data; boundary=%st    (	   t	   functoolst   partialRO   t   mapt   itemst	   itertoolst   chaint   from_iterableR!   (   t   clst   datat   boundaryRJ   t   end_boundaryt	   end_itemst   buildert   part_groupst   partst
   body_itemst   content_type(    (    sB   /tmp/pip-build-Q3rTTP/setuptools/setuptools/command/upload_docs.pyt   _build_multipartx   s    

		
c         C   s  t  | d ƒ  } | j ƒ  } Wd  QX|  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 | } |  j | ƒ \ } }	 |  j d	 |  j t j ƒ t j j |  j ƒ \ }
 } } } } } | r| r| st ‚ |
 d
 k r=t j | ƒ } n. |
 d k r[t j | ƒ } n t d |
 ƒ ‚ d } yw | j ƒ  | j d | ƒ |	 } | j d | ƒ | j d t t | ƒ ƒ ƒ | j d | ƒ | j  ƒ  | j! | ƒ Wn0 t" j# k
 r} |  j t | ƒ t j$ ƒ d  SX| 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$ ƒ |  j* rþd d | j ƒ  d d f GHn  d  S(   Nt   rbt
   doc_uploads   :actionR4   t   contentt   :t   asciis   Basic s   Submitting documentation to %st   httpt   httpss   unsupported schema RP   t   POSTs   Content-types   Content-lengtht   AuthorizationiÈ   s   Server response (%s): %si-  t   Locations   https://pythonhosted.org/%s/s   Upload successful. Visit %ss   Upload failed (%s): %st   -iK   (+   t   opent   readR=   R>   R?   R   R    t   basenameR   t   usernamet   passwordR    R   R
   t   decodeRb   R$   t
   repositoryR   t   INFOR   t   parset   urlparset   AssertionErrorR   t   HTTPConnectiont   HTTPSConnectiont   connectt
   putrequestt	   putheadert   strR*   t
   endheaderst   sendt   sockett   errort   ERRORt   getresponset   statust   reasont	   getheaderR   t   show_response(   R   R/   t   fRe   t   metaRY   t   credentialst   autht   bodyt   ctt   schemat   netloct   urlt   paramst   queryt	   fragmentst   connRa   t   eR   t   location(    (    sB   /tmp/pip-build-Q3rTTP/setuptools/setuptools/command/upload_docs.pyR@   ‹   sb    	

'


	N(   s   show-responseNs&   display full response text from server(   s   upload-dir=Ns   directory to upload(   t   __name__t
   __module__t   descriptionR   t   DEFAULT_REPOSITORYR   t   user_optionst   boolean_optionsR   t   sub_commandsR   R   R8   RE   t   staticmethodRO   t   classmethodRb   R@   (    (    (    sB   /tmp/pip-build-Q3rTTP/setuptools/setuptools/command/upload_docs.pyR      s     							(   t   __doc__t   base64R    t	   distutilsR   t   distutils.errorsR   R   R   R&   R;   RA   RU   RQ   t   setuptools.externR   t   setuptools.extern.six.movesR   R   t   pkg_resourcesR   R   R   R   (    (    (    sB   /tmp/pip-build-Q3rTTP/setuptools/setuptools/command/upload_docs.pyt   <module>   s    	