o `PL@sddlZddlZddlZddlZddlmmZddlZddl Z ddl Z ddl m Z ddl m Z ddl mZddl mZddlmZGddde jjZe jd edS) N)config)log)tempdir)progress)BackendExceptionc@s|eZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZdS) IDriveBackendcCs@tjj||||_tj|j|_td |d|_ dS)Nzparsed_url: {0}F) duplicitybackendBackend__init__ parsed_urlstrip_auth_from_url url_stringrDebugformat connected)selfr rC/usr/lib/python3/dist-packages/duplicity/backends/idrivedbackend.pyr is  zIDriveBackend.__init__cCs|jSN)rrrrruser_connectedsszIDriveBackend.user_connectedcCstd|z ||\}}}Wnty td|w||}zddtd|d}t |}Wnd}Ytd||S)NzRequest command: {0}z'Unknown protocol failure on request {0}zz<[^>]+>zzRequest response: {0}) rrrsubprocess_popenKeyErrorrjoinrefindallET fromstring)r commandline_replyerrorresponsexmlelrrrrequestvs zIDriveBackend.requestc Csdtjd}|dur1tdtdtdtdtdtdtdtdtj|d |_t d |jtjd |_ |j duretdtd td tdtdt d|j tjd}|durtdtdtdtdtdtdt d|d ||_ t jdurd|_d|_ndtjdt j|_zt|jWnFty}z9d|_|jtjkrt d |jn tdtd |jtdtdtd |jWYd}~nd}~wwt d |jd|_tjd |_|jdur6tdtd!td"tdtd#t d$|j||j|j d% |j d&}|jd'd(kratd)|jd*|jd*d+krmtd,|jd-d.krytd/|jd0d1krtjd2}|durtdtd3td4td5tdtd6t d7||j d8 |7_ ||j|j d9 |j d&}|jd:|_||j|j d; |j |j}d|_|d<D]}|jd=|jkrd>|jd?d@|_q|jdur(||j|j dA |j|j |jd<}d>|jd?d@|_d|_t dBdS)CN IDEVSPATHzH------------------------------------------------------------------------zHWARNING: No path to 'idevsutil_dedup' has been set. Download module fromzZ https://www.idrivedownloads.com/downloads/linux/download-options/IDrive_linux_64bit.ziporzZ https://www.idrivedownloads.com/downloads/linux/download-options/IDrive_linux_32bit.zipzTand place anywhere with exe rights. Then creat env var 'IDEVSPATH' with path to filezBNo IDEVSPATH env var set. Should contain folder to idevsutil_dedupidevsutil_dedupzIDrive command base: %sIDRIVEIDz WARNING: IDrive logon ID missingzACreate an environment variable IDriveID with your IDrive logon IDz1No IDRIVEID env var set. Should contain IDrive idz IDrive id: %s IDPWDFILEz&WARNING: IDrive password file missgingz5Please create a file with your IDrive logon password,zMThen create an environment variable IDPWDFILE with path/filename of said filez;No IDPWDFILE env var set. Should contain file with passwordzIDrive pwdpath: %sz --password-file={0}Fr/z)Using existing directory {0} as fake-rootzOWARNING: Creation of FAKEROOT {0} failed; backup will use system temp directoryz-This might interfere with incremental backupsz$Creation of the directory {0} failedz>Directory {0} created as fake-root (Will clean-up afterwards!)TIDBUCKETz%WARNING: IDrive backup bucket missingzDCreate an environment variable IDBUCKET specifying the target bucketzs z(IDriveBackend.list_raw..cSsg|] }|dr|qS)[) startswith.0xrrr sz*IDriveBackend.list_raw..cSstdd|S)NcSs|Sr)stripcrrrrW:IDriveBackend.list_raw....)maprUrrrrWscSsttdd|S)NcSs|dkS)Nrrr_rrrrWrarb)listfilter)colsrrrrWs)r>rBrurllibparseunquoter lstriprFrstriprCrErrPrDrOrrrrc splitlinesrd)r remote_pathr r!lfilteredrrrlist_raws$   zIDriveBackend.list_rawc Cstd|s ||d}tj|j|}t j |j j d}t|j|td|j|td}|||d|j|jd|j|j|j|j|}td|||\}} }td | |t|dS) N_PUTutf-8r-z*put_file: source_path={0}, remote_file={1}wrz6 --device-id={0} --files-from={1} / {2}@{3}::home/{4}zput_file put command: {0}zput_file put response: {0})rrrrSdecoder>rBrrFrgrhrir rjrenamenamertempfileNamedTemporaryFilewriteseekrCrErPrDrOrcloseremove) r source_pathremote_filenamefilename intrim_fileremote_dirpathflist putrequestr! putresponserrr_puts&     zIDriveBackend._putc CsJtd|s ||d}tjtj |j j d|j d|}td||||j jt}td|td}|||d|j|jd|j|j|j|j|}td |||\}} }td | |tj|| dd} td | |jt| |jt|dS) N_GETrrr-zO_get: remote_filename={0}, local_path={1}, remote_path={2}, parsed_url.path={3}z*_get created temporary download folder: {}rsrz4 --device-id={0} --files-from={1} {2}@{3}::home/ {4}zget command: {0}z_get response: {0}z+_get moving file {0} to final location: {1}) rrrrSrtr>rBrrgrhrir rjrFrkrrwmkdtemprxryrzrCrErPrvrDrOrr{rushutilrmtree) rr~ local_pathrrmtmpdirrr r! getresponsedownloadedSrcPathrrr_get5s8      zIDriveBackend._getcCs4td|s ||}dd|D}|S)N_LISTcSsg|]}|dqS)rrZrrrr]dsz'IDriveBackend._list..)rrrrSrp)rrorrr_list]s zIDriveBackend._listcCstd|s ||d}td}||d| dt j t j|jj d|jd}td|||j|jd|j|j|j|j|}td|||\}}}td ||dS) N_DELETErrrsr-rz%delete: {0} from remote file path {1}B --delete-items --device-id={0} --files-from={1} {2}@{3}::home/{4} delete: {0}delete response: {0})rrrrSrtrwrxryrjrzr>rBrrgrhrir rFrkrrCrErPrvrDrOrr{)rr~rrrm delrequestr! delresponserrr_deletehs,       zIDriveBackend._deletecCstd|s |td}|D]}||dddq| dt j t j|jj d|jd}td||j|jd|j|j|j|j|}td |||\}}}td ||dS) Nz _DELETE LISTrsrrr- rz/delete multiple files from remote file path {0}rrr)rrrrSrwrxryrtrjrzr>rBrrgrhrir rFrkrrCrErPrvrDrOrr{)r filename_listrrrmrr!rrrr _delete_lists,      zIDriveBackend._delete_listcCs(tdztdWdSYdS)Nz$Removing IDrive temp folder evs_tempevs_temp)rrrrrrrr_closes zIDriveBackend._closecsTtd|s ||}|rfdd|D}|r&dt|diSddiS)N_QUERYc&g|]}|ddkr|dqSrrrrtrZrrrr]&z(IDriveBackend._query..sizerrrrrrSrpint)rrrorrr_querys zIDriveBackend._querycsptd|s ||}i}|D] |r"fdd|D}|r/dt|di|<qddi|<q|S)N _QUERY_LISTcrrrrZrrrr]rz-IDriveBackend._query_list..rrrr)rrroinforesultrrr _query_lists zIDriveBackend._query_listcCs|jr t|jdSdSr)rGr>rmdirrFrrrr__del__szIDriveBackend.__del__N)__name__ __module__ __qualname__r rr'rSrprrrrrrrrrrrrrrgs w(  ridrived)r>rgrwrxml.etree.ElementTreeetree ElementTreerrrJduplicity.backendrrrrrduplicity.errorsrr r rregister_backendrrrrs"     Dp