Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
ó
s	”dc@sÈdZddlZddlZddlZddlZddlmZddlZddl	Z	ddl
mZddlm
Z
dZdZdZd	ZejeƒZd
„Zdefd„ƒYZdS(
s Trilio S3 Backend implimentation

    This module contains the back end implimentation of all of all S3 specific
    support.
iÿÿÿÿN(tlog(tClientError(tget_retention_modets3iès$80bc80ff-0c51-4534-86a2-ec5e719643c2iôcCs5|jddƒ}|tjdddƒjƒ}|S(sè Utility function used to convert a datetime to an OS timestamp.

    Args:
        modified_time (datetime): Datatime object to convert to a Unix Epoc timestamp.

    Returns:
        The value of modified_time as a timestamp.
    ttzinfoi²iN(treplacetNonetdatetimet
total_seconds(t
modified_timet
naive_timet
delta_seconds((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyt_make_timestamp"s	t	S3BackendcBsûeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z	dd	„Z
d
„Zd„Zd„Z
d
„Zd„Zded„Zd„Zdd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(s´ S3 Backend implimentation.

    A Wrapper for the AWS S3 boto3 and botocore API. This class encapsulates all S3
    operations and exposes them as a backend storage instance.
    cCs“d}d}||_|jdƒr9t|jdƒƒnt}|ddkrtjjd|ddt|dƒd|ƒ}n%tjjdt|dƒd|ƒ}|dd	krtjd
d|ddd
|dd|dd|ddd|d|dƒ}nEtjd
d|ddd
|dd|dd|ddd|ƒ}d„}|j	j
jd|ƒ||_|d|_
|d|_dS(Ntvault_s3_max_pool_connectionsts3_signaturetdefaulttsignature_versiontread_timeoutts3_read_timeouttmax_pool_connectionsts3_ssl_certtRtregion_namet
os_optionstaws_access_key_idtusertaws_secret_access_keytkeytendpoint_urltobject_storage_urltconfigtverifyc[sd|jd<dS(Ns
keep-alivet
Connection(theaders(trequesttoperation_nametkwargs((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytset_connection_headerUssrequest-created.s3tbuckettretention_mode(RtoptionstgettinttDEFAULT_MAX_POOL_SIZEtbotocoretclienttConfigtboto3tmetateventstregistert_S3Backend__clientt_S3Backend__bucket_namet_S3Backend__retention_mode(tselfR)t
config_objectt	s3_clientt
MAX_POOL_SIZER&((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyt__init__8s:	$	



			
cCs2t|j|d|dƒ|d<|d|_dS(NR'tbucket_object_lockR((RR4R6(R7R)((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytset_retention_mode]s!c
CseyT|jjd|jƒy¥|jjd|jƒ}|dre|dddkretd|ƒ‚n|dr—|dddkr—td|ƒ‚n|dr½|ds½tdƒ‚q½nWn#tk
rã}|drä‚qänX|dsStjjd	d
ddd
ddƒ}|jjd|jd|ddƒ|jj	d|jd|ƒnWn
‚nXdS(sf Validates the S3 credentials / permission on the provided bucket.
            It also validates against s3 object lock configuration and if the s3 supports
            more than 255 object name length
        Args:
            self : S3 Backend object
        Returns:
            Does not return anything, But raises exception if validation fails.
        tBucketR<tObjectLockConfigurationtObjectLockEnabledtEnabledsZConfigration says object lock enabled on the bucket, but s3 API does not agree with it. %stuse_manifest_suffixsR'use_manifest_suffix' must be set to True when 'bucket_object_lock' is set to Truestvault_config/s.workload_f5190be6-7f80-4856-8c24-149cb40500c5/s.snapshot_f2e5c6a7-3c21-4b7f-969c-915bb408c64f/s+vm_id_e81d1ac8-b49a-4ccf-9d92-5f1ef358f1be/s3vm_res_id_72477d99-c475-4a5d-90ae-2560f5f3b319_vda/s.deac2b8a-dca9-4415-adc1-f3c6598204ed-segments/s0000000000000000.00000000tKeytBodys	Test DataN(
R4thead_bucketR5tget_object_lock_configurationt	Exceptiontostpathtjoint
put_objectt
delete_object(R7R)tobj_lock_cfgtextlong_key((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytvalidate_s3_clientbs@	







		#cCsõyÚxÓt|ƒdkrØg}|t }x>|D]6}|jdƒrQ|d}n|ji|d6ƒq/Wy'|jjd|jdi|d6ƒWn8x2|D]&}|jjd|jd|dƒqWnX|t}qWWntk
rð‚nXdS(	sß Utility method that takes a list of objects and puts it in the correct format
            for the S3 delete_objects() API.

        Args:
            object_list (list): A list of objects with the correct S3 path.
        it/iRCR>tDeletetObjectsN(	tlentMAX_S3_PAGE_SIZEt
startswithtappendR4tdelete_objectsR5RLR(R7tobject_listtobject_delete_listt	list_parttobj((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyt__delete_object_list”s$




cCsÇy¬g}|jjdƒ}|jd|jd|ƒ}xe|D]]}d|kr=|jdt|dƒƒdkr=x&|dD]}|j|dƒq|Wq=q=W|j|ƒWntk
r‚nXdS(	s‘ Utility method used to perform a rmdir operation on an object hierarchy

        Args:
            object_tree (str): Object/Tree path.
        tlist_objectsR>tPrefixtContentstKeyCountiRCN(	R4t
get_paginatortpaginateR5R*RTRWt_S3Backend__delete_object_listR(R7tobject_treeRYtlist_paginatort
page_iteratortobjectsR\((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyt__delete_object_tree²s	
.
cCs|j|ƒdS(só Delete a list of objects.

        Args:
            object_list (list): List of objects. Each with a full object path
                                in correct format.
            options (dic): Dictionary of configuration options.
        N(Rd(R7RYR)((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytdelete_object_listÈscCsèyÍ|s
dSdj|ƒ}|jdƒr8|d}nd|krc|jjd|jd|ƒni|jdƒd}|j|dtƒ}|rªt|d	tƒd
}n|}|jjd|jd|ƒWnt	k
rã‚nXdS(s Delete an object from the S3 object store.

        The object and any segments stored in the segment directory will be
        removed.

        Args:
            args (list): List of object name parts.
            options (dic): Dictionary of configuration options.
        NRQis	-segmentsR>RCs	.manifesttstrict_path_filtertreversei(
RJRVR4RLR5tstripR^tTruetsortedR(R7targsR)tobject_nametmanifest_prefixt	manifestst
manifest_name((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyRLÒs$



icCs¿td|ƒ}y•xŽtd|ƒD]}}y$|jjd|jd|ƒdSWq"tk
rž}|jdddkr˜|d|kr˜tjdƒq"n‚q"Xq"WWntk
rº‚nXdS(	s Utility method used to wait for a S3 object to become available.

        This routine will keep performing a head_object() request every second
        for "retries" number of times. This was added to work around any potential
        eventual consistancey issues when uploading to AWS.

        Args:
            object_name (str): Name of the object.
            retries (int): Optional parameter that defaults to 1.

        Returns:
            Returns when the object is available or ClientError not found exception.
        iiR>RCNtResponseMetadatatHTTPStatusCodei”(	tmaxtrangeR4thead_objectR5Rtresponsettimetsleep(R7Rqtretriestretryterror((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyt__wait_for_objectõs

cCs<yž|jdƒd}|jdrF|jdrQ|jjd|jd|ƒ}n|jjd|jd|ƒ}|rL|}|jdgƒpœ|jdgƒ}|jdr2xƒ|D]x}|jjd|jd	|d	d
|jd
dƒƒ}|dd
jddƒdkr³tj	|dj
|dƒƒSq³Wn|dd	}qLn|}|satdƒ‚n|jjd|jd	|ƒ}tj	|dj
|dƒƒSWn—tk
r7}|j
dddkrÍ‚q8yP|j|dƒ|jjd|jd	|ƒ}tj	|dj
|dƒƒSWq8tk
r3‚q8XnXdS(sÓ Download and return the object manifest as a json array.

            Args:
                object_name (str): Name of the object.

            Returns:
                Object manifest as a dictionary.
        RQs	.manifestRBR<R>R_tVersionsR`RCt	VersionIdRRutHTTPHeaderss$x-amz-meta-stamp-trilio-authenticitytFalseRnRDt
ContentLengthiÿÿÿÿsOManifest object with 'x-amz-meta-stamp-trilio-authenticity' attribute not foundRvi”i
N(RmR)R4tlist_object_versionsR5R^R*t
get_objecttjsontloadstreadRGRRzt_S3Backend__wait_for_object(R7RqRrRsRttmanifesttrespR((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytget_object_manifestsL	

			$

%"	"
cCs:|jdƒd}|jdrA|jjd|jd|ƒ}n|jjd|jd|ƒ}|r&|jdgƒp†|jdgƒ}g}x&|D]}|ji|dd6ƒq–W|r6y'|jjd|jd	i|d
6ƒWq#x2|D]&}|jj	d|jd|dƒqòWq#Xq6nt
d|ƒ‚dS(
sÓ Download and return the object manifest as a json array.

            Args:
                object_name (str): Name of the object.

            Returns:
                Object manifest as a dictionary.
        RQs	.manifestR<R>R_RR`RCRRRSsManifest for %s is not foundN(RmR)R4R†R5R^R*RWRXRLRG(R7RqRrRRstobjs_to_deletetmanR\((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytdelete_object_manifestLs,	
			$

cCs‚yTdj|ƒ}i}|jr4i|jd6}n|jj|j||j|ƒWn'tk
rj‚ntk
r}‚nXdS(s? Download a file from the S3 object store.

        Args:
            args (list): List of object name parts.
            options (dic): Dictionary of configuration options.

        Returns:
            On success, the contents of the object are downloaded to file identidfied
            by options.out_file.
        RQR‚N(RJt
version_idR4t
download_fileR5tout_fileRRG(R7RpR)Rqt
extra_args((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytdownload_objectos		

cCs yrdj|ƒ}|jrE|jjd|jd|d|jƒ}n|jjd|jd|ƒ}|djƒSWn'tk
rˆ‚ntk
r›‚nXdS(sB Get object from the S3 object store in buffer.
        Args:
            args (list): List of object name parts.
            options (dic): Dictionary of configuration options.
        Returns:
            On success, the contents of the object are downloaded to file identidfied
            by options.out_file.
        RQR>RCR‚RDN(RJR’R4R‡R5RŠRRG(R7RpR)RqRz((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyR‡‡s					

cCs°y•|jtkrA|jtjj|dd|dƒ|ƒn|jd
k	r”|jj	d|j
d|dd|dd|d|dd	ƒ}|SWntk
r«‚nXd
S(s Put an object to the S3 object store.
        Args:
            args (list): List of object name parts.
            buf: Data to upload in object.
            buf_len: Length of data to upload in object.
            options (dic): Dictionary of configuration options.
        iRQRqR>RCR…RDtContentTypesapplication/octet-streamN(t
path_validR„t_S3Backend__create_folderRHRItdirnameRqRR4RKR5R(R7Rptbuftbuf_lenR)R((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyRK¡s%
	
cCstƒ}|jdƒ}yæt}|dk	rB|tkrB|}n|jdrd|jjdƒ}n|jjdƒ}|jd|jd|dddi|d	6ƒ}xL|D]D}d
|krt|j	dt
|d
ƒƒdkrtx’|d
D]ƒ}	|dk	rt
|ƒ|krt|ƒS|	d
jdƒ}
|rA|j
|
ƒqêd|
krê|j
|
jddƒdƒqêqêWnd|kr7|j	dt
|dƒƒdkr7x’|dD]ƒ}	|dk	rÛt
|ƒ|krÛt|ƒS|	d
jdƒ}
|r|j
|
ƒq­d|
kr­|j
|
jddƒdƒq­q­Wnd|kr«x©|dD]š}|dk	r|t
|ƒ|kr|t|ƒS|jtƒsŸ|djtƒrN|jdƒrË|j
|djdƒƒqè|j
|djdƒƒqNqNWq«q«Wt|ƒSWntk
r‚nXdS(se Return a list of objects based on the provided prefix.

        Used to generate a directory listing based on a prefix path
        constructed from the object parts in prefix

        Args:
            prefix (string): prefix of the object path. If the prefix is terminated 
                by "/", then it lists the contents in the "subdir". If the prefix
                is not terminated by "/", then it lists the contents in the current
                directory that matches the prefix
                Ex:
                    case 1:
                    =======
                    prefix - /a/b/c
                    object store has objects - /a/b/c, /a/b/c1, /a/b/d
                    return values - /a/b/c and /a/b/c1

                    case 2:
                    =======
                    prefix - /a/b/c/
                    object store has objects - /a/b/c/d, /a/b/c1, /a/b/c/e
                    return values - /a/b/c/d and /a/b/c/e
            options (dic): Dictionary of configuration options
            max_items (int): Maximum number of objects in a list query. Default is
                unlimited but when testing for an empty directory a smaller
                number can be used to limit the query and size of the list that
                is returned.
            strict_path_filter (bool): Defaults to True in order to only return
                objects with the exact same prefix. Individual segment listings
                set this to False in order to get a match on the segment offset.

        Returns:
            On success a list of unique items to be used as a directory listing.
        RQR<R†R^R>R_t	DelimitertPaginationConfigtPageSizeR`RaiRCs	.manifestiRtCommonPrefixesN(tsettlstripRURR)R4RbRcR5R*RTtlisttrstriptaddtsplitRVt_SEGMENT_PREFIXtendswithRmR(R7tprefixt	max_itemsRkt
object_sett	page_sizeRfRgRhtitemRqt
object_prefix((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyR^½sX#		

.
'.
'
(
cCs_yDg}tjjdj|ƒ|jƒ}|j|dtƒ}|SWntk
rZ‚nXdS(s& Returns a list of object segments based on a prefix.

        Args:
            args (list): List of object name parts.
            options (dic): Dictionary of configuration options.

        Returns:
            A list of segments in the object store that match the supplied prefix.
        RQRkN(RHRIRJR©R^RnR(R7RpR)tsegment_listt
segments_pathRY((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyt
list_segments!s
!
c
Cstd|ƒ}yáxÚtd|ƒD]É}y&|jjd|jd|ƒ}|SWq"tk
rê}|jdddkräyC|jjd|jd|dƒ}|jd	ƒp®d
|d	<|SWqätk
rà}|jdddkrÚd|kr´yo|jdƒd}|j	d
r3|jj
d|jd|ƒ}n|jjd|jd|ƒ}|jdgƒpr|jdgƒ}|r5t|dd„ƒ}d}|j	d
rxi|D]^}	|jjd|jd|	dd|	jddƒƒ}|ddjddƒdkrª|SqªWn|dd}|s;tdƒ‚q;n|}|jjd|jd|ƒ}|SWq´tk
r°}|jdddkrª|d|krªtjdƒq"n‚q´Xn|d|krÚtjdƒq"qÚn‚qäXn‚q"Xq"WWntk
r‚nXdS(s= Utility method that gets an object head from the repository with retry support.

        The default is to try once. Admittedly, this is ugly because the
        provided object name might be a terminal object or a "directory" so
        we need to try both cases for each retry attempt. When retry > 1, there is
        a 1 second delay between attempts.

        Args:
            object_name (str): Name of the object.
            retries (int): Optional parameter, default is 1 attempt.

        Returns:
            Object head dictionary or Boto3 exception.
        iiR>RCRuRvi”RQR—sapplication/x-directorys	-segmentss	.manifestR<R_RR`RcSs|dS(NtLastModified((tk((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyt<lambda>fsR‚RRƒs$x-amz-meta-stamp-trilio-authenticityR„RniÿÿÿÿsOManifest object with 'x-amz-meta-stamp-trilio-authenticity' attribute not foundN(RwRxR4RyR5RRzR*RmR)R†R^RoRRGR{R|(
R7RqR}R~tobj_headersRRrRsRtRŒ((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyt__get_object_headers6s|	

			$	


		



	

cCsºidd6dd6dd6td6}i|d<i|dd<d	j|ƒ}yV|sottjjƒƒ|d<|Sy|j|ƒ}Wn±tk
r5|jjd
|j	dd	d|ƒ}d
|kr/|d	g|d
D]}|d^qÔkr2tjj
|ddddƒ}idd6|d6id6}q2q6‚nXt|dƒ|d<||d<|jddƒdks||ddkr‰t|d<nxl|ddj
ƒD]V\}	}
d|	jƒkrà|
|d|	jƒjdƒd<qž|
|d|	jƒ<qžWt|ddjddƒƒdkr?|ddjddƒ|d<nMt|djddƒƒdkr~|djddƒ|d<n|d|d<|d|d<|SWntk
rµ‚nXdS(s) Get "operating system like" stat data for the given object.

        Args:
            args (list): List of object name parts.
            options (dic): Dictionary of configuration options.

        Returns:
            A stat structure containing object information required by caller.
        it	timestamptsizeRtetagt	directoryR"tMetadataRQR>RR_R RuRƒtdates%a, %d %b %Y %H:%M:%S %ZR…R²R—s
