def expire(self) -> float: """ Send a request to expire the HIT, and if it's not assigned return, otherwise just return the maximum assignment duration """ delay = 0 status = self.get_status() if status in [AssignmentState.EXPIRED, AssignmentState.COMPLETED]: return delay if status == AssignmentState.ASSIGNED: # The assignment is currently being worked on, # so we will set the wait time to be the # amount of time we granted for working on this assignment if self.assignment_time_in_seconds is not None: delay = self.assignment_time_in_seconds logger.debug( f"Expiring a unit that is ASSIGNED after delay {delay}") mturk_hit_id = self.get_mturk_hit_id() requester = self.get_requester() client = self._get_client(requester._requester_name) if mturk_hit_id is not None: expire_hit(client, mturk_hit_id) return delay else: unassigned_hit_ids = self.datastore.get_unassigned_hit_ids( self.task_run_id) if len(unassigned_hit_ids) == 0: self.set_db_status(AssignmentState.EXPIRED) return delay hit_id = unassigned_hit_ids[0] expire_hit(client, hit_id) self.datastore.register_assignment_to_hit(hit_id, self.db_id) self.set_db_status(AssignmentState.EXPIRED) return delay
def expire(self) -> float: """ Send a request to expire the HIT, and if it's not assigned return, otherwise just return the maximum assignment duration """ delay = 0 if self.get_status() == AssignmentState.ASSIGNED: # The assignment is currently being worked on, # so we will set the wait time to be the # amount of time we granted for working on this assignment if self.assignment_time_in_seconds is not None: delay = self.assignment_time_in_seconds mturk_hit_id = self.get_mturk_hit_id() requester = self.get_requester() client = self._get_client(requester._requester_name) if mturk_hit_id is not None: expire_hit(client, mturk_hit_id) return delay else: unassigned_hit_ids = self.datastore.get_unassigned_hit_ids( self.task_run_id) if len(unassigned_hit_ids) == 0: logger.warning( f"Number of unassigned hit IDs more than 1; Potential RACE CONDITION" ) return delay hit_id = unassigned_hit_ids[0] expire_hit(client, hit_id) self.datastore.register_assignment_to_hit(hit_id, self.db_id) self.set_db_status(AssignmentState.EXPIRED) return delay