Coverage for src/usaspending/models/period_of_performance.py: 96%

24 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-09-03 17:15 -0700

1from __future__ import annotations 

2from typing import Dict, Any, Optional 

3from .base_model import BaseModel 

4from ..utils.formatter import to_date 

5from datetime import datetime 

6 

7class PeriodOfPerformance(BaseModel): 

8 def __init__(self, data: Dict[str, Any]): 

9 super().__init__(data) 

10 self._start_date = to_date( 

11 self.get_value( 

12 ["start_date", "Start Date", "Period of Performance Start Date"] 

13 ) 

14 ) 

15 self._end_date = to_date( 

16 self.get_value( 

17 ["end_date", "End Date", "Period of Performance Current End Date"] 

18 ) 

19 ) 

20 

21 @property 

22 def start_date(self) -> Optional[datetime]: 

23 return self._start_date 

24 

25 @property 

26 def end_date(self) -> Optional[datetime]: 

27 return self._end_date 

28 

29 @property 

30 def last_modified_date(self) -> Optional[datetime]: 

31 return to_date(self.get_value(["last_modified_date", "Last Modified Date"])) 

32 

33 @property 

34 def potential_end_date(self) -> Optional[datetime]: 

35 return to_date(self.get_value(["potential_end_date", "Period of Performance Potential End Date"])) 

36 

37 def __repr__(self) -> str: 

38 return f"<Period of Performance {self._start_date or '?'} -> {self._end_date or '?'}>"