3
F^,                 @   sb   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dlZd dlZG dd dZdS )    )TimerStatussetup_logger)SmartDL)utils)StringIONc               @   sV  e Zd ZdZf Zej Zej	dfddZ
edd Zedd Zed	d
 Zedd Zedd Zedd Zedd Zedd Zejdd Zedd Zedd Zejdd Zedd Zedd Zedd  Zejd!d" Zd#d$ Zd%d& Zd'd( Zed)d*d+Zd,d- Z d.d/ Z!d0d1 Z"d2d3 Z#ed)d4d5Z$d6d7 Z%d8d9 Z&d:S );PayLoadx   z.zipc	       	      C   s   || _ || _|| _|| _tj| _|| _t | _	t
|| j	| _d | _d| _d| _g | _|j | _|| _|| _d | _d | _d | _d| _d| _d | _d| _d S )NFT   <      )_PayLoad__key_PayLoad__filename_PayLoad__download_link_PayLoad__output_dirr   ESA_CREDENTIALS_PayLoad__credentials_PayLoad__statusr   _PayLoad__logger_streamr   _PayLoad__logger_PayLoad__downloader_PayLoad__downloader_ready_PayLoad__queued_for_download_PayLoad__is_hash_correctupper_PayLoad__md5_checksum_PayLoad__payload_size_PayLoad__ext_PayLoad__hash_check_thread_PayLoad__request_thread_PayLoad__recheck_thread_PayLoad__fail_retries_PayLoad__fail_retry_in_PayLoad__fail_retry_at_PayLoad__retry_in_multiplier)	selfkeydownload_link
output_dirfilenamemd5_checksumZpayload_sizestatusext r-   ?/home/ghaith/Applications/sentSatProg_v.0.1.3/payloadmanager.py__init__   s,    
zPayLoad.__init__c             C   s   | j S )N)r   )r%   r-   r-   r.   r&   +   s    zPayLoad.keyc             C   s   | j S )N)r   )r%   r-   r-   r.   r)   /   s    zPayLoad.filenamec             C   s   | j }|dd |dd  S )Nr             )r   )r%   prodNamer-   r-   r.   product_short_name3   s    zPayLoad.product_short_namec             C   s   | j S )N)r   )r%   r-   r-   r.   r'   8   s    zPayLoad.download_linkc             C   s   | j S )N)r   )r%   r-   r-   r.   r(   <   s    zPayLoad.output_dirc             C   s   | j d | j | j S )N/)r   r   r   )r%   r-   r-   r.   	full_path@   s    zPayLoad.full_pathc             C   s   | j S )N)r   )r%   r-   r-   r.   sizeD   s    zPayLoad.sizec             C   s   | j S )N)r   )r%   r-   r-   r.   esa_credentialsH   s    zPayLoad.esa_credentialsc             C   s,   t |tk	r"t|dkr"tdn|| _d S )Nr   z)Credentials should be a tuple of length 2)typetuplelen
ValueErrorr   )r%   valuer-   r-   r.   r8   L   s    
c             C   s   | j S )N)r   )r%   r-   r-   r.   
downloaderS   s    zPayLoad.downloaderc             C   s   | j S )N)r   )r%   r-   r-   r.   r+   W   s    zPayLoad.statusc             C   s
   || _ d S )N)r   )r%   r=   r-   r-   r.   r+   [   s    c             C   s   | j S )N)r   )r%   r-   r-   r.   log_   s    zPayLoad.logc             C   s   | j S )N)r   )r%   r-   r-   r.   log_textc   s    zPayLoad.log_textc             C   s   | j S )N)r   )r%   r-   r-   r.   queued_for_downloadg   s    zPayLoad.queued_for_downloadc             C   s
   || _ d S )N)r   )r%   r=   r-   r-   r.   queued_for_fownloadk   s    zPayLoad.queued_for_fownloadc             C   s   | j  | _ d S )N)r   )r%   r-   r-   r.   toggle_downloado   s    zPayLoad.toggle_downloadc             C   s   t | jtk	r$t| jdkr$tdt| j| jd | j | j	 dd| j
