
    wffI                         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 ddl	m
Z
mZmZ ddlmZ ddlmZ dd	lmZ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d Zy)zm
distutils.command.upload

Implements the Distutils 'upload' subcommand (upload package to a package
index).
    N)standard_b64encode)urlparse)	HTTPErrorRequesturlopen   )always_iterable)PyPIRCCommand)DistutilsErrorDistutilsOptionError)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    ]C:\xampp-8.1.2\htdocs\client\python\Lib\site-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_options0   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        |      D ]  }tU        |      tV        u r|d+|d,   z  z  }|d-   }ntY        |      jI                  d.      }|j[                  |       |j[                  |jI                  d.             |j[                  d/       |j[                  |         |j[                  |       |j]                         }d0| d1| j                   }| j_                  |t`        jb                         d2|z  tY        te        |            |d3}tg        | j                  ||4      }	 ti        |      }|jk                         }|jl                  } |d5k(  ry| j_                  d6| d7|  t`        jb                         | jv                  rF| jy                        }"d8j{                  d9|"d9f      }| j_                  |t`        jb                         y y d:| d7|  }| j_                  |t`        jt                         t}        |      # |j                          w xY w# tB        $ r Y 1w xY w# 1 sw Y   xY w# tn        $ r#}!|!jp                  }|!jl                  } Y d }!~!
d }!~!wtr        $ r/}!| j_                  tY        |!      t`        jt                          d }!~!ww xY w);Nz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 z to z multipart/form-data; boundary=%s)zContent-typezContent-lengthAuthorization)dataheaders   zServer response (z): 
zK---------------------------------------------------------------------------zUpload failed ()?r   r$   AssertionErrorr   r   r   r6   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make_iterabletypetuplestrwritegetvalueannounceloggingINFOlenr   r   getcoder-   r   codeOSErrorERRORr   _read_pypi_responsejoinr   )#r    r.   r/   r0   schemanetlocurlparamsquery	fragmentsgpg_argsfr=   metarS   digest_namedigest_cons	user_passauthboundarysep_boundaryend_boundarybodykeyvaluestitlevaluer-   rT   requestresultstatusreasonetexts#                                      r!   r,   zupload.upload_fileJ   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|::< 	"KCCcIE&v. 	";%'.q99E!!HEJ--g6E

<(

5<<01

;'

5!	"	" 	

< }}H:T$//):;c7<<( ?I!#d)n!
 $//gF		W%F^^%FZZF S=MM-fXSA7<<P!!//7ii4 :;c7<<0 "
 $F83vh7CMM#w}}- %%U GGIP  
X XZ  	VVFUUF 	MM#a&'--0	sN    T, &U6U'U ,T>	UUU	W 'VW *V;;W N)__name__
__module____qualname__rE   r
   user_optionsboolean_optionsr   r&   r1   r,    r"   r!   r   r      sK    1K --7=1 L
 $33vh>O7 ;@&r"   r   c                 D    | d gS t        | t        t        t        f      S )N)	base_type)r	   bytesry   rx   )r   s    r!   rv   rv      s"    ~v6eS%-@AAr"   )__doc__hashlibrt   r}   r^   base64r   urllib.parser   urllib.requestr   r   r   
_itertoolsr	   corer
   errorsr   r   r   getattrrn   r   rv   r   r"   r!   <module>r      ss     	  	 % ! 6 6 (   9 
 '5$/Wh5 )T: l&] l&^Br"   