î
½1kd›  ã               @   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   úT/var/www/pythonscrapper/code/venv/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   Zdistutils.errorsr   Zdistutils.command.uploadr   Zsetuptools.compatr   r   r	   r
   r   r   r   r   r   r   r   r   Ú<module>   s   (