aboutsummaryrefslogtreecommitdiff
path: root/jb/models/hit.py
diff options
context:
space:
mode:
authorMax Nanis2026-02-24 17:26:15 -0500
committerMax Nanis2026-02-24 17:26:15 -0500
commit8c1940445503fd6678d0961600f2be81622793a2 (patch)
treeb9173562b8824b5eaa805e446d9d780e1f23fb2a /jb/models/hit.py
parent25d8c3c214baf10f6520cc1351f78473150e5d7a (diff)
downloadamt-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.py24
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)