Coverage for portality/models/lock.py: 79%

47 statements  

« prev     ^ index     » next       coverage.py v6.4.2, created at 2022-07-19 18:38 +0100

1from portality.dao import DomainObject 

2from datetime import datetime, timedelta 

3import tzlocal 

4 

5class Lock(DomainObject): 

6 __type__ = "lock" 

7 """ 

8 { 

9 "id" : "<opaque id for this lock>", 

10 "about" : "<opaque id for the journal/suggestion to which it applies>", 

11 "type" : "<journal/suggestion>", 

12 "created_date" : "<timestamp this lock record was created>", 

13 "expires" : "<timestamp for when this lock record expires>", 

14 "username" : "<user name of the user who holds the lock>" 

15 } 

16 """ 

17 @property 

18 def about(self): 

19 return self.data.get("about") 

20 

21 def set_about(self, val): 

22 self.data["about"] = val 

23 

24 @property 

25 def type(self): 

26 return self.data.get("type") 

27 

28 def set_type(self, val): 

29 if val not in ["journal", "suggestion"]: 

30 return 

31 self.data["type"] = val 

32 

33 @property 

34 def username(self): 

35 return self.data.get("username") 

36 

37 def set_username(self, val): 

38 self.data["username"] = val 

39 

40 @property 

41 def expires(self): 

42 return self.data.get('expires') 

43 

44 def expires_in(self, timeout): 

45 expires = datetime.now() + timedelta(0, timeout) 

46 self.data["expires"] = expires.strftime("%Y-%m-%dT%H:%M:%SZ") 

47 

48 def is_expired(self): 

49 ed = datetime.strptime(self.expires, "%Y-%m-%dT%H:%M:%SZ") 

50 return ed <= datetime.now() 

51 

52 def utc_expires(self): 

53 ed = datetime.strptime(self.expires, "%Y-%m-%dT%H:%M:%SZ") 

54 local = tzlocal.get_localzone() 

55 ld = local.localize(ed) 

56 tt = ld.utctimetuple() 

57 utcdt = datetime(tt.tm_year, tt.tm_mon, tt.tm_mday, tt.tm_hour, tt.tm_min, tt.tm_sec) 

58 return utcdt.strftime("%Y-%m-%dT%H:%M:%SZ") 

59 

60 def expire_formatted(self, format="%H:%M"): 

61 ed = datetime.strptime(self.expires, "%Y-%m-%dT%H:%M:%SZ") 

62 formatted = ed.strftime(format) 

63 return formatted 

64 

65 def would_expire_within(self, timeout): 

66 limit = datetime.now() + timedelta(0, timeout) 

67 ed = datetime.strptime(self.expires, "%Y-%m-%dT%H:%M:%SZ") 

68 return ed < limit