³ò
 ›\Kc           @   sÊ   d  Z  d d k Td d k l Z d d k l Z d d k l Z d d k l	 Z	 d d k
 Z
 d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d e f d	 „  ƒ  YZ d S(
   s`   distutils.command.upload

Implements the Distutils 'upload' subcommand (upload package to PyPI).iÿÿÿÿ(   t   *(   t   Command(   t   spawn(   t   log(   t   md5Nt   uploadc           B   sc   e  Z d  Z d Z d d d e f d d d g Z d d g Z d „  Z d „  Z d „  Z	 d „  Z
 RS(   s   upload binary package to PyPIs   http://pypi.python.org/pypis   repository=t   rs   url of repository [default: %s]s   show-responses&   display full response text from servert   signt   ss   sign files to upload using gpgs	   identity=t   is   GPG identity used to sign filesc         C   s:   d |  _  d |  _ d |  _ d |  _ t |  _ d  |  _ d  S(   Nt    i    (   t   usernamet   passwordt
   repositoryt   show_responset   FalseR   t   Nonet   identity(   t   self(    (    s.   /usr/lib/python2.5/distutils/command/upload.pyt   initialize_options$   s    					c         C   s>  |  i  o |  i o t d ƒ ‚ n t i i d ƒ oè t i i t i d d ƒ } t i i | ƒ oµ |  i	 d | ƒ t
 i
 h  d d <d d <d d <ƒ } | i | ƒ |  i p | i d	 d ƒ |  _ n |  i p | i d	 d ƒ |  _ n |  i p | i d	 d ƒ |  _ qq n |  i p |  i |  _ n d  S(
   Ns.   Must use --sign for --identity to have meaningt   HOMEs   .pypircs   Using PyPI login from %sR
   R   R   R   s   server-login(   R   R   t   DistutilsOptionErrort   ost   environt   has_keyt   patht   joint   existst   announcet   ConfigParsert   readR   t   getR   R   t   DEFAULT_REPOSITORY(   R   t   rct   config(    (    s.   /usr/lib/python2.5/distutils/command/upload.pyt   finalize_options,   s(    
		


!
c         C   sT   |  i  i p t d ƒ ‚ n x0 |  i  i D]" \ } } } |  i | | | ƒ q* Wd  S(   Ns'   No dist file created in earlier command(   t   distributiont
   dist_filesR   t   upload_file(   R   t   commandt	   pyversiont   filename(    (    s.   /usr/lib/python2.5/distutils/command/upload.pyt   runC   s
     c      
   C   sç  |  i  oM d d d | g } |  i o d |  i g | d d +n t | d |  i ƒn t | d ƒ i ƒ  } |  i i } h  d d	 <d
 d <| i ƒ  d <| i	 ƒ  d <t
 i i | ƒ | f d <| d <| d <t | ƒ i ƒ  d <d d <| i ƒ  d <| i ƒ  d <| i ƒ  d <| i ƒ  d <| i ƒ  d <| i ƒ  d <| i ƒ  d <| i ƒ  d <| i ƒ  d <| i ƒ  d <| i ƒ  d <| i ƒ  d <| i ƒ  d  <} d! } | d" j o4 t i ƒ  \ }	 }
 } |	 o d# |	 |
 f } q*n( | d$ j o d% t i d& d' ƒ } n | | d( <|  i  o4 t
 i i | ƒ d) t | d) ƒ i ƒ  f | d* <n d+ t i |  i  d, |  i! ƒ i" ƒ  } d- } d. | } | d/ } t# i# ƒ  } x | i$ ƒ  D]ò \ } } t% | ƒ t% g  ƒ j o | g } n x½ | D]µ } t% | ƒ t& j o d0 | d1 } | d' } n d! } t' | ƒ } | i( | ƒ | i( d2 | ƒ | i( | ƒ | i( d3 ƒ | i( | ƒ | o" | d4 d5 j o | i( d6 ƒ qqWqÌW| i( | ƒ | i( d6 ƒ | i) ƒ  } |  i* d7 | |  i+ f t, i- ƒ t. i. |  i+ ƒ \ } } } } } } | o | o | p t/ ‚ | d8 j o t0 i1 | ƒ } n. | d9 j o t0 i2 | ƒ } n t/ d: | ‚ d! } t, i- } yu | i3 ƒ  | i4 d; | ƒ | i5 d< d= | ƒ | i5 d> t' t6 | ƒ ƒ ƒ | i5 d? | ƒ | i7 ƒ  | i8 | ƒ Wn5 t9 i: j
 o& } |  i* t' | ƒ t, i; ƒ d  Sn X| i< ƒ  } | i= d@ j o' |  i* dA | i= | i> f t, i- ƒ n$ |  i* dB | i= | i> f t, i; ƒ |  i? o dC dD G| i ƒ  GdC dD GHn d  S(E   Nt   gpgs   --detach-signs   -as   --local-useri   t   dry_runt   rbt   file_uploads   :actiont   1t   protcol_versiont   namet   versiont   contentt   filetypeR(   t
   md5_digests   1.0t   metadata_versiont   summaryt	   home_paget   authort   author_emailt   licenset   descriptiont   keywordst   platformt   classifierst   download_urlt   providest   requirest	   obsoletesR
   t	   bdist_rpms   built for %s %st
   bdist_dumbs   built for %st   tersei   t   comments   .asct   gpg_signatures   Basic t   :s3   --------------GHSKFJDLGDS7543FJKLFHRE75642756743254s   
--s   --s   ;filename="%s"i    s*   
Content-Disposition: form-data; name="%s"s   

iÿÿÿÿs   s   
s   Submitting %s to %st   httpt   httpss   unsupported schema t   POSTs   Content-types    multipart/form-data; boundary=%ss   Content-lengtht   AuthorizationiÈ   s   Server response (%s): %ss   Upload failed (%s): %st   -iK   (@   R   R   R   R,   t   openR   R$   t   metadatat   get_namet   get_versionR   R   t   basenameR   t	   hexdigestt   get_descriptiont   get_urlt   get_contactt   get_contact_emailt   get_licencet   get_long_descriptiont   get_keywordst   get_platformst   get_classifierst   get_download_urlt   get_providest   get_requirest   get_obsoletesR>   t   distt   base64t   encodestringR   R   t   stript   StringIOt   itemst   typet   tuplet   strt   writet   getvalueR   R   R   t   INFOt   urlparset   AssertionErrort   httplibt   HTTPConnectiont   HTTPSConnectiont   connectt
   putrequestt	   putheadert   lent
   endheaderst   sendt   sockett   errort   ERRORt   getresponset   statust   reasonR   (   R   R'   R(   R)   t   gpg_argsR3   t   metat   dataRG   Rb   R2   t   idt   autht   boundaryt   sep_boundaryt   end_boundaryt   bodyt   keyt   valuet   fnt   schemat   netloct   urlt   paramst   queryt	   fragmentsRJ   t   loglevelt   eR   (    (    s.   /usr/lib/python2.5/distutils/command/upload.pyR&   I   sÄ    

						

!'

   $	
	
	

N(   s   show-responseNs&   display full response text from server(   s   signR   s   sign files to upload using gpg(   s	   identity=R	   s   GPG identity used to sign files(   t   __name__t
   __module__R<   R    R   t   user_optionst   boolean_optionsR   R#   R*   R&   (    (    (    s.   /usr/lib/python2.5/distutils/command/upload.pyR      s   
  				(   t   __doc__t   distutils.errorst   distutils.coreR   t   distutils.spawnR   t	   distutilsR   t   hashlibR   R   Ry   R>   R   Rp   Rc   Rn   t	   cStringIORf   R   (    (    (    s.   /usr/lib/python2.5/distutils/command/upload.pys   <module>   s   
