ó
¼S]c           @@ sä   d  Z  d d l m Z 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	 j
 Z d d l j Z d d l m Z m Z d d l m Z d e f d „  ƒ  YZ d e f d	 „  ƒ  YZ d d d d d d
 „ Z d S(   s   Talking to the Anaconda server.i    (   t   absolute_importt   print_functionN(   t   BinstarErrort   Unauthorized(   t   SimpleStatust   _Clientc           B@ sq   e  Z d d d d d  „ Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z d „  Z RS(   c         C@ sj   t  t d ƒ s t d ƒ ‚ | d  k r3 t j } n  t j d | d | d | ƒ |  _ d  |  _ | |  _	 d  S(   Nt   get_server_apis   Please upgrade anaconda-clientt   sitet   tokent	   log_level(
   t   hasattrt   binstar_utilst   AssertionErrort   Nonet   loggingt   INFOR   t   _apit
   _user_infot   _force_username(   t   selfR   t   usernameR   R	   (    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyt   __init__   s    !	c         C@ sw   |  j  d k r- |  j j d |  j ƒ |  _  n  |  j  d k	 sB t ‚ |  j  j d d ƒ } | d k ro t ƒ  ‚ n | Sd S(   sE   Get username to upload to; raise Unauthorized if we aren't logged in.t   loginN(   R   R   R   t   userR   R   t   getR   (   R   R   (    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyt	   _username!   s    iÈ   iÉ   c         C@ s    |  j  j | d t | ƒ ƒd  S(   Nt   allowed(   R   t   _check_responset   list(   R   t   resR   (    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyR   ,   s    c         C@ sC   d j  |  j j |  j ƒ  | ƒ } |  j j j | ƒ } | j d k S(   Ns   {}/apps/{}/projects/{}iÈ   (   t   formatR   t   domainR   t   sessionR   t   status_code(   R   t   project_namet   urlR   (    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyt   _exists2   s    !c         C@ s¢   d j  |  j j |  j ƒ  ƒ } i | d d 6d d 6i | d d 6d 6} | r[ d | d <n  t j | ƒ \ } } |  j j j | d | d	 | ƒ} |  j | ƒ | S(
   Ns   {}/apps/{}/projectst   namet   publict   accesst   descriptiont   profilet   privatet   datat   headers(	   R   R   R   R   R   t   jencodeR    t   postR   (   R   t   project_infoR*   R#   t   jsonR+   R,   R   (    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyt   create7   s    !c         C@ s±   xQ d D]I } | j  ƒ  j | ƒ r t j | d ƒ  } t | j ƒ  ƒ SWd  QXq q W| j  ƒ  j d ƒ r— t j | d ƒ  } t | j ƒ  ƒ SWd  QXn  t	 s­ t
 d | ƒ ‚ d  S(   Ns   .tars   .tar.gzs   .tar.bz2t   rs   .zips   unsupported archive filename %s(   s   .tars   .tar.gzs   .tar.bz2(   t   lowert   endswitht   tarfilet   opent   lent   getnamest   zipfilet   ZipFilet   namelistt   FalseR   (   R   t   archive_filenamet   suffixt   tft   zf(    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyt   _file_countG   s    c         C@ sÝ   d j  |  j j |  j ƒ  | d ƒ } | j ƒ  } t j j | ƒ | d <| rZ d | d <n  |  j | ƒ } | d  k	 r‚ | | d <n  i | d 6| d 6} t
 j | ƒ \ }	 }
 |  j j j | d	 |	 d
 |
 ƒ} |  j | ƒ | S(   Ns   {}/apps/{}/projects/{}/stageR%   t   sizeR*   R'   t   num_of_filest   basenamet   configurationR+   R,   (   R   R   R   R   t   copyt   ost   patht   getsizeRA   R   R   R-   R    R.   R   (   R   R/   R=   t   uploaded_basenameR*   R#   t   configt
   file_countR0   R+   R,   R   (    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyt   stageQ   s    %!c         C@ sk   d j  |  j j |  j ƒ  | | ƒ } t j i  ƒ \ } } |  j j j | d | d | ƒ} |  j | ƒ | S(   Ns    {}/apps/{}/projects/{}/commit/{}R+   R,   (	   R   R   R   R   R   R-   R    R.   R   (   R   R"   t   dist_idR#   R+   R,   R   (    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyt   commit`   s
    $!c         C@ sã   t  | d ƒ 1 } t j | d t j j | ƒ ƒ\ } } } Wd  QX| j ƒ  } | | d <| | d <t  | d ƒ l }	 t j | d i | |	 f d 6ƒ\ }
 } t	 j
 | d |
 d |  j j j d	 d d | ƒ} |  j | ƒ Wd  QX| S(   Nt   rbRB   s   Content-Lengths   Content-MD5t   filest   fileR+   t   verifyt   timeouti
   i<   R,   iX  i Œ  (   R6   R   t   compute_hashRG   RH   RI   RF   t   binstar_requests_extt   stream_multipartt   requestsR.   R   R    RS   R   (   R   R=   RJ   R#   t   s3datat   ft   _hexmd5t   b64md5RB   t   archive_file_objectt   data_streamR,   R   (    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyt
   _put_on_s3h   s    0

"*c      	   C@ s2  |  j  | d ƒ sC |  j d | d | ƒ } | j d k sC t ‚ n  |  j d | d | d | d | ƒ } | j d k s| t ‚ | j ƒ  } d | k sš t ‚ d	 | k s¬ t ‚ d
 | k s¾ t ‚ |  j | | d | d d | d	 ƒ} | j d k sù t ‚ |  j | d | d
 ƒ } | j d k s(t ‚ | j ƒ  S(   sD   Upload archive_filename created from project, throwing BinstarError.R%   R/   R*   iÈ   iÉ   R=   RJ   t   post_urlt	   form_dataRN   R#   RY   (   iÈ   iÉ   (   iÈ   iÉ   (   iÈ   iÉ   (   iÈ   iÉ   (   R$   R1   R!   R   RM   R0   R_   RO   (   R   R/   R=   RJ   R*   R   t
   stage_info(    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyt   uploady   s&    		 N(   iÈ   iÉ   (   t   __name__t
   __module__R   R   R   R   R$   R1   RA   RM   RO   R_   Rc   (    (    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyR      s   				
			t   _UploadedStatusc           B@ s   e  Z d  „  Z RS(   c         C@ sj   | j  d d  ƒ |  _ g  } |  j d  k	 rA | j d |  j ƒ n  t t |  ƒ j d t d d d | ƒ d  S(   NR#   s   Project is at %st   successR(   s   Upload successful.t   logs(   R   R   R#   t   appendt   superRf   R   t   True(   R   R0   Rh   (    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyR   –   s
    (   Rd   Re   R   (    (    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyRf   •   s   c      	   C@ s¿   |  j  s t ‚ t d | d | d | d | ƒ } y, | j |  j ƒ  | | | ƒ }	 t |	 ƒ SWn[ t k
 r‰ t d t d d d d	 g ƒ St	 k
 rº }
 t d t d d
 d t
 |
 ƒ g ƒ SXd  S(   NR   R   R   R	   Rg   R(   s0   Please log in with the "anaconda login" command.t   errorss   Not logged in.s   Upload failed.(   t   problemsR   R   Rc   t   publication_infoRf   R   R   R<   R   t   str(   t   projectR=   RJ   R*   R   R   R   R	   t   clientR0   t   e(    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyt   _upload¢   s    !(   t   __doc__t
   __future__R    R   R   RG   R5   R9   RX   t   binstar_client.utilst   utilsR   t   binstar_client.requests_extt   requests_extRV   t   binstar_client.errorsR   R   t'   anaconda_project.internal.simple_statusR   t   objectR   Rf   R   Rs   (    (    (    s6   lib/python2.7/site-packages/anaconda_project/client.pyt   <module>   s"   }