£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>

i f                 @   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 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 d d	 l m Z e j d
 k  r d d l m Z n d d l m Z Gd d   d e  Z d S)z`distutils.command.upload

Implements the Distutils 'upload' subcommand (upload package to PyPI).    N)standard_b64encode)urlopenRequest	HTTPError)urlparse)DistutilsErrorDistutilsOptionError)PyPIRCCommand)spawn)logz2.5)md5c               @   si   e  Z d  Z d Z e j d d g Z e j d g Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d S)uploadzupload binary package to PyPIsignssign files to upload using gpg	identity=iGPG identity used to sign filesc             C   s>   t  j |   d |  _ d |  _ d |  _ d |  _ d  |  _ d  S)N r   F)r	   initialize_optionsusernamepasswordshow_responser   identity)self r   =/opt/alt/python34/lib64/python3.4/distutils/command/upload.pyr   #   s    				zupload.initialize_optionsc             C   s   t  j |   |  j r/ |  j r/ t d   n  |  j   } | i  k r~ | d |  _ | d |  _ | d |  _ | d |  _	 n  |  j r |  j
 j r |  j
 j |  _ n  d  S)Nz.Must use --sign for --identity to have meaningr   r   
repositoryrealm)r	   finalize_optionsr   r   r   Z_read_pypircr   r   r   r   distribution)r   configr   r   r   r   +   s    zupload.finalize_optionsc             C   sR   |  j  j s t d   n  x0 |  j  j D]" \ } } } |  j | | |  q( Wd  S)Nz'No dist file created in earlier command)r    Z
dist_filesr   upload_file)r   command	pyversionfilenamer   r   r   run=   s    z
upload.runc       $      C   s  t  |  j  \ } } } } } }	 | s3 | s3 |	 rI t d |  j   n  | dI k rh t d |   n  |  j r d d d | g }
 |  j r d |  j g |
 d	 d	  <n  t |
 d
 |  j n  t | d  } z | j   } Wd  | j	   X|  j
 j } i d d 6d d 6| j   d 6| j   d 6t j j |  | f d 6| d 6| d 6t |  j   d 6d d 6| j   d 6| j   d 6| j   d 6| j   d 6| j   d 6| j   d 6| j   d 6| j   d 6| j   d  6| j   d! 6| j   d" 6| j   d# 6| j   d$ 6} d% } | d& k rRt  j!   \ } } } | rwd' | | f } qwn% | d( k rwd) t  j  d* d+  } n  | | d, <|  j rt j j |  d- t | d- d  j   f | d. <n  |  j" d/ |  j# j$ d0  } d1 t% |  j& d0  } d2 } d3 | j$ d0  } | d4 } t' j(   } x| j)   D] \ } } d5 | } t* |  t* g   k rl| g } n  x | D] } t* |  t+ k r| d6 | d7 7} | d+ } n t, |  j$ d8  } | j- |  | j- | j$ d8   | j- d9  | j- |  | rs| dJ d   d: k rs| j- d;  qsqsWq2W| j- |  | j.   } |  j/ d< | |  j f t0 j1  i d= | d> 6t, t2 |   d? 6| d@ 6} t3 |  j dA | dB | } y% t4 |  } | j5   } | j6 }  Wnw t7 k
 r}! z! |  j/ t, |!  t0 j8    WYd  d  }! ~! Xn7 t9 k
 rM}! z |! j: } |! j6 }  WYd  d  }! ~! Xn X| dC k rz|  j/ dD | |  f t0 j1  n/ dE | |  f }" |  j/ |" t0 j8  t; |"   |  j< r|  j= |  }# dF j> dG dH |# dG dH f  }" |  j/ |" t0 j1  n  d  S)KNzIncompatible url %shttphttpszunsupported schema Zgpgz--detach-signz-az--local-user   dry_runrbZfile_uploadz:action1Zprotcol_versionnameversioncontentZfiletyper$   Z
md5_digestz1.0Zmetadata_versionZsummaryZ	home_pageZauthorZauthor_emaillicensedescriptionkeywordsplatformZclassifiersZdownload_urlZprovidesZrequiresZ	obsoletesr   Z	bdist_rpmzbuilt for %s %sZ
bdist_dumbzbuilt for %sZterse   commentz.ascZgpg_signature:asciizBasic z3--------------GHSKFJDLGDS7543FJKLFHRE75642756743254s   
--s   --
z+
Content-Disposition: form-data; name="%s"z; filename="%s"r   zutf-8s   

s   s   
zSubmitting %s to %sz multipart/form-data; boundary=%szContent-typezContent-lengthZAuthorizationdataheaders   zServer response (%s): %szUpload failed (%s): %s
-K   )r'   r(   )?r   r   AssertionErrorr   r   r
   r*   openreadcloser    ZmetadataZget_nameZget_versionospathbasenamer   Z	hexdigestZget_descriptionZget_urlZget_contactZget_contact_emailZget_licenceZget_long_descriptionZget_keywordsZget_platformsZget_classifiersZget_download_urlZget_providesZget_requiresZget_obsoletesr3   distr   r   encoder   decodeioBytesIOitemstypetuplestrwritegetvalueZannouncer   INFOlenr   r   ZgetcodemsgOSErrorZERRORr   coder   r   Z_read_pypi_responsejoin)$r   r#   r$   r%   ZschemaZnetlocZurlZparamsZqueryZ	fragmentsZgpg_argsfr/   metar8   r5   rF   r.   idZ	user_passZauthboundaryZsep_boundaryZend_boundaryZbodykeyvaluetitler9   ZrequestresultZstatusreasonerS   textr   r   r   r"   C   s    !			
	#

 
			 zupload.upload_fileN)zsignr   r   )r   r   r   )__name__
__module____qualname__r1   r	   Zuser_optionsZboolean_optionsr   r   r&   r"   r   r   r   r   r      s    
r   )__doc__sysrC   rI   Zsocketr3   base64r   Zurllib.requestr   r   r   Zurllib.parser   Zdistutils.errorsr   r   Zdistutils.corer	   Zdistutils.spawnr
   Z	distutilsr   r.   r   Zhashlibr   r   r   r   r   <module>   s   