
    =e%                     p    d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ  G d d	          ZdS )
    N)OrderedDict)suppress)mktime)parse)DestinationPathExists)PackageTypec                   J    e Zd ZdZd ZddZddZddZd Zdd	Z	d
 Z
d ZdS )
Downloaderz7
    Download files from your Anaconda repository.
    c                 >    || _         || _        || _        d | _        d S N)aserver_apiusernamenotebookoutput)selfr   r   r   s       Hlib/python3.11/site-packages/binstar_client/utils/notebook/downloader.py__init__zDownloader.__init__   s#    &      .Fc                 d    || _         |                                  |                     ||          S r   )r   ensure_outputdownload_files)r   package_typesr   forces       r   __call__zDownloader.__call__   s1    ""=%888r   c                    || _         |                                  t                      }|                                 D ]}|                    dd          }t          t                    5  t          |          }ddd           n# 1 swxY w Y   ||v r7|                     ||          r|||d         <   yt          |d                   |S )z
        This additional method was created to better handle the log output
        as files are downloaded one by one on the commands/download.py.
        type Nbasename)
r   r   r   
list_filesgetr   
ValueErrorr   can_downloadr   )r   r   r   r   filesfilepkg_types          r   list_download_fileszDownloader.list_download_files   s   
 OO%% 		B 		BDxx++H*%% 1 1&x001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 =(($$T511 B.2E$z*++/Z0@AAA	 )
 s   *BB
	B
	c                    g }|                                  D ]}|                    dd          }t          t                    5  t	          |          }d d d            n# 1 swxY w Y   ||v r\|                     ||          r1|                     |           |                    |d                    t          |d                   t          |          S )Nr   r   r   )
r    r!   r   r"   r   r#   downloadappendr   sorted)r   r   r   r   r%   r&   s         r   r   zDownloader.download_files2   s   OO%% 	B 	BDxx++H*%% 1 1&x001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 =(($$T511 BMM$'''MM$z"23333/Z0@AAA ) f~~s   AA#	&A#	c                 b   |d         }| j                             | j        | j        |d         |          }t          j                            t          j                            |                    sC	 t	          j        t          j                            |                     n# t          $ r Y nw xY wt          t          j                            | j        |          d          5 }|                    d          D ]}|                    |           	 ddd           dS # 1 swxY w Y   dS )z.
        Download file into location.
        r   versionwbi   N)r   r)   r   r   ospathexistsdirnamemakedirsOSErroropenjoinr   iter_contentwrite)r   distfilenamerequests_handlefdoutchunks         r   r)   zDownloader.downloadB   s_    
#*33M4=$y/8
 
 w~~bgooh7788 	BGOOH556666    "',,t{H55t<< 	#(55d;; # #E""""#	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s$   31B% %
B21B2(.D$$D(+D(c                     t           j                            t           j                            | j        |d                              p|S )z
        Can download if location/file does not exist or if force=True
        :param dist:
        :param force:
        :return: True/False
        r   )r/   r0   r1   r6   r   )r   r9   r   s      r   r#   zDownloader.can_downloadU   s8     7>>"',,t{D<L"M"MNNNWRWWr   c                     t           j                            | j                  st          j        | j                   dS dS )z2
        Ensure output's directory exists
        N)r/   r0   r1   r   r3   )r   s    r   r   zDownloader.ensure_output^   s>     w~~dk** 	%K$$$$$	% 	%r   c                    g }i }| j                             | j        | j                  d         }|D ]:}|d         |v r"||d                                      |           .|g||d         <   ;|                                D ]\  }}	 |                    t          |d                      ,# t          $ r( |                    t          |d                      Y ]t          $ r |                    |d                    Y w xY w|S )zY
        List available files in a project (aka notebook).
        :return: list
        r$   r   c                 ,    t          | d                   S )Nr-   )intxs    r   <lambda>z'Downloader.list_files.<locals>.<lambda>w   s    #a	l:K:K r   )keyc                 j    t          t          | d                                                             S )Nupload_time)r   r   	timetuplerC   s    r   rE   z'Downloader.list_files.<locals>.<lambda>z   s'    uQ}=M7N7N7X7X7Z7Z0[0[ r   )	r   packager   r   r*   itemsmaxr"   	Exception)r   r   tmpr$   r%   r   versionss          r   r    zDownloader.list_filese   sP   
  ((FFwO 	/ 	/DJ3&&D$%,,T2222)-D$%%"%))++ 	, 	,Hh,c(0K0KLLLMMMM   &[&[\\\      , , ,hrl+++++, s   %B--/D$DDN)r   F)F)__name__
__module____qualname____doc__r   r   r'   r   r)   r#   r   r     r   r   r
   r
      s           9 9 9 9
   (    # # #&X X X X% % %    r   r
   )r/   collectionsr   
contextlibr   timer   dateutil.parserr   binstar_client.errorsr   binstar_client.utils.configr   r
   rU   r   r   <module>r\      s    
			 # # # # # #             ! ! ! ! ! ! 7 7 7 7 7 7 3 3 3 3 3 3q q q q q q q q q qr   