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

1import logging 

2import time 

3 

4from django.http import HttpRequest 

5 

6logger = logging.getLogger(__name__) 

7 

8 

9class Session: 

10 

11 _keys_access_token = "enrollment_littlepay_access_token" 

12 _keys_access_token_expiry = "enrollment_littlepay_access_token_expiry" 

13 

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.""" 

16 

17 self.request = request 

18 self.session = request.session 

19 

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 

27 

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) 

32 

33 @access_token.setter 

34 def access_token(self, value: str) -> None: 

35 self.session[self._keys_access_token] = value 

36 

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) 

41 

42 @access_token_expiry.setter 

43 def access_token_expiry(self, value: int) -> None: 

44 self.session[self._keys_access_token_expiry] = value 

45 

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