o ~_z@sXddlmZddlZddlZddlmZddlmZddlmZGdddej j Z dS))strN)log)util)BackendExceptionc@sHeZdZdZddZddZddZdd Zd d Zd d Z ddZ dS) PyraxBackendz8 Backend for Rackspace's CloudFiles using Pyrax c Cs<tjj||zddl}Wnty"}ztdt|d}~ww|ddi}dt j vr4tddt j vr=tdt j d|d <t j d|d <d t j vrWt j d |d <|j d }z |j di|Wn#ty}ztd|jjt|ftjjWYd}~nd}~ww|jj|_|jj|_z |j||_WdS|jjy}ztd|jjt|fdddtjj WYd}~dSd}~w|jj!y}zDz |j"||_Wn,|jjy }ztd|jjt|fdddtjj WYd}~n d}~wwWYd}~dSWYd}~dSd}~ww)NrzPPyrax backend requires the pyrax library available from Rackspace. Exception: %s identity_type rackspaceCLOUDFILES_USERNAMEz0CLOUDFILES_USERNAME environment variablenot set.CLOUDFILES_APIKEYz/CLOUDFILES_APIKEY environment variable not set.usernameapi_keyCLOUDFILES_REGIONregion/z7Connection failed, please check your credentials: %s %sz %s : %s z,Container may exist, but access was denied. zKIf this container exists, please check its X-Container-Read/Write headers. z9Otherwise, please check your credentials and permissions.z3Container does not exist, but creation was denied. zKYou may be using a read-only user that can view but not create containers. z.Please check your credentials and permissions.)# duplicitybackendBackend__init__pyrax ImportErrorrr set_settingosenvironpathlstripset_credentials Exceptionr FatalError __class____name__ruexc ErrorCodeconnection_failed exceptionsClientException client_exc NoSuchObjectnso_exc cloudfiles get_container container Forbiddenbackend_permission_deniedNoSuchContainercreate_container)self parsed_urlre conn_kwargsr+rr>/usr/lib/python3/dist-packages/duplicity/backends/_cf_pyrax.pyr"s        zPyraxBackend.__init__cCsZt||jr tjjSt||jr|jdkrtjjSdSt|dr)|jdkr+tjjSdSdS)Ni http_status) isinstancer(rr"backend_not_foundr&codehasattrr5)r0 operationr2rrr4 _error_code^s     zPyraxBackend._error_codecCs|j|j|dSN)r+ upload_filename)r0 source_pathremote_filenamerrr4_puthszPyraxBackend._putcCsL|j|}t|jd}||WddS1swYdS)Nwb)r+ get_objectopenr>writeget)r0r@ local_pathsobjectfrrr4_getks "zPyraxBackend._getcCsD|j}|}t|dkr |jj|dd}||7}t|dks |S)Ni')marker)r+get_object_nameslen)r0objskeysrrr4_listps   zPyraxBackend._listcCs|j|dSr<)r+ delete_object)r0filenamerrr4_deletezszPyraxBackend._deletecCs|j|}d|jiS)Nsize)r+rC total_bytes)r0rSrHrrr4_query}s  zPyraxBackend._queryN) r __module__ __qualname____doc__rr;rArJrQrTrWrrrr4rs<  r) builtinsrrduplicity.backendrrrduplicity.errorsrrrrrrrr4s