Coverage for apis_core/core/models.py: 32%

44 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2024-09-16 07:42 +0000

1from django.db import models 

2 

3from apis_core.utils import DateParser 

4 

5 

6# This is abstract class provides a Mixin for APIS models that need 

7# a temporal component. It provides commonly used felds for start 

8# and end dates, reps. start and end durations. 

9class LegacyDateMixin(models.Model): 

10 start_date = models.DateField(blank=True, null=True, editable=False) 

11 start_start_date = models.DateField(blank=True, null=True, editable=False) 

12 start_end_date = models.DateField(blank=True, null=True, editable=False) 

13 end_date = models.DateField(blank=True, null=True, editable=False) 

14 end_start_date = models.DateField(blank=True, null=True, editable=False) 

15 end_end_date = models.DateField(blank=True, null=True, editable=False) 

16 start_date_written = models.CharField( 

17 max_length=255, 

18 blank=True, 

19 null=True, 

20 verbose_name="Start", 

21 ) 

22 end_date_written = models.CharField( 

23 max_length=255, 

24 blank=True, 

25 null=True, 

26 verbose_name="End", 

27 ) 

28 

29 class Meta: 

30 abstract = True 

31 

32 def save(self, *args, **kwargs): 

33 start = None 

34 start_start = None 

35 start_end = None 

36 end = None 

37 end_start = None 

38 end_end = None 

39 

40 if self.start_date_written: 

41 start, start_start, start_end = DateParser.parse_date( 

42 self.start_date_written 

43 ) 

44 # DateParser returns datetime, but we want dates without time 

45 if start: 

46 start = start.date() 

47 if start_start: 

48 start_start = start_start.date() 

49 if start_end: 

50 start_end = start_end.date() 

51 

52 if self.end_date_written: 

53 end, end_start, end_end = DateParser.parse_date(self.end_date_written) 

54 # DateParser returns datetime, but we want dates without time 

55 if end: 

56 end = end.date() 

57 if end_start: 

58 end_start = end_start.date() 

59 if end_end: 

60 end_end = end_end.date() 

61 

62 self.start_date = start 

63 self.start_start_date = start_start 

64 self.start_end_date = start_end 

65 self.end_date = end 

66 self.end_start_date = end_start 

67 self.end_end_date = end_end 

68 

69 super().save(*args, **kwargs) 

70 

71 return self