| jd| jd | jd dd
| _| jj| jd | jd  d	| _d S )
Nr   zCredentials Not setup correctlyr5   Fmd5r      )	destprogress_barfix_urlsloggerhash_checksum	hash_algousernamepasswordthreadsT)r9   r   r:   r;   r<   DMr   r   r   r   r   r   r   add_basic_authenticationr   )r%   r-   r-   r.   configure_downloaderr   s    (zPayLoad.configure_downloaderc             C   s   | j r| jtjkry&| jjdd tj| _| jjd W q   tj	| _| j
dkr| j
d | _
tj | j | _| jjdj| j
tj| jdd |  j| j9  _n| jjd	jd Y qX n,| j s| jjd n| jtjkr| jjd d S )NF)blockingr   r   rE   z7Download failed - Retries left [{}] - Next retry in: {}T)	fmt_shortz,Download failed - No retries left
End Log
{}#   zACould not start downlad because the download manager is not Readyz@could not start download because download is already in progressz####################)r   r   r   Onliner   startDownloadingr   appendFailedr!   timer"   r#   r   warningformatr   
time_humanr$   error)r%   r-   r-   r.   download}   s"    
"zPayLoad.download)
main_timerc             C   s   | j j  |jtjry(| jjd tj| j	| j
dddd}W n@ tk
r~ } z$| jjdjt| | j j  d S d }~X nX |jdkrtj| _| jjd nF|jdkrtj| _| jjd	 n&|jd
krtj| _| jjd |j  | j j  n
| j j  d S )NZ
RequestingT
   )authverifystreamtimeoutzCould not attempt request:
{}   zImage has been requested   z%Image is Online - Queued for downloadi  zRequests exceed user quota)_PayLoad__thread_rlockacquirehas_elapsedr   RECHECK_PERIODr   inforequestsgetr   r   	Exceptionr`   r^   strreleasestatus_coder   	Requestedr   rW   Pendingtick)r%   rb   rer-   r-   r.   attempt_request   s*    




zPayLoad.attempt_requestc             C   s   | j j  |jtjd ryptj| jjdd| j	dddd}|j
dkr~| j|j d  | j|j d  | jjd	 |j  | j j  W q tk
r } z$| jjd
jt| | j j  d S d }~X qX n
| j j  d S )Nr
   z$valuez?$format=jsonTrc   )rd   re   rf   rg   ri   dzChecking Online availabilityz'Could not check Online availability:
{})rj   rk   rl   r   rm   ro   rp   r   replacer   rt   update_checksum_from_metajsonupdate_status_from_metar   rn   rw   rs   rq   r^   rr   )r%   rb   rx   ry   r-   r-   r.   check_online   s    
 

zPayLoad.check_onlinec             C   sL   | j jd | jd dkrHtj| jf d| _d| j_| jj  d| jd	< d S )
NzCalculating Hash...rE   r   )targetargsTrV   r   r   )	r   rn   r   	threadingThread#_PayLoad__verify_hash_thread_targetr   daemonrX   )r%   r-   r-   r.   verify_hash_threaded   s    
zPayLoad.verify_hash_threadedc             C   s   dS dS d S )NrE   rD   r5   r   )r   get_file_hashr   r   r   r   r   )r%   r*   Z	hashValuer-   r-   r.   verify_hash   s        zPayLoad.verify_hashc             C   s   | j | j| jd< d S )NrE   r   )r   r   r   )r%   r-   r-   r.   Z__verify_hash_thread_target   s    z#PayLoad.__verify_hash_thread_targetc             C   s*  | j tjk rT| jr | jj dk	s*| jd krTtj| j|fd| _d| j_| jj	  n| j tjkr| j
rt| j
j dk	s~| j
d kr| jjd tj| j|fd| _
d| j
_| j
j	  nr| j tjkrb| jj r&| jj rtj| _ | j  nvtj| _ | jdkrN| jd | _tj | j | _| jjdj| jtj| jdd |  j| j9  _n| jjdjd n| j tjkrtj| _ | j j!d | j  n| j tjkrtj | jkr&| jjd | j"  tj#| _ n\| j tjkr&| j d }|dkrtj$| _ | jjdjd n|dkr&tj%| _ | jjd d S )NT)r   r   zwe will see if onliner   rE   z7Download failed - Retries left [{}] - Next retry in: {})rS   z,Download failed - No retries left
End Log
{}rT   rU   r   z/Resetting Downloader and requeuing for downloadzHash matches
End Log
{}z0Hash doesn't match.
Downloaded file is corruptedz####################rV   r   z####################)&r   r   ru   r   is_aliver   r   rz   r   rX   r    r   rn   r   rY   r   
isFinishedisSuccessfulHashr   r[   r!   r\   r"   r#   r]   r^   r   r_   r$   r`   
Downloadedr   rZ   rQ   Offline	Succeeded	Corrupted)r%   rb   chr-   r-   r.   auto_update_status   sT    



"




zPayLoad.auto_update_statusc             C   s   |d d | _ d S )NChecksumValue)r   )r%   responseJsonr-   r-   r.   r}     s    z!PayLoad.update_checksum_from_metac             C   s6   |d rt j| _| jjd n| jjd|d   d S )NrW   zImage is OnlinezImage is Online?: %s)r   rW   r   r   rn   )r%   r   r-   r-   r.   r     s    zPayLoad.update_status_from_metaN)'__name__
__module____qualname__rm   r   r   RLockrj   r   r   r/   propertyr&   r)   r4   r'   r(   r6   r7   r8   setterr>   r+   r?   r@   rA   rB   rC   rQ   ra   r   rz   r   r   r   r   r   r}   r   r-   r-   r-   r.   r   
   s>   	8r   )miscr   r   r   	pySmartDLr   rO   r   ior   ro   r   r\   r   r-   r-   r-   r.   <module>   s   