o t3b8 @snddlZddlZddlZddlZddlZddlmZddlmZddZGdddej j Z ej de dS) N)log)utilcCsdtjvrLtjdgtjdd}|djddd}|d }|D],}|d d }t|d krK|dd krBt tj t |d t j|d tj|d<q!dSdS)NDBUS_SESSION_BUS_ADDRESSz dbus-launchT)stdoutuniversal_newlinesrutf8replace)errors =DBUS_SESSION_BUS_PID)osenviron subprocessPopenPIPE communicatedecodesplitlenatexitregisterkillintsignalSIGTERM)poutputlineslinepartsr#?/usr/lib/python3/dist-packages/duplicity/backends/giobackend.py ensure_dbuss     r%c@s`eZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ dS) GIOBackendzUse this backend when saving to a GIO URL. This is a bit of a meta-backend, in that it can handle multiple schemas. URLs look like schema://user@server/path. c sddlmddlm}Gfdddj}tjj||tj |j |_ ||}| }|j jj|d|j||z |j dWdS|jyh}z|jjjkr]WYd}~dSd}~ww)NrGioGLibcs4eZdZdZfddZfddZfddZdS) z.GIOBackend.__init__..DupMountOperationzmA simple MountOperation that grabs the password from the environment or the user. cs2j|||_|d|j|d|jdS)Nz ask-passwordz ask-question)MountOperation__init__backendconnectask_password_cbask_question_cb)selfr-r'r#r$r,<s z7GIOBackend.__init__..DupMountOperation.__init__cs"||j|jjdSN) set_passwordr- get_passwordreplyMountOperationResultHANDLEDr1argskwargsr'r#r$r/Bsz>GIOBackend.__init__..DupMountOperation.ask_password_cbcs|d|jjdS)Nr) set_choicer5r6r7r8r'r#r$r0Fs z>GIOBackend.__init__..DupMountOperation.ask_question_cbN)__name__ __module__ __qualname____doc__r,r/r0r#r'r#r$DupMountOperation8s   r@) gi.repositoryr(r*r+ duplicityr-Backendr,r%File new_for_uri url_string remote_fileMainLoopmount_enclosing_volumeMountMountFlagsNONE_GIOBackend__done_with_mountrunmake_directory_with_parentsGErrorcode IOErrorEnumEXISTS)r1 parsed_urlr*r@oplooper#r'r$r,4s*   zGIOBackend.__init__c Csddlm}ddlm}z||Wn0|jyC}z#|j|jjkr9|j|jjkr9t t dt |t jjWYd}~nd}~ww|dS)Nrr'r)z1Connection failed, please check your password: %s)rAr(r*mount_enclosing_volume_finishrOrPrQALREADY_MOUNTED NOT_SUPPORTEDr FatalError_ruexc ErrorCodeconnection_failedquit)r1fileobjresultrUr(r*rVr#r#r$__done_with_mountes    zGIOBackend.__done_with_mountcOsdSr2r#r8r#r#r$__copy_progressqszGIOBackend.__copy_progresscCs(ddlm}|||jjd|jddSNrr')rAr(copy FileCopyFlags OVERWRITE_GIOBackend__copy_progress)r1sourcetargetr(r#r#r$ __copy_filets zGIOBackend.__copy_filecCsddlm}ddlm}t||jrB|j|jjkr!|dkr!tj j S|j|jj kr,tj j S|j|jj kr7tj j S|j|jjkrDtj jSdSdS)Nrr'r)delete)rAr(r* isinstancerOrPrQFAILEDrr]backend_not_foundPERMISSION_DENIEDbackend_permission_denied NOT_FOUNDNO_SPACEbackend_no_space)r1 operationrVr(r*r#r#r$ _error_code}s    zGIOBackend._error_codecCs<ddlm}|j|j}|jt|}| ||dSrd) rAr(rD new_for_pathnamerGget_child_for_display_namerfsdecode_GIOBackend__copy_file)r1 source_pathremote_filenamer( source_file target_filer#r#r$_puts zGIOBackend._putcCs<ddlm}|jt|}|j|j}| ||dSrd) rAr(rGryrrzrDrwrxr{)r1filename local_pathr(r~rr#r#r$_gets zGIOBackend._getcCsTddlm}g}|j|j|jjd}|d}|r(|| |d}|s|Srd) rAr(rGenumerate_children$FILE_ATTRIBUTE_STANDARD_DISPLAY_NAMEFileQueryInfoFlagsrK next_fileappendget_display_name)r1r(filesenuminfor#r#r$_lists    zGIOBackend._listcCs |jt|}|ddSr2)rGryrrzrl)r1rrr#r#r$_deleteszGIOBackend._deletecCs>ddlm}|jt|}||j|jj d}d| iS)Nrr'size) rAr(rGryrrz query_infoFILE_ATTRIBUTE_STANDARD_SIZErrKget_size)r1rr(rrr#r#r$_querys  zGIOBackend._queryN)r<r=r>r?r,rLrhr{rvrrrrrr#r#r#r$r&/s1   r&gio) rrrrduplicity.backendrBrrr%r-rCr&register_backend_prefixr#r#r#r$s