o *pa@svddlmZeddlZddlZddlmZddlmZddlm Z ddl ZGdddej j Z ej de dS) )standard_libraryN)log)util)BackendExceptionc@s<eZdZddZddZddZddZd d Zd d Zd S) RcloneBackendcCstjj||||_|jj|_d|_z ||jd\}}}Wnt y1t dt j j Ynwt }|t jkrAdtjd<n |t jkrLdtjd<n|t jkrWdtjd<n |t jkradtjd<|jd rt|jd dd d d |_t|j|_dS)Nrclonez versionz'rclone not found: please install rcloneDEBUGRCLONE_LOG_LEVELINFONOTICEERRORz//z:/:) duplicitybackendBackend__init__ parsed_urlpath remote_path rclone_cmd_subprocess_safe_popen Exceptionr FatalError ErrorCode backend_error getverbosityrosenvironr r r startswithreplacerfsdecode)selfrrcoeverbr(B/usr/lib/python3/dist-packages/duplicity/backends/rclonebackend.pyr$s*           zRcloneBackend.__init__cCsdt|}t|j}d|j|j||f}||\}}}|dkr0tj|r,t |t |dS)Nz%s copyto '%s/%s' '%s'r) rr"namerrrrrisfileremover)r#remote_filename local_pathlocal_pathname commandliner$r%r&r(r(r)_get>s     zRcloneBackend._getcCsNt|j}t|}d|j||j|f}||\}}}|dkr%t|dS)Nz%s copyto '%s' '%s/%s'r)rr"r*rrrr)r# source_pathr-source_pathnamer0r$r%r&r(r(r)_putIs   zRcloneBackend._putcCs\g}d|j|jf}||\}}}|dkr|S|dkr t||s$|Sdd|dDS)Nz %s lsf '%s'rcSsg|] }|rt|qSr()rfsencode).0xr(r(r) ]sz'RcloneBackend._list.. )rrrrsplit)r#filelistr0r$r%r&r(r(r)_listRszRcloneBackend._listcCs@t|}d|j|j|f}||\}}}|dkrt|dS)Nz-%s deletefile --drive-use-trash=false '%s/%s'r)rr"rrrr)r#r-r0r$r%r&r(r(r)_delete_s  zRcloneBackend._deletec Csnddl}ddlm}m}||}||||dd}|\}}|dD] } t| dkr0t| q$|j||fS)Nr)PopenPIPET)stdoutstderruniversal_newlinesr:r) shlex subprocessr?r@r; communicatelenprint returncode) r#r0rDr?r@argsprArBlr(r(r)rgs    z$RcloneBackend._subprocess_safe_popenN) __name__ __module__ __qualname__rr1r4r=r>rr(r(r(r)r"s   rr)futurerinstall_aliasesros.pathrrrduplicity.errorsrduplicity.backendrrrregister_backendr(r(r(r)s    Q