From 92f07b3a3ea1567a264703fe8baad48090dac9dc Mon Sep 17 00:00:00 2001 From: asloob qureshi Date: Thu, 6 Jun 2024 13:41:20 -0700 Subject: [PATCH] Add client for checking opt out status --- examples/sample_optout_status_client.py | 25 +++++++++++++++ uid2_client/__init__.py | 1 + uid2_client/optout_status_client.py | 41 +++++++++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 examples/sample_optout_status_client.py create mode 100644 uid2_client/optout_status_client.py diff --git a/examples/sample_optout_status_client.py b/examples/sample_optout_status_client.py new file mode 100644 index 0000000..d0e9816 --- /dev/null +++ b/examples/sample_optout_status_client.py @@ -0,0 +1,25 @@ +import json +import sys + +from uid2_client import OptOutStatusClient + + +def _usage(): + print( + 'Usage: python3 sample_optout_status_client.py ... ' + , file=sys.stderr) + sys.exit(1) + + +if len(sys.argv) <= 4: + _usage() + +base_url = sys.argv[1] +api_key = sys.argv[2] +client_secret = sys.argv[3] +advertising_ids = sys.argv[4:] + +optout_status_client = OptOutStatusClient(base_url, api_key, client_secret) + +response_json = json.loads(optout_status_client.get_optout_status(advertising_ids)) +print(json.dumps(response_json, indent=2)) diff --git a/uid2_client/__init__.py b/uid2_client/__init__.py index 608a265..e43130b 100644 --- a/uid2_client/__init__.py +++ b/uid2_client/__init__.py @@ -27,3 +27,4 @@ from .identity_map_client import * from .identity_map_input import * from .identity_map_response import * +from .optout_status_client import * \ No newline at end of file diff --git a/uid2_client/optout_status_client.py b/uid2_client/optout_status_client.py new file mode 100644 index 0000000..093e606 --- /dev/null +++ b/uid2_client/optout_status_client.py @@ -0,0 +1,41 @@ +import base64 +import datetime as dt +from datetime import timezone +import json + +from uid2_client import auth_headers, make_v2_request, post, parse_v2_response + + +class OptOutStatusClient: + """Client for interacting with UID Optout status + + You will need to have the base URL of the endpoint and a client API key + and secret to consume web services. + + Methods: + get_optout_status: Get Opt Out Status of advertising_ids + """ + + def __init__(self, base_url, api_key, client_secret): + """Create a new OptOutStatusClient client. + + Args: + base_url (str): base URL for all requests to UID services (e.g. 'https://prod.uidapi.com') + api_key (str): api key for consuming the UID services + client_secret (str): client secret for consuming the UID services + + Note: + Your authorization key will determine which UID services you are allowed to use. + """ + self._base_url = base_url + self._api_key = api_key + self._client_secret = base64.b64decode(client_secret) + + def get_optout_status(self, advertising_ids): + request_payload = { + 'advertising_ids': advertising_ids + } + req, nonce = make_v2_request(self._client_secret, dt.datetime.now(tz=timezone.utc), + json.dumps(request_payload).encode()) + resp = post(self._base_url, '/v2/optout/status', headers=auth_headers(self._api_key), data=req) + return parse_v2_response(self._client_secret, resp.read(), nonce)