docs: def notify_duration_exceeded(self, participants, reference_time):
          """The participant has exceed the maximum time for the activity,
          defined in the "duration" config value. We need find out the assignment
          status on MTurk and act based on this.
          """
          unsubmitted = []
          for participant in participants:
              summary = ParticipationTime(participant, reference_time, self.config)
              status = self._mturk_status_for(participant)
  
              if status == "Approved":
                  participant.status = "approved"
                  session.commit()
              elif status == "Rejected":
                  participant.status = "rejected"
                  session.commit()
              elif status == "Submitted":
                  self._resend_submitted_rest_notification_for(participant)
                  self._message_researcher(self._resubmitted_msg(summary))
                  logger.warning(
                      "Error - submitted notification for participant {} missed. "
                      "A replacement notification was created and sent, "
                      "but proceed with caution.".format(participant.id)
                  )
              else:
                  self._send_notification_missing_rest_notification_for(participant)
                  unsubmitted.append(summary)
  
          if unsubmitted:
              self._disable_autorecruit()
              self.close_recruitment()
              pick_one = unsubmitted[0]
              # message the researcher about the one of the participants:
              self._message_researcher(self._cancelled_msg(pick_one))
              # Attempt to force-expire the hit via boto. It's possible
              # that the HIT won't exist if the HIT has been deleted manually.
              try:
                  self.mturkservice.expire_hit(pick_one.participant.hit_id)
              except MTurkServiceException as ex:
                  logger.exception(ex)