diff options
| author | Max Nanis | 2026-02-24 17:26:15 -0500 |
|---|---|---|
| committer | Max Nanis | 2026-02-24 17:26:15 -0500 |
| commit | 8c1940445503fd6678d0961600f2be81622793a2 (patch) | |
| tree | b9173562b8824b5eaa805e446d9d780e1f23fb2a /jb/models/hit.py | |
| parent | 25d8c3c214baf10f6520cc1351f78473150e5d7a (diff) | |
| download | amt-jb-8c1940445503fd6678d0961600f2be81622793a2.tar.gz amt-jb-8c1940445503fd6678d0961600f2be81622793a2.zip | |
Extensive use of type checking. Movement of pytest conf towards handling managers (for db agnostic unittest). Starting to organize pytests.
Diffstat (limited to 'jb/models/hit.py')
| -rw-r--r-- | jb/models/hit.py | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/jb/models/hit.py b/jb/models/hit.py index c3734fa..fba2ecf 100644 --- a/jb/models/hit.py +++ b/jb/models/hit.py @@ -1,5 +1,5 @@ from datetime import datetime, timezone, timedelta -from typing import Optional, List, Dict +from typing import Optional, List, Dict, Any from uuid import uuid4 from xml.etree import ElementTree @@ -13,7 +13,7 @@ from pydantic import ( ) from typing_extensions import Self -from jb.models.currency import USDCent +from generalresearchutils.currency import USDCent from jb.models.custom_types import AMTBoto3ID, HttpsUrlStr, AwareDatetimeISO from jb.models.definitions import HitStatus, HitReviewStatus @@ -104,11 +104,11 @@ class HitType(HitTypeCommon): return d @classmethod - def from_postgres(cls, data: Dict) -> Self: + def from_postgres(cls, data: Dict[str, Any]) -> Self: data["reward"] = USDCent(round(data["reward"] * 100)) return cls.model_validate(data) - def generate_hit_amt_request(self, question: HitQuestion): + def generate_hit_amt_request(self, question: HitQuestion) -> Dict[str, Any]: d = dict() d["HITTypeId"] = self.amt_hit_type_id d["MaxAssignments"] = 1 @@ -135,7 +135,12 @@ class Hit(HitTypeCommon): status: HitStatus = Field() review_status: HitReviewStatus = Field() - creation_time: AwareDatetimeISO = Field(default=None, description="From aws") + + # TODO: Check if this is actually ever going to be None. I type fixed it, + # but I don't have anything to suggest it isn't requred. -- Max 2026-02-24 + creation_time: Optional[AwareDatetimeISO] = Field( + default=None, description="From aws" + ) expiration: Optional[AwareDatetimeISO] = Field(default=None) # GRL Specific @@ -150,7 +155,7 @@ class Hit(HitTypeCommon): # -- Hit specific - qualification_requirements: Optional[List[Dict]] = Field(default=None) + qualification_requirements: Optional[List[Dict[str, Any]]] = Field(default=None) max_assignments: int = Field() # # this comes back as expiration. only for the request @@ -171,7 +176,7 @@ class Hit(HitTypeCommon): assert hit_type.id is not None assert hit_type.amt_hit_type_id is not None - h = Hit.model_validate( + h = cls.model_validate( dict( amt_hit_id=data["HITId"], amt_hit_type_id=data["HITTypeId"], @@ -194,11 +199,12 @@ class Hit(HitTypeCommon): hit_type_id=hit_type.id, ) ) + return h @classmethod def from_amt_get_hit(cls, data: HITTypeDef) -> Self: - h = Hit.model_validate( + h = cls.model_validate( dict( amt_hit_id=data["HITId"], amt_hit_type_id=data["HITTypeId"], @@ -229,7 +235,7 @@ class Hit(HitTypeCommon): return d @classmethod - def from_postgres(cls, data: Dict) -> Self: + def from_postgres(cls, data: Dict[str, Any]) -> Self: data["reward"] = USDCent(round(data["reward"] * 100)) return cls.model_validate(data) |
