
    
_d]                         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ZddlZddlmZ ddlmZ d	d
lmZ d Z G d de      Zy)z|upload_docs

Implements a Distutils 'upload_docs' subcommand (upload documentation to
sites other than PyPi such as devpi).
    )standard_b64encode)log)DistutilsOptionErrorN   )metadata)SetuptoolsDeprecationWarning   )uploadc                 &    | j                  dd      S )Nzutf-8surrogateescape)encode)ss    @/usr/lib/python3/dist-packages/setuptools/command/upload_docs.py_encoder      s    88G.//    c                       e Zd ZdZdZdddej                  z  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y)upload_docszhttps://pypi.python.org/pypi/z;Upload documentation to sites other than PyPi such as devpizrepository=rzurl of repository [default: %s])zshow-responseNz&display full response text from server)zupload-dir=Nzdirectory to uploadc                 b    t        | j                  d u xr t        j                  dd            S )Nzdistutils.commandsbuild_sphinx)groupname)bool
upload_dirr   entry_pointsselfs    r   
has_sphinxzupload_docs.has_sphinx0   s2    OOt# W%%,@~V
 	
r   r   c                 J    t        j                  |        d | _        d | _        y )N)r
   initialize_optionsr   
target_dirr   s    r   r    zupload_docs.initialize_options8   s    !!$'r   c                    t        j                  d       t        j                  |        | j                  | j                         r/| j                  d      }t        |j                        d   | _	        nc| j                  d      }t        j                  j                  |j                  d      | _	        n"| j                  d       | j                  | _	        | j                  d| j                  z         y )NzWUpload_docs command is deprecated. Use Read the Docs (https://readthedocs.org) instead.r   htmlbuilddocsr   zUsing upload directory %s)r   warnr
   finalize_optionsr   r   get_finalized_commanddictbuilder_target_dirsr!   ospathjoin
build_baseensure_dirnameannounce)r   r   r$   s      r   r'   zupload_docs.finalize_options=   s    1	
 	%??" #99.I"&|'G'G"H"P227;"$'',,u/?/?"H-"ooDO1DOOCDr   c                    t        j                  |d      }	 | j                  | j                         t	        j
                  | j                        D ]  \  }}}|| j                  k(  r|sd}t        || j                  z        |D ]  }t        j                  j                  ||      }|t        | j                        d  j                  t        j                  j                        }	t        j                  j                  |	|      }
|j                  ||
         	 |j                          y # |j                          w xY w)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tmplr   fullrelativedests              r   create_zipfilezupload_docs.create_zipfileO   s    ??8S1	KK(%'WWT__%= /!dE4??*5DD.tdoo/EFF! /D77<<d3D#C$8$:;BB277;;OH77<<$7DNN4.	/	/ NNHNNs   DD0 0Ec                    t        j                  ddd       | j                         D ]  }| j                  |        t	        j
                         }| j                  j                  j                         }t        j                  j                  |d|z        }	 | j                  |       | j                  |       t        j                  |       y # t        j                  |       w xY w)NzDeprecated commanda  
            upload_docs is deprecated and will be removed in a future version.
            Instead, use tools like devpi and Read the Docs; or lower level tools like
            httpie and curl to interact directly with your hosting service API.
            )i  	      )due_datez%s.zip)r   emitget_sub_commandsrun_commandtempfilemkdtempdistributionr   get_namer+   r,   r-   rE   upload_fileshutilrmtree)r   cmd_nametmp_dirr   r=   s        r   runzupload_docs.run_   s    $)) 
 #	
 --/ 	'HX&	' ""$  ))22477<<D9	#)X&MM'"FMM'"s   "C C*c              #      K   | \  }}d|z  }t        |t              s|g}|D ]W  }t        |t              r|d|d   z  z  }|d   }nt        |      }| t        |       d | |sK|dd  dk(  sTd Y y w)	Nz*
