Skip to content

Commit 0ec44ea

Browse files
authored
Merge pull request #76 from cloudblue/fix_session
LITE-28741 fix thread local handling and getattr
2 parents 7de027a + 7607d67 commit 0ec44ea

File tree

4 files changed

+340
-231
lines changed

4 files changed

+340
-231
lines changed

connect/client/fluent.py

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ def __init__(
6464
self.resourceset_append = resourceset_append
6565

6666
def __getattr__(self, name):
67+
if name in ('session', 'response'):
68+
return self.__getattribute__(name)
6769
if '_' in name:
6870
name = name.replace('_', '-')
6971
return self.collection(name)
@@ -195,18 +197,19 @@ class ConnectClient(_ConnectClientBase, SyncClientMixin):
195197
def __init__(self, *args, **kwargs):
196198
super().__init__(*args, **kwargs)
197199
self._thread_locals = threading.local()
198-
self._thread_locals.response = None
199-
self._thread_locals.session = requests.Session()
200-
self._thread_locals.session.mount(
201-
self.endpoint,
202-
_SYNC_TRANSPORTS.setdefault(
203-
self.endpoint,
204-
HTTPAdapter(),
205-
),
206-
)
207200

208201
@property
209202
def session(self):
203+
if not hasattr(self._thread_locals, 'session'):
204+
self._thread_locals.session = requests.Session()
205+
self._thread_locals.session.mount(
206+
self.endpoint,
207+
_SYNC_TRANSPORTS.setdefault(
208+
self.endpoint,
209+
HTTPAdapter(),
210+
),
211+
)
212+
210213
return self._thread_locals.session
211214

212215
@property
@@ -216,6 +219,8 @@ def response(self) -> requests.Response:
216219
[`requests`](https://requests.readthedocs.io/en/latest/api/#requests.Response)
217220
response.
218221
"""
222+
if not hasattr(self._thread_locals, 'response'):
223+
self._thread_locals.response = None
219224
return self._thread_locals.response
220225

221226
@response.setter
@@ -263,19 +268,20 @@ class AsyncConnectClient(_ConnectClientBase, AsyncClientMixin):
263268
def __init__(self, *args, **kwargs):
264269
super().__init__(*args, **kwargs)
265270
self._response = contextvars.ContextVar('response', default=None)
266-
self._session = contextvars.ContextVar(
267-
'session',
268-
default=httpx.AsyncClient(
271+
self._session = contextvars.ContextVar('session', default=None)
272+
273+
@property
274+
def session(self):
275+
value = self._session.get()
276+
if not value:
277+
value = httpx.AsyncClient(
269278
transport=_ASYNC_TRANSPORTS.setdefault(
270279
self.endpoint,
271280
httpx.AsyncHTTPTransport(verify=_SSL_CONTEXT),
272281
),
273-
),
274-
)
275-
276-
@property
277-
def session(self):
278-
return self._session.get()
282+
)
283+
self._session.set(value)
284+
return value
279285

280286
@property
281287
def response(self):

0 commit comments

Comments
 (0)