Coverage for benefits/enrollment_littlepay/session.py: 100%
35 statements
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-06 20:07 +0000
« prev ^ index » next coverage.py v7.8.2, created at 2025-06-06 20:07 +0000
1import logging
2import time
4from django.http import HttpRequest
6logger = logging.getLogger(__name__)
9class Session:
11 _keys_access_token = "enrollment_littlepay_access_token"
12 _keys_access_token_expiry = "enrollment_littlepay_access_token_expiry"
14 def __init__(self, request: HttpRequest, reset: bool = False, access_token: str = None, access_token_expiry: str = None):
15 """Initialize a new Littlepay session wrapper for this request."""
17 self.request = request
18 self.session = request.session
20 if reset:
21 self.access_token = None
22 self.access_token_expiry = None
23 if access_token:
24 self.access_token = access_token
25 if access_token_expiry:
26 self.access_token_expiry = access_token_expiry
28 @property
29 def access_token(self) -> str:
30 """Get the card tokenization access token from the request's session, or None."""
31 return self.session.get(self._keys_access_token)
33 @access_token.setter
34 def access_token(self, value: str) -> None:
35 self.session[self._keys_access_token] = value
37 @property
38 def access_token_expiry(self) -> int:
39 """Get the card tokenization access token's expiry time from the request's session, or None."""
40 return self.session.get(self._keys_access_token_expiry)
42 @access_token_expiry.setter
43 def access_token_expiry(self, value: int) -> None:
44 self.session[self._keys_access_token_expiry] = value
46 def access_token_valid(self):
47 """True if the request's session is configured with a valid card tokenization access token. False otherwise."""
48 if bool(self.access_token):
49 exp = self.access_token_expiry
50 # ensure token does not expire in the next 5 seconds
51 valid = exp is None or exp > (time.time() + 5)
52 return valid
53 else:
54 return False