Content-Disposition: form-data; name="%s"z; filename="%s"r   r	   s   

      
)
isinstancelisttupler   )itemsep_boundarykeyvaluestitlevalues         r   _build_partzupload_docs._build_partw   s     V=C&$'XF 	E%'*U1X55a%. MKrsu,	s   A*A=-A=6A=c                 P   d}d|j                  d      z   }|dz   }|df}t        j                  | j                  |      }t	        ||j                               }t        j                  j                  |      }t        j                  ||      }	d|z  }
dj                  |	      |
fS )	z=
        Build up the MIME payload for the POST data
        z3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254s   
--asciis   --rZ   )r_   z multipart/form-data; boundary=%sr   )
r   	functoolspartialrd   mapitems	itertoolschainfrom_iterabler-   )clsdataboundaryr_   end_boundary	end_itemsbuilderpart_groupsparts
body_itemscontent_types              r   _build_multipartzupload_docs._build_multipart   s    
 I!99#e+
	 ##OO%
 '4::<0--k:__UI6
9HDxx
#\11r   c                    t        |d      5 }|j                         }d d d        | j                  j                  }d|j	                         t
        j                  j                  |      fd}t        | j                  dz   | j                  z         }t        |      j                  d      }d|z   }| j                  |      \  }}	d| j                  z  }
| j                  |
t         j"                         t$        j&                  j)                  | j                        \  }}}}}}|s|s|rJ |dk(  r t*        j,                  j/                  |      }n3|d	k(  r t*        j,                  j1                  |      }nt3        d
|z         d}	 |j5                          |j7                  d|       |	}|j9                  d|       |j9                  dt;        t=        |                   |j9                  d|       |j?                          |jA                  |       |jI                         }|jJ                  dk(  r=d|jJ                  d|jL                  }
| j                  |
t         j"                         n|jJ                  dk(  rL|jO                  d      }|d|j	                         z  }d|z  }
| j                  |
t         j"                         n<d|jJ                  d|jL                  }
| j                  |
t         jF                         | jP                  rtS        d|j                         d       y y # 1 sw Y   xY w# tB        jD                  $ r3}| j                  t;        |      t         jF                         Y d }~y d }~ww xY w)Nrb
doc_upload)z:actionr   content:rf   zBasic zSubmitting documentation to %shttphttpszunsupported schema  POSTzContent-typezContent-lengthAuthorization   zServer response (z): i-  Locationzhttps://pythonhosted.org/%s/zUpload successful. Visit %szUpload failed (zK---------------------------------------------------------------------------)*openreadrO   r   rP   r+   r,   basenamer   usernamepasswordr   decoderx   
repositoryr0   r   INFOurllibparseurlparser~   clientHTTPConnectionHTTPSConnectionAssertionErrorconnect
putrequest	putheaderstrr7   
endheaderssendsocketerrorERRORgetresponsestatusreason	getheadershow_responseprint)r   r<   fr|   metaro   credentialsauthbodyctmsgschemanetlocurlparamsquery	fragmentsconnrw   er   locations                         r   rQ   zupload_docs.upload_file   s   (D! 	QffhG	  ))#MMO((2G<
 dmmc1DMMAB(5<<WE+%((.b.$//Bc388$
 9?8M8MOO9
5VUI %	99V;;--f5Dw;;..v6D !6!?@@	LLNOOFC(LNN><8NN+ST^<NN?D1OOIIdO
 88s?01!((CCMM#sxx(XX_{{:.H9DMMOK/(:CMM#sxx(  /0hhACMM#syy)(AFFHh/ w	 	T || 	MM#a&#)),	s$   L2	BL? 2L<?N)N  NN)__name__
__module____qualname__DEFAULT_REPOSITORYdescriptionr
   user_optionsboolean_optionsr   sub_commandsr    r'   rE   rV   staticmethodrd   classmethodrx   rQ    r   r   r   r      s     9OK -0I0II	

 	J4L ,,O
 $Z01L
E$ #0  & 2 2*=0r   r   )__doc__base64r   	distutilsr   distutils.errorsr   r+   r   r3   rM   rR   rk   rg   http.clientr~   urllib.parser   
_importlibr   warningsr   r
   r   r   r   r   r   <module>r      sL    &  1 	         ! 3 0@0& @0r   