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
« 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
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 )
21 @property
22 def start_date(self) -> Optional[datetime]:
23 return self._start_date
25 @property
26 def end_date(self) -> Optional[datetime]:
27 return self._end_date
29 @property
30 def last_modified_date(self) -> Optional[datetime]:
31 return to_date(self.get_value(["last_modified_date", "Last Modified Date"]))
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"]))
37 def __repr__(self) -> str:
38 return f"<Period of Performance {self._start_date or '?'} -> {self._end_date or '?'}>"