o
    !i1                     @   s   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 d dlm	Z	 d dl
m
Z
 dZG dd deZG d	d
 d
ZG dd deZdS )    N)glob)Path)logger)tqdmz0.4.4c                   @   s   e Zd ZdS )MissingDestinationN)__name__
__module____qualname__ r
   r
   A/home/ubuntu/.local/lib/python3.10/site-packages/rclone/rclone.pyr      s    r   c                   @   s   e Zd Zdd Zdd ZdS )CheckRclonec                 C   s
   || _ d S N)rclone)selfr   r
   r
   r   __init__   s   
zCheckRclone.__init__c                 C   s   |r|S |sct   d}t | r0t|}|  }W d    |S 1 s)w   Y  |S td td}t | sFt	d t
t|d}|| W d    |S 1 s\w   Y  |S d S )Nz/.pyrcloneczWCould not find rclone in your PATH. Enter it manually and the program will remember it.zPath to rclone binary: z+The rclone path you entered does not exist.w)r   homeexistsopenreadrstripr   warninginputerrorFileNotFoundErrorwrite)r   r   	pyrclonecfr
   r
   r   __call__   s2   



zCheckRclone.__call__N)r   r   r	   r   r   r
   r
   r
   r   r      s    r   c                       sV   e Zd Zd fdd	Zdd Zdd Z			
	dddZdd Zdd Zdd Z	  Z
S )RcloneBFc                    s$   t  td| _|| _|| _d S )Nr   )superr   shutilwhichr   unitdebug)r   r$   r%   	__class__r
   r   r   3   s   
zRclone.__init__c                 C   s   d|v rt t|dd d | d}|S d|v r,t t|dd d | d}|S d	|v r@t t|d
d d | d}|S )NKiBz KiBr   i      MiBz MiBg    0AGiBz GiBg     A)roundfloatsplit)r   smultr
   r
   r   _size_units8   s      zRclone._size_unitsc              	   C   sx  | j dkrd}nd}t| rNt| rAt| ddd}d}|D ]}z|t| j7 }W q# ty9   Y q#w t|| }ntt| j| d}nd}|	 d u }t
jd	d
d t|| j dN}d}	|jD ]?}
|
 }d|v rd|v r|dd dd  dd }| ||}t|tr|||	  |}	qjd|v r|| qjW d    d S 1 sw   Y  d S )NMBg    .A   z/**/*T)	recursiver   r)   ignorezclamping frac to range)message)totalr$   TransferredETAzTransferred:	z / r   )r$   r   r   is_dirr   statst_sizer   r,   pollwarningsfilterwarningsr   stdoutdecoder.   lstripr1   
isinstancer-   updater   )r   pdstr0   filessizexstreampbarprogliner/   r
   r
   r   _stream_processA   sP   



"zRclone._stream_process Tc                 G   s  |dvs|rd}d}nd}|dv r|r|st d|dkrd}d	|}| j d	| d	| d	| d	| d	| }	| jr@t|	 tj|	d
tjtjd}
|r^| 	|
|r^t
d | 	|
|sS|
 d  }|dkrt|dd dd dd }t|dd dd dd dd }||dS |dkrt|S |dkr| dS |r| dd	S |dkrd|	v r| dd S |S )N)copymovesyncbisynccopytocopyurlFrP   z-P)rQ   rR   z+The command requires passing a destination.lslsf T)shellrA   stderrg?r   rI   zTotal objects: r3   z ()zTotal size: z Byte)total_objects
total_sizelsjson
r:   configfile)r   joinr   r%   r   
subprocessPopenPIPESTDOUTrO   timesleepcommunicaterB   intr.   jsonloadsr   replacestrip)r   
subcommandfrom_toprogress_executeargsP_args_commandrF   OUTr]   r^   r
   r
   r   _processh   s^   
(

 

zRclone._processc                 C   s   | j |dddddS )NrP   FT)rq   rr   rs   rt   ru   r{   )r   commandr
   r
   r   execute   s   zRclone.executec                  O   s   t d)Nz7delete is a protected command! Use `execute()` instead.)NotImplementedErrorrv   kwargsr
   r
   r   delete   s   zRclone.deletec                    s    fdd}|S )Nc                     s   j  g| R i |S r   r|   r   attrr   r
   r   wrapper   s   z#Rclone.__getattr__.<locals>.wrapperr
   )r   r   r   r
   r   r   __getattr__   s   zRclone.__getattr__)r    F)rP   TF)r   r   r	   r   r1   rO   r{   r~   r   r   __classcell__r
   r
   r&   r   r   1   s    	*
>r   )rm   r"   re   ri   r?   r   pathlibr   logurur   r   __version__	Exceptionr   r   r   r
   r
   r
   r   <module>   s   