Example #1
0
  def get(self, key):
    hit = HIT.get(key)

    # TODO: track worker details here too?

    if hit:
      if hit.type == 'PASS_THROUGH' or datetime.utcnow() > hit.time:  # don't check time for pass-through
        worker = worker_lookup(hit, self.request.get('workerId'))

        if worker is None:
          self.not_found() # TODO: log error?
        else:
          if hit.min_workers > hit_workers(hit).count(): # TODO: only include active workers in count?
            if hit.always_pay:
              self.json({'available': False, 'message': 'Not enough people. You will still be paid for this HIT.', 'submit': True})
            else:
              self.json({'available': False, 'message': 'Not enough people. Please return this HIT.', 'submit': False})
          else:
            #worker.number = next_worker_number(hit)
            #worker.put()

            url = target_url(hit, self.request.query_string, worker)

            self.json({'available': True, 'location': url, 'submit': hit.handle_submit})
      else:
        self.not_found() # or other error code?
    else:
      self.not_found()
Example #2
0
  def get(self, key):
    hit = HIT.get(key)

    if hit:
      worker = worker_lookup(hit, self.request.get('workerId'))

      if worker is None:
        self.not_found()
      else:
        worker.remote_addr = self.request.remote_addr
        worker.user_agent = self.request.headers['User-Agent']
        worker.put()

        if hit.type == 'MULTIPLE_URLS':
          sizes = get_sizes(hit)
          remaining = 0
          for i in range (0, 11):
            if sizes[i] < worker.number <= sizes[i + 1]:
              remaining = sizes[i + 1] - worker.number
              break
          self.json({'status': 'OK', 'remaining': str(remaining)})
        elif hit.type == 'PASS_THROUGH':
          self.json({'status': 'OK', 'go': 'true'})
        else:
          self.json({'status': 'OK'})
    else:
      self.not_found()
Example #3
0
    def get(self, key):
        hit = HIT.get(key)

        if hit:
            worker = worker_lookup(hit, self.request.get('workerId'))

            if worker is None:
                self.not_found()
            else:
                worker.remote_addr = self.request.remote_addr
                worker.user_agent = self.request.headers['User-Agent']
                worker.put()

                if hit.type == 'MULTIPLE_URLS':
                    sizes = get_sizes(hit)
                    remaining = 0
                    for i in range(0, 11):
                        if sizes[i] < worker.number <= sizes[i + 1]:
                            remaining = sizes[i + 1] - worker.number
                            break
                    self.json({'status': 'OK', 'remaining': str(remaining)})
                elif hit.type == 'PASS_THROUGH':
                    self.json({'status': 'OK', 'go': 'true'})
                else:
                    self.json({'status': 'OK'})
        else:
            self.not_found()
Example #4
0
    def get(self, key):
        hit = HIT.get(key)

        # TODO: track worker details here too?

        if hit:
            if hit.type == 'PASS_THROUGH' or datetime.utcnow(
            ) > hit.time:  # don't check time for pass-through
                worker = worker_lookup(hit, self.request.get('workerId'))

                if worker is None:
                    self.not_found()  # TODO: log error?
                else:
                    if hit.min_workers > hit_workers(hit).count(
                    ):  # TODO: only include active workers in count?
                        if hit.always_pay:
                            self.json({
                                'available': False,
                                'message':
                                'Not enough people. You will still be paid for this HIT.',
                                'submit': True
                            })
                        else:
                            self.json({
                                'available': False,
                                'message':
                                'Not enough people. Please return this HIT.',
                                'submit': False
                            })
                    else:
                        #worker.number = next_worker_number(hit)
                        #worker.put()

                        url = target_url(hit, self.request.query_string,
                                         worker)

                        self.json({
                            'available': True,
                            'location': url,
                            'submit': hit.handle_submit
                        })
            else:
                self.not_found()  # or other error code?
        else:
            self.not_found()
Example #5
0
    def get(self, key):
        hit = HIT.get(key)

        if hit:
            if self.request.get(
                    'assignmentId') != 'ASSIGNMENT_ID_NOT_AVAILABLE':
                if self.request.get('workerId') in hit.blacklist:
                    self.render('priv/hit_blacklisted.html',
                                {'title': hit.title})
                    return

                worker = worker_lookup(hit, self.request.get('workerId'))

                if worker is None:
                    worker = Worker()
                    worker.hit = hit
                    worker.mturkid = self.request.get('workerId')
                    worker.assignment_id = self.request.get('assignmentId')
                    worker.number = next_worker_number(hit)  # save number ASAP

                worker.remote_addr = self.request.remote_addr
                worker.user_agent = self.request.headers['User-Agent']
                worker.put()

                clickgo_url = json.dumps(self.worker_click_go(worker))

            else:
                clickgo_url = json.dumps('')

            self.render(
                'priv/hit_countdown.html', {
                    'time': unix_timestamp(hit.time),
                    'title': hit.title,
                    'heartbeat_url': json.dumps(self.hit_heartbeat_url(hit)),
                    'location_url': json.dumps(self.hit_location_url(hit)),
                    'info': hit.info,
                    'hit': hit,
                    'clickgo_url': clickgo_url
                })
        else:
            self.not_found()
Example #6
0
  def get(self, key):
    hit = HIT.get(key)

    if hit:
      if self.request.get('assignmentId') != 'ASSIGNMENT_ID_NOT_AVAILABLE':
        if self.request.get('workerId') in hit.blacklist:
          self.render('priv/hit_blacklisted.html', {'title': hit.title})
          return

        worker = worker_lookup(hit, self.request.get('workerId'))

        if worker is None:
          worker = Worker()
          worker.hit = hit
          worker.mturkid = self.request.get('workerId')
          worker.assignment_id = self.request.get('assignmentId')
          worker.number = next_worker_number(hit)  # save number ASAP

        worker.remote_addr = self.request.remote_addr
        worker.user_agent = self.request.headers['User-Agent']
        worker.put()
      
        clickgo_url = json.dumps(self.worker_click_go(worker))

      else:
        clickgo_url = json.dumps('')

      self.render('priv/hit_countdown.html', {
        'time': unix_timestamp(hit.time)
      , 'title': hit.title
      , 'heartbeat_url': json.dumps(self.hit_heartbeat_url(hit))
      , 'location_url': json.dumps(self.hit_location_url(hit))
      , 'info': hit.info
      , 'hit': hit
      , 'clickgo_url': clickgo_url
      })
    else:
      self.not_found()