Skip to content

Commit 5efe9ad

Browse files
committed
Fix issues due to resolving default arguments
1 parent c3b930f commit 5efe9ad

File tree

3 files changed

+30
-28
lines changed

3 files changed

+30
-28
lines changed

tests/test_encryption.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ def validate_advertising_token(self, advertising_token_string, identity_scope, i
7070
self.assertEqual(-1, advertising_token_string.find("/"))
7171

7272
def generate_uid2_token_v4(self, uid, master_key, site_id, site_key, params = Params(), identity_type = IdentityType.Email, identity_scope = IdentityScope.UID2):
73+
if not isinstance(params.token_expiry, dt.datetime):
74+
params.token_expiry = dt.datetime.now(tz=timezone.utc) + params.token_expiry
7375
advertising_token = UID2TokenGenerator.generate_uid2_token_v4(uid, master_key, site_id, site_key, params)
7476
self.validate_advertising_token(advertising_token, identity_scope, identity_type)
7577
return advertising_token
@@ -155,7 +157,7 @@ def test_decrypt_token_v4_no_site_key(self):
155157
result = decrypt(token, keys)
156158

157159
def test_decrypt_token_v4_invalid_version(self):
158-
params = Params(dt.timedelta(hours=1))
160+
params = Params(dt.datetime.now(tz=timezone.utc) + dt.timedelta(hours=1))
159161
token = UID2TokenGenerator.generate_uid2_token_with_debug_info(_example_id, _master_key, _site_id, _site_key, params, 1)
160162

161163
keys = EncryptionKeysCollection([_master_key, _site_key])
@@ -174,7 +176,8 @@ def test_decrypt_token_v4_expired(self):
174176
result = decrypt(token, keys)
175177

176178
def _generate_v2_token(self, expires_in_seconds):
177-
return UID2TokenGenerator.generate_uid2_token_v2(_example_id, _master_key, _site_id, _site_key, Params(expires_in_seconds))
179+
return UID2TokenGenerator.generate_uid2_token_v2(_example_id, _master_key, _site_id, _site_key,
180+
Params(dt.datetime.now(tz=timezone.utc) + expires_in_seconds))
178181

179182
def _generate_v4_token(self, expires_in_seconds):
180183
return self.generate_uid2_token_v4(_example_id, _master_key, _site_id, _site_key, Params(expires_in_seconds))
@@ -297,7 +300,7 @@ def test_decrypt_token_v3_no_site_key(self):
297300
result = decrypt(token, keys)
298301

299302
def test_decrypt_token_v3_invalid_version(self):
300-
params = Params(dt.timedelta(hours=1))
303+
params = Params(dt.datetime.now(tz=timezone.utc) + dt.timedelta(hours=1))
301304
token = UID2TokenGenerator.generate_uid2_token_with_debug_info(_example_id, _master_key, _site_id, _site_key, params, 1)
302305

303306
keys = EncryptionKeysCollection([_master_key, _site_key])
@@ -307,7 +310,7 @@ def test_decrypt_token_v3_invalid_version(self):
307310

308311

309312
def test_decrypt_token_v3_expired(self):
310-
params = Params(dt.timedelta(seconds=-1))
313+
params = Params(dt.datetime.now(tz=timezone.utc) + dt.timedelta(seconds=-1))
311314
token = UID2TokenGenerator.generate_uid2_token_v3(_example_id, _master_key, _site_id, _site_key, params)
312315

313316
keys = EncryptionKeysCollection([_master_key, _site_key])
@@ -331,7 +334,7 @@ def test_decrypt_token_v3_custom_now(self):
331334

332335

333336
def test_decrypt_token_v3_invalid_payload(self):
334-
params = Params(dt.timedelta(seconds=-1))
337+
params = Params(dt.datetime.now(tz=timezone.utc) + dt.timedelta(seconds=-1))
335338
token = UID2TokenGenerator.generate_uid2_token_v3(_example_id, _master_key, _site_id, _site_key, params)
336339

337340
keys = EncryptionKeysCollection([_master_key, _site_key])

uid2_client/auto_refresh.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def cancel(self):
119119
def _try_refresh_keys(self):
120120
"""Invoke UID2 client to refresh latest keys from the service."""
121121
try:
122-
keys = self._client.refresh()
122+
keys = self._client.refresh_keys()
123123
self._result = self._make_success_result(keys)
124124
return True
125125
except:

uid2_client/uid2_token_generator.py

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -50,25 +50,29 @@ def _encrypt_data_v1(data, key, iv):
5050

5151

5252
class Params:
53-
def __init__(self, expiry=dt.datetime.now(tz=timezone.utc) + dt.timedelta(hours=1),
54-
identity_scope=IdentityScope.UID2.value, token_generated=dt.datetime.now(tz=timezone.utc),
55-
identity_established=dt.datetime.now(tz=timezone.utc)):
53+
def __init__(self, expiry=None, identity_scope=IdentityScope.UID2.value, token_generated=None,
54+
identity_established=None):
55+
now = dt.datetime.now(tz=timezone.utc)
56+
if identity_established is None:
57+
identity_established = now
58+
if token_generated is None:
59+
token_generated = now
60+
if expiry is None:
61+
expiry = now + dt.timedelta(hours=1)
62+
63+
self.identity_established = identity_established
64+
self.token_generated = token_generated
5665
self.token_expiry = expiry
5766
self.identity_scope = identity_scope
58-
self.token_generated = token_generated
59-
self.identity_established = identity_established
60-
if not isinstance(expiry, dt.datetime):
61-
self.token_expiry = dt.datetime.now(tz=timezone.utc) + expiry
62-
63-
64-
def default_params():
65-
return Params()
6667

6768

6869
class UID2TokenGenerator:
6970

7071
@staticmethod
71-
def generate_uid2_token_v2(id_str, master_key, site_id, site_key, params=default_params(), version=2):
72+
def generate_uid2_token_v2(id_str, master_key, site_id, site_key, params=None, version=2):
73+
if params is None:
74+
params = Params()
75+
7276
id = bytes(id_str, 'utf-8')
7377
identity = int.to_bytes(site_id, 4, 'big')
7478
identity += int.to_bytes(len(id), 4, 'big')
@@ -88,26 +92,19 @@ def generate_uid2_token_v2(id_str, master_key, site_id, site_key, params=default
8892
return base64.b64encode(token).decode('ascii')
8993

9094
@staticmethod
91-
def generate_uid2_token_v3(id_str, master_key, site_id, site_key, params=default_params()):
95+
def generate_uid2_token_v3(id_str, master_key, site_id, site_key, params=None):
9296
return UID2TokenGenerator.generate_uid2_token_with_debug_info(id_str, master_key, site_id, site_key, params,
9397
AdvertisingTokenVersion.ADVERTISING_TOKEN_V3.value)
9498

9599
@staticmethod
96-
def generate_uid2_token_v4(id_str, master_key, site_id, site_key, params=default_params()):
100+
def generate_uid2_token_v4(id_str, master_key, site_id, site_key, params=None):
97101
return UID2TokenGenerator.generate_uid2_token_with_debug_info(id_str, master_key, site_id, site_key, params,
98102
AdvertisingTokenVersion.ADVERTISING_TOKEN_V4.value)
99103

100104
@staticmethod
101105
def generate_uid_token(id_str, master_key, site_id, site_key, identity_scope, token_version,
102106
identity_established=None, token_generated=None, token_expiry=None):
103-
params = default_params()
104-
params.identity_scope = identity_scope
105-
if identity_established is not None:
106-
params.identity_established = identity_established
107-
if token_generated is not None:
108-
params.token_generated = token_generated
109-
if token_expiry is not None:
110-
params.token_expiry = token_expiry
107+
params = Params(token_expiry, identity_scope, token_generated, identity_established)
111108
if token_version == AdvertisingTokenVersion.ADVERTISING_TOKEN_V2:
112109
return UID2TokenGenerator.generate_uid2_token_v2(id_str, master_key, site_id, site_key, params)
113110
elif token_version == AdvertisingTokenVersion.ADVERTISING_TOKEN_V3:
@@ -119,6 +116,8 @@ def generate_uid_token(id_str, master_key, site_id, site_key, identity_scope, to
119116

120117
@staticmethod
121118
def generate_uid2_token_with_debug_info(id_str, master_key, site_id, site_key, params, version):
119+
if params is None:
120+
params = Params()
122121

123122
# Publisher Data
124123
site_payload = int.to_bytes(site_id, length=4, byteorder='big')

0 commit comments

Comments
 (0)