text/plainsapplication/x-directorysx-object-meta-isx-object-meta-segment-countsx-object-meta-total-sizes
segment-counts
total-sizesx-account-bytes-usedN(R„RJRRtnowt_S3Backend__get_object_headerst
BaseExceptionR4R^R5tstrptimeR*RntitemstlowerR¦R+R(R7RpR)t	stat_dataRqt
obj_headerRhtxtmdRtvalue((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytstat_objectŽs^
"

		+	

	
!$
"

cCs#dj|ƒ}|j||ƒdS(sÎ Create an object that represents a directory in the object store.

        Args:
            args (list): List of object name parts.
            options (dic): Dictionary of configuration options.
        RQN(RJR™(R7RpR)t
new_folder((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytmkdir_objectÕscCstdj|ƒd}|jdƒr/|d}n|j|ƒy |jjd|jd|ƒWntk
ronXdS(sÎ Remove an object that represents a directory in the object store.

        Args:
            args (list): List of object name parts.
            options (dic): Dictionary of configuration options.
        RQiR>RCN(RJRVt_S3Backend__delete_object_treeR4RLR5R¿(R7RpR)Re((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytrmdir_objectàs


c
CsáyÆ|jdƒd}|jdr˜|j|dtƒ}|rt|dtƒdjdƒd}t|d	ƒ}d
|d}nd}|d|}n|}x7|D]/}|jdƒ|d
<|jddƒ|d<q¥Wtj	|ƒ}	|j
jd|jd|d|d|	ddƒ|jdrÅ|rÅg}
x"|D]}|
j
i|d6ƒq5Wy'|j
jd|jdi|
d6ƒWqÂtk
r¾x2|
D]&}|j
jd|jd|dƒq‘WqÂXqÅnWntk
r܂nXdS(s Upload a new object manifest to the object store.

        Args:
            object_name (str): Name of the object. A ".manifest" will be added.
            put_headers (dic): Dictionary of meta data to be
                               added to the object.
            manifest_data (dic): The manifest data which becomes
                                 the body of file.
        RQs	.manifestRBRkRlit.iÿÿÿÿis%08xiRItnameR¹thashR>RCR»RDR—s
text/plainRRRSNt00000000(RmR)R^RnRoR¦R+tpopRˆtdumpsR4RKR5RWRXR¿RLR(
R7Rqtput_headerst
manifest_dataRrRstsuffixRttsegment_dataRŒRRR\((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytupload_object_manifestôsJ

	#


	


cCsyå|jdƒd}|jdr˜|j|dtƒ}|rt|dtƒdjdƒd}t|d	ƒ}d
|d}nd}|d|}n|}tjj	|j
|ƒ}|jjd|j
d
|d|d|ddƒWnt
k
rû‚nXdS(s
 Upload a new object manifest to the object store.

        Args:
            object_name (str): Name of the object. A ".manifest" will be added.
            attributes (dic): The attributes data which becomes
                              the body of file.
        RQs	.manifestRBRkRliRÍiÿÿÿÿis%08xiR>RCt
CopySourceR»tMetadataDirectivetREPLACENRÐ(RmR)R^RnRoR¦R+RHRIRJR5R4tcopy_objectR(R7Rqt
attributesRrRsRÕRttcopy_src((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytupdate_object_attributes's*
	#
c	CsayF|jdƒ}|jjd|jd|di|jd6|d6ƒWntk
r\‚nXdS(s€ Upload a new object manifest to the object store.

        Args:
            object_name (str): Name of the object. A ".manifest" will be added.
            put_headers (dic): Dictionary of meta data to be added
                               to the object.
            manifest_data (dic): The manifest data which becomes the
                                  body of file.
        RQR>RCt	RetentiontModetRetainUntilDateN(RmR4tput_object_retentionR5R6R(R7Rqtretainuntil((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytput_object_segment_retentionHs
	

c	CsíyÒ|jdƒd}|jdr˜|j|dtƒ}|rt|dtƒdjdƒd}t|d	ƒ}d
|d}nd}|d|}n|}|jjd|j	d
|di|j
d6|d6ƒWntk
rè‚nXdS(sK Upload a new object manifest to the object store.

        Args:
            object_name (str): Name of the object. A ".manifest"
            will be added. put_headers (dic): Dictionary of meta data
            to be added to the object. manifest_data (dic): The manifest
            data which becomes the body of file.
        RQs	.manifestRBRkRliRÍiÿÿÿÿis%08xiR>RCRßRàRáNRÐ(RmR)R^RnRoR¦R+R4RâR5R6R(R7RqRãRrRsRÕRt((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pytput_manifest_retention^s(	
	#	

c
CsJy |jjd|jd|ƒWn#tk
rE}|jdddkrF|jdƒ}d}xá|D]Ö}|dkr{Pn||d}y |jjd|jd|ƒWqetk
r:}|jdddkrey,|jjd|jd|dd	d
dƒWq4tk
r0}|jdddkr1‚q1q4XqeqeqeXqeWqFnXd
S(s< Utility method used to create a object directory structure.

        The entire path is split and each directory level is created
        as an object if it does not exist.

        Args:
            folder_name (str): The entire folder name.
            options (dic): Dictionary of configuration options.
        R>RCRuRvi”RQRRDsTrilioVault directory objectR—sapplication/x-directoryi™N(R4RyR5RRzR¦RK(R7tfolder_nameR)Rt
path_partstnew_pathtpart((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyt__create_folders:


	

cCs|d}yÞ|jtkrK|jtjj|dd|dƒ|ƒn|jdk	rçt|ddƒu}|j	j
|d|jd|dd|ddid	d
6ƒ|j	jd|jd|dd|dƒ}|SWdQXnWnt
k
rþ‚nXdS(sµ Upload an object to the S3 object store.

        Args:
            args (list): List of object name parts.
            options (dic): Dictionary of configuration options.
        iiRQRqtrbR>RCt	ExtraArgssapplication/octet-streamR—N(R˜R„R™RHRIRšRqRtopenR4tupload_fileobjR5RyR(R7RpR)tfilestdataRµ((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyt
upload_object°s*

		
N(t__name__t
__module__t__doc__R;R=RPRdRËRjRLR‹RŽR‘R–R‡RKRR„R^R±R¾RÈRÊRÌR×RÞRäRåR™Rñ(((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyR
1s4	%		2			
	#	8	#			d	X	G			3	!		!	1(RôRR{RˆRHtoslo_logRtloggingR0R-tbotocore.exceptionsRts3fuse.utilsRtBASENAMERUR§R,t	getLoggerRòtLOGRtobjectR
(((s2/usr/lib/python2.7/site-packages/s3fuse/vaults3.pyt<module>s