Ejemplo n.º 1
0
    def get(self):
        assignment_id = self.request.get('assignmentId', None)

        if assignment_id is None:
            self.not_found()
        elif assignment_id == 'ASSIGNMENT_ID_NOT_AVAILABLE':
            self.render('priv/hit_preview.html',
                        {'experiment': self.experiment})
        else:
            worker_id = self.request.get('workerId')

            worker = worker_lookup(worker_id, assignment_id)

            if worker is None:
                worker = Worker()
                worker.id = worker_id
                worker.assignment_id = assignment_id
                worker.experiment = self.experiment
                worker.nonce = nonce()
                worker.put()

            if worker.has_labeled_an_image():
                self.render('priv/first_stage_complete.html', {})
            else:
                self.render(
                    'priv/labeling_form.html', {
                        'image_url': self.experiment.images[0],
                        'form_action': self.request.url
                    })
Ejemplo n.º 2
0
  def get(self):
    assignment_id = self.request.get('assignmentId', None)

    if assignment_id is None:
      self.not_found()
    elif assignment_id == 'ASSIGNMENT_ID_NOT_AVAILABLE':
      self.render('priv/hit_preview.html', {'experiment': self.experiment})
    else:
      worker_id = self.request.get('workerId')

      worker = worker_lookup(worker_id, assignment_id)

      if worker is None:
        worker = Worker()
        worker.id = worker_id
        worker.assignment_id = assignment_id
        worker.experiment = self.experiment
        worker.nonce = nonce()
        worker.put()

      if worker.has_labeled_an_image():
        self.render('priv/first_stage_complete.html', {})
      else:
        self.render('priv/labeling_form.html', {
          'image_url': self.experiment.images[0]
        , 'form_action': self.request.url
        })
Ejemplo n.º 3
0
    def post(self):
        if experiment_grouping_already_started(
                self.experiment):  # be idempotent
            return

        cycle = Cycle(range(self.experiment.cohort_count))

        workers, peer_workers = [], {}

        for worker in Worker.all().filter('experiment = ', self.experiment):
            worker.cohort_index = cycle.next()

            workers.append(worker)

            if peer_workers.has_key(worker.cohort_index):
                peer_workers[worker.cohort_index].append(worker)
            else:
                peer_workers[worker.cohort_index] = [worker]

        for worker in workers:
            previous_cohort_index = index_decr(worker.cohort_index,
                                               self.experiment.cohort_count)

            previous_cohort = peer_workers[previous_cohort_index]

            worker.peer_worker = previous_cohort.pop(
                random.randrange(len(previous_cohort)))
            worker.put()

            if worker.cohort_index == 0:
                taskqueue.add(queue_name='worker-notification',
                              params={'key': worker.key()})
Ejemplo n.º 4
0
  def post(self):
    if experiment_grouping_already_started(self.experiment): # be idempotent
      return

    cycle = Cycle(range(self.experiment.cohort_count))

    workers, peer_workers = [], {}

    for worker in Worker.all().filter('experiment = ', self.experiment):
      worker.cohort_index = cycle.next()

      workers.append(worker)

      if peer_workers.has_key(worker.cohort_index):
        peer_workers[worker.cohort_index].append(worker)
      else:
        peer_workers[worker.cohort_index] = [worker]

    for worker in workers:
      previous_cohort_index = index_decr(worker.cohort_index, self.experiment.cohort_count)

      previous_cohort = peer_workers[previous_cohort_index]

      worker.peer_worker = previous_cohort.pop(random.randrange(len(previous_cohort)))
      worker.put()

      if worker.cohort_index == 0:
        taskqueue.add(queue_name='worker-notification', params={'key': worker.key()})
Ejemplo n.º 5
0
  def _fn(self, *args, **kwargs):
    self.token = self.request.get('token')

    self.worker = Worker.all().filter('nonce = ', self.token).get()

    if self.worker:
      return fn(self, *args, **kwargs)
    else:
      self.bad_request()
Ejemplo n.º 6
0
    def _fn(self, *args, **kwargs):
        self.token = self.request.get('token')

        self.worker = Worker.all().filter('nonce = ', self.token).get()

        if self.worker:
            return fn(self, *args, **kwargs)
        else:
            self.bad_request()
Ejemplo n.º 7
0
  def post(self):
    labeling = Labeling()
    labeling.image_url = self.image_url(self.worker)
    labeling.worker = self.worker
    labeling.labels = self.request.get_all('label')
    labeling.time = int(self.request.get('time'))
    labeling.put()

    evaluator = Worker.all().filter('peer_worker = ', self.worker).get()

    taskqueue.add(queue_name='worker-notification', params={'key': evaluator.key()})

    self.redirect(self.mturk_submit_url())
Ejemplo n.º 8
0
    def post(self):
        labeling = Labeling()
        labeling.image_url = self.image_url(self.worker)
        labeling.worker = self.worker
        labeling.labels = self.request.get_all('label')
        labeling.time = int(self.request.get('time'))
        labeling.put()

        evaluator = Worker.all().filter('peer_worker = ', self.worker).get()

        taskqueue.add(queue_name='worker-notification',
                      params={'key': evaluator.key()})

        self.redirect(self.mturk_submit_url())
Ejemplo n.º 9
0
  def get(self):
    experiments = Experiment.all().filter('second_stage_started = ', None)

    for experiment in experiments:
      worker_count = 0

      for worker in Worker.all().filter('experiment = ', experiment):
        if worker.has_labeled_an_image():
          worker_count += 1

      if worker_count == experiment.cohort_size * experiment.cohort_count:
        taskqueue.add(queue_name='worker-grouping', params={'key': experiment.key()})

        experiment.second_stage_started = datetime.now()
        experiment.put()
Ejemplo n.º 10
0
    def get(self):
        experiments = Experiment.all().filter('second_stage_started = ', None)

        for experiment in experiments:
            worker_count = 0

            for worker in Worker.all().filter('experiment = ', experiment):
                if worker.has_labeled_an_image():
                    worker_count += 1

            if worker_count == experiment.cohort_size * experiment.cohort_count:
                taskqueue.add(queue_name='worker-grouping',
                              params={'key': experiment.key()})

                experiment.second_stage_started = datetime.now()
                experiment.put()