
 X                 @   s  d  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
 d d l m Z d d l m Z d d l m Z d d l m Z m Z m Z m Z m Z e 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).
    N)standard_b64encode)iter_entry_points)log)DistutilsOptionError)upload)httpliburlparseunicode	iteritemsPY3surrogateescapestrictzutf-8c             C   s#   t  |  t  r |  j | t  S|  S)N)
isinstancer	   encodeerrors)sencoding r   P/home/ubuntu/projects/ifolica/build/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_sphinx0   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!   7   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_zipfileJ   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   run[   s    zupload_docs.runc             C   sl  t  | d  } | j   } | j   |  j j } i d d 6| j   d 6t j j |  | f d 6} t	 |  j
 d |  j  } t |  } t r | j d  } n  d | } d	 } t	 d
  t	 |  }	 |	 t	 d  }
 g  } xt |  D] \ } } d | } t | t  s| g } n  x | D] } t |  t k rZ| 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  \ } } } } } } | 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% |  WnB t& j' k
 rt( j)   d } |  j t" |  t j*  d  SYn 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*  |  j/ rht0 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      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   )1openreadr5   rC   rD   rE   r&   r'   basenamer   usernamepasswordr   r   decoder
   r   listtypetupleappendr(   r+   
repositoryr   INFOr   AssertionErrorr   HTTPConnectionHTTPSConnectionconnect
putrequest	putheaderstrr1   
endheaderssendsocketerrorsysexc_info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   i   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__r&   rp   r-   rA   rr   rG   base64r   pkg_resourcesr   	distutilsr   distutils.errorsr   Zdistutils.command.uploadr   Zsetuptools.compatr   r   r	   r
   r   r   r   r   r   r   r   r   <module>   s   (