@@ -119,6 +119,9 @@ class S3FileSystem(object):
119
119
objects.
120
120
config_kwargs : dict of parameters passed to ``botocore.client.Config``
121
121
kwargs : other parameters for boto3 session
122
+ session : botocore Session object to be used for all connections.
123
+ This session will be used inplace of creating a new session inside S3FileSystem.
124
+
122
125
123
126
Examples
124
127
--------
@@ -140,9 +143,12 @@ def __init__(self, anon=False, key=None, secret=None, token=None,
140
143
use_ssl = True , client_kwargs = None , requester_pays = False ,
141
144
default_block_size = None , default_fill_cache = True ,
142
145
version_aware = False , config_kwargs = None ,
143
- s3_additional_kwargs = None , ** kwargs ):
146
+ s3_additional_kwargs = None , session = None , ** kwargs ):
144
147
self .anon = anon
145
148
self .session = None
149
+ self .passed_in_session = session
150
+ if self .passed_in_session :
151
+ self .session = self .passed_in_session
146
152
self .key = key
147
153
self .secret = secret
148
154
self .token = token
@@ -205,7 +211,7 @@ def connect(self, refresh=False):
205
211
anon , key , secret , kwargs , ckwargs , token , ssl = (
206
212
self .anon , self .key , self .secret , self .kwargs ,
207
213
self .client_kwargs , self .token , self .use_ssl )
208
-
214
+
209
215
# Include the current PID in the connection key so that different
210
216
# SSL connections are made for each process.
211
217
tok = tokenize (anon , key , secret , kwargs , ckwargs , token ,
@@ -214,24 +220,30 @@ def connect(self, refresh=False):
214
220
self ._conn .pop (tok , None )
215
221
if tok not in self ._conn :
216
222
logger .debug ("Open S3 connection. Anonymous: %s" , self .anon )
223
+
217
224
if self .anon :
218
225
from botocore import UNSIGNED
219
226
conf = Config (connect_timeout = self .connect_timeout ,
220
227
read_timeout = self .read_timeout ,
221
228
signature_version = UNSIGNED , ** self .config_kwargs )
222
- self .session = boto3 .Session (** self .kwargs )
229
+ if not self .passed_in_session :
230
+ self .session = boto3 .Session (** self .kwargs )
223
231
else :
224
232
conf = Config (connect_timeout = self .connect_timeout ,
225
233
read_timeout = self .read_timeout ,
226
234
** self .config_kwargs )
227
- self .session = boto3 .Session (self .key , self .secret , self .token ,
228
- ** self .kwargs )
235
+ if not self .passed_in_session :
236
+ self .session = boto3 .Session (self .key , self .secret , self .token ,
237
+ ** self .kwargs )
238
+
229
239
s3 = self .session .client ('s3' , config = conf , use_ssl = ssl ,
230
240
** self .client_kwargs )
231
241
self ._conn [tok ] = (s3 , self .session )
232
242
else :
233
243
s3 , session = self ._conn [tok ]
234
- self .session = session
244
+ if not self .passed_in_session :
245
+ self .session = session
246
+
235
247
return s3
236
248
237
249
def get_delegated_s3pars (self , exp = 3600 ):
@@ -260,6 +272,8 @@ def get_delegated_s3pars(self, exp=3600):
260
272
'token' : cred ['SessionToken' ], 'anon' : False }
261
273
262
274
def __getstate__ (self ):
275
+ if self .passed_in_session :
276
+ raise NotImplementedError
263
277
d = self .__dict__ .copy ()
264
278
del d ['s3' ]
265
279
del d ['session' ]
0 commit comments