
    
_dC                         d 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	m
Z
 ddlmZ ddlmZmZ ddlmZ dd	lmZ  eed
d       eedd       eedd      dZ G d de      Zy)zm
distutils.command.upload

Implements the Distutils 'upload' subcommand (upload package to a package
index).
    N)standard_b64encode)urlopenRequest	HTTPError)urlparse   )DistutilsErrorDistutilsOptionError)PyPIRCCommand)spawnmd5sha256blake2b)
md5_digestsha256_digestblake2_256_digestc                   j    e Zd ZdZej
                  ddgz   Zej                  dgz   Zd Zd Zd Z	d Z
y	)
uploadzupload binary package to PyPI)signszsign files to upload using gpg)z	identity=izGPG identity used to sign filesr   c                 t    t        j                  |        d| _        d| _        d| _        d| _        d | _        y )N r   F)r   initialize_optionsusernamepasswordshow_responser   identity)selfs    F/usr/lib/python3/dist-packages/setuptools/_distutils/command/upload.pyr   zupload.initialize_options'   s4    ((.	    c                 l   t        j                  |        | j                  r| j                  st	        d      | j                         }|i k7  r(|d   | _        |d   | _        |d   | _        |d   | _	        | j                  s3| j                  j                  r| j                  j                  | _        y y y )Nz.Must use --sign for --identity to have meaningr   r   
repositoryrealm)r   finalize_optionsr   r   r
   _read_pypircr   r   r#   r$   distribution)r   configs     r    r%   zupload.finalize_options/   s    &&t,==&'WXX""$R<":.DM":.DM$\2DODJ }}!2!2!;!; --66DM "<}r!   c                     | j                   j                  sd}t        |      | j                   j                  D ]  \  }}}| j                  |||        y )NzHMust create and upload files in one command (e.g. setup.py sdist upload))r'   
dist_filesr
   upload_file)r   msgcommand	pyversionfilenames        r    runz
upload.run?   s\      ++/  's++,0,=,=,H,H 	;(GYWi:	;r!   c                    t        | j                        \  }}}}}}	|s|s|	rt        d| j                  z        |dvrt        d|z         | j                  r:ddd|g}
| j                  rd| j                  g|
dd t        |
| j                  	       t        |d
      }	 |j                         }|j                          | j                  j                  }i ddddd|j                         d|j                         dt        j                  j!                  |      |fd|d|ddd|j#                         d|j%                         d|j'                         d|j)                         d|j+                         d|j-                         d|j/                         d|j1                         d|j3                         |j5                         |j7                         |j9                         |j;                         d}d |d!<   t<        j?                         D ]"  \  }}|		  ||      jA                         ||<   $ | j                  rMt        |d"z   d
      5 }t        j                  j!                  |      d"z   |j                         f|d#<   d d d        | jD                  d$z   | jF                  z   jI                  d%      }d&tK        |      jM                  d%      z   }d'}d(|jI                  d%      z   }|d)z   }tO        jP                         }|j?                         D ]  \  }}d*|z  }tS        |tT              s|g}|D ]  }tW        |      tX        u r|d+|d,   z  z  }|d-   }nt[        |      jI                  d.      }|j]                  |       |j]                  |jI                  d.             |j]                  d/       |j]                  |         |j]                  |       |j_                         }d0ja                  || j                        }| jc                  |td        jf                         d1|z  t[        ti        |            |d2}tk        | j                  ||3      }	 tm        |      }|jo                         }|jp                  }|d4k(  r| jc                  d5ja                  ||      td        jf                         | jz                  rF| j}                        }!d6j                  d7|!d7f      }| jc                  |td        jf                         y y d8ja                  ||      }| jc                  |td        jx                         t        |      # |j                          w xY w# tB        $ r Y Yw xY w# 1 sw Y   xY w# tr        $ r#} | jt                  }| jp                  }Y d } ~ d } ~ wtv        $ r/} | jc                  t[        |       td        jx                          d } ~ ww xY w)9NzIncompatible url %s)httphttpszunsupported schema gpgz--detach-signz-az--local-userr   )dry_runrbz:actionfile_uploadprotocol_version1nameversioncontentfiletyper.   metadata_versionz1.0summary	home_pageauthorauthor_emaillicensedescriptionkeywordsplatformclassifiers)download_urlprovidesrequires	obsoletesr   commentz.ascgpg_signature:asciizBasic z3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254s   
--s   --
z+
Content-Disposition: form-data; name="%s"z; filename="%s"r      zutf-8s   

zSubmitting {} to {}z multipart/form-data; boundary=%s)zContent-typezContent-lengthAuthorization)dataheaders   zServer response ({}): {}
zK---------------------------------------------------------------------------zUpload failed ({}): {})Ar   r#   AssertionErrorr   r   r   r5   openreadcloser'   metadataget_nameget_versionospathbasenameget_descriptionget_urlget_contactget_contact_emailget_licenceget_long_descriptionget_keywordsget_platformsget_classifiersget_download_urlget_providesget_requiresget_obsoletes_FILE_CONTENT_DIGESTSitems	hexdigest
ValueErrorr   r   encoder   decodeioBytesIO
isinstancelisttypetuplestrwritegetvalueformatannounceloggingINFOlenr   r   getcoder,   r   codeOSErrorERRORr   _read_pypi_responsejoinr	   )"r   r-   r.   r/   schemanetlocurlparamsquery	fragmentsgpg_argsfr<   metarR   digest_namedigest_cons	user_passauthboundarysep_boundaryend_boundarybodykeyvaluetitler,   rS   requestresultstatusreasonetexts"                                     r    r+   zupload.upload_fileI   s   8@8Q5VUIUi !6!HII** !6!?@@ 99h?H}}!/ ?1(DLL1 4 	ffhGGGI  ))
}
 

 DMMO
 t'')
 ((2G<
 
 
 
 t++-
 
 d&&(
  D224!
" t'')#
$ 4446%
& ))+'
( **,)
* 4//1+
, !113))+))+++-5
: Y )>(C(C(E 	$K"$/$8$B$B$D[!		 99h'. X!)+)9)9()Cf)Laffh(W_%X ]]S(4==8@@I	 ,Y7>>wGG I 8??7#;;#i/zz|**, 	"JCCcIEeT* 	";%'.q99E!!HEJ--g6E

<(

5<<01

;'

5!	"	" 	

< }}#**8T__Ec7<<( ?I!#d)n!
 $//gF		W%F^^%FZZF S=MM*11&&A7<< !!//7ii4 :;c7<<0 "
 +11&&ACMM#w}}- %%_ GGIP  
X X`  	VVFUUF 	MM#a&'--0	sN    U &U)6U9('V U&)	U65U69V	W(V--W(9*W##W(N)__name__
__module____qualname__rD   r   user_optionsboolean_optionsr   r%   r0   r+    r!   r    r   r      sK    1K --7=1 L
 $33vh>O7 ;E&r!   r   )__doc__r]   rs   hashlibr~   base64r   urllib.requestr   r   r   urllib.parser   errorsr	   r
   corer   r   getattrrm   r   r   r!   r    <module>r      si    
 	   % 6 6 ! 9    '5$/Wh5 )T: q&] q&r!   