diff --git a/pyproject.toml b/pyproject.toml index 625c083..d2a6e34 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "umapi-client" -version = "2.18" +version = "2.19" description = "Client for the User Management API (UMAPI) from Adobe - see https://adobe.ly/2h1pHgV" readme = "README.md" authors = ["Andrew Dorton ", "Dan Brotsky", "Danimae Vossen", "Kevin Bhunut"] diff --git a/umapi_client/connection.py b/umapi_client/connection.py index 518ee8c..f76ca43 100644 --- a/umapi_client/connection.py +++ b/umapi_client/connection.py @@ -21,11 +21,12 @@ import json import logging import os -import uuid from email.utils import parsedate_tz, mktime_tz from platform import python_version, version as platform_version from random import randint from time import time, sleep, gmtime, strftime +from uuid import uuid4 +from datetime import datetime import requests import io import urllib.parse as urlparse @@ -187,6 +188,7 @@ def __init__(self, if user_agent and user_agent.strip(): ua_string = user_agent.strip() + " " + ua_string self.session.headers["User-Agent"] = ua_string + self.uuid = str(uuid4()) def _get_auth(self, ims_host, ims_endpoint_jwt, tech_acct_id=None, api_key=None, client_secret=None, @@ -479,17 +481,17 @@ def make_call(self, path, body=None, delete=False): :param body: (optional) list of dictionaries to be serialized into the request body :return: the requests.result object (on 200 response), raise error otherwise """ + extra_headers = {"X-Request-Id": f"{self.uuid}_{int(datetime.now().timestamp()*1000)}"} + # if the sync_started or sync_ended flags are set, send a header for any type of call + if self.sync_started: + self.logger.info("Sending start_sync signal") + extra_headers['Pragma'] = 'umapi-sync-start' + self.sync_started = False + elif self.sync_ended: + self.logger.info("Sending end_sync signal") + extra_headers['Pragma'] = 'umapi-sync-end' + self.sync_ended = False if body: - extra_headers = {} - # if the sync_started or sync_ended flags are set, send a header on this POST - if self.sync_started: - self.logger.info("Sending start_sync signal") - extra_headers['Pragma'] = 'umapi-sync-start' - self.sync_started = False - elif self.sync_ended: - self.logger.info("Sending end_sync signal") - extra_headers['Pragma'] = 'umapi-sync-end' - self.sync_ended = False request_body = json.dumps(body) def call(): return self.session.post(self.endpoint + path, auth=self.auth, data=request_body, timeout=self.timeout, @@ -498,11 +500,11 @@ def call(): if not delete: def call(): return self.session.get(self.endpoint + path, auth=self.auth, timeout=self.timeout, - verify=self.ssl_verify, headers={"X-Request-Id": str(uuid.uuid4())}) + verify=self.ssl_verify, headers=extra_headers) else: def call(): return self.session.delete(self.endpoint + path, auth=self.auth, timeout=self.timeout, - verify=self.ssl_verify) + verify=self.ssl_verify, headers=extra_headers) start_time = time() result = None diff --git a/umapi_client/version.py b/umapi_client/version.py index b9332ca..3a3a984 100644 --- a/umapi_client/version.py +++ b/umapi_client/version.py @@ -18,4 +18,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -__version__ = "2.18" +__version__ = "2.19"