diff --git a/uid2_client/__init__.py b/uid2_client/__init__.py index 608a265..06cc20e 100644 --- a/uid2_client/__init__.py +++ b/uid2_client/__init__.py @@ -7,6 +7,7 @@ decrypt_token: decrypt and advertising token to extract advertising ID from it """ +default_new_session = lambda: None from .auto_refresh import * from .client import * diff --git a/uid2_client/request_response_util.py b/uid2_client/request_response_util.py index c4741b7..553e370 100644 --- a/uid2_client/request_response_util.py +++ b/uid2_client/request_response_util.py @@ -1,9 +1,13 @@ import base64 -from importlib.metadata import version import os +import threading +from importlib.metadata import version +from typing import Optional + import requests -from uid2_client.encryption import _encrypt_gcm, _decrypt_gcm +import uid2_client +from uid2_client.encryption import _decrypt_gcm, _encrypt_gcm def _make_url(base_url, path): @@ -40,5 +44,15 @@ def parse_v2_response(secret_key, encrypted, nonce): return payload[16:] -def post(base_url, path, headers, data): - return requests.post(_make_url(base_url, path), data=data, headers=headers) +def __default_new_session(threadlocal=threading.local()): + if getattr(threadlocal, 'session', None) is None: + threadlocal.session = requests.Session() + + return threadlocal.session + + +def post(base_url, path, headers, data, session: Optional[requests.Session] = None): + session = (session or uid2_client.default_new_session() + ) or __default_new_session() + + return session.post(_make_url(base_url, path), data=data, headers=headers, timeout=5)