예제 #1
0
 def create(self, **kwargs):
     provider = MTurkProvider(host=SITE_HOST, aws_access_key_id=self.validated_data['client_id'],
                              aws_secret_access_key=self.validated_data['client_secret'])
     balance, is_valid = provider.test_connection()
     if not is_valid:
         raise ValidationError('Invalid AWS Keys or missing AmazonMechanicalTurkFullAccess policy')
     client_secret = AESUtil(key=AWS_DAEMO_KEY).encrypt(self.validated_data.pop('client_secret'))
     if not hasattr(kwargs.get('user'), 'mturk_account'):
         account = MTurkAccount.objects.create(user=kwargs.get('user'), client_secret=client_secret,
                                               **self.validated_data)
         return account
     else:
         kwargs.get('user').mturk_account.client_id = self.validated_data['client_id']
         kwargs.get('user').mturk_account.client_secret = client_secret
         kwargs.get('user').mturk_account.save()
         return kwargs.get('user').mturk_account
예제 #2
0
파일: tasks.py 프로젝트: cescgie/crowdi
def get_provider(user, host=None):
    if not hasattr(user, 'mturk_account'):
        return None
    if host is None:
        host = SITE_HOST
    client_secret = AESUtil(key=AWS_DAEMO_KEY).decrypt(
        user.mturk_account.client_secret)
    return MTurkProvider(host=host,
                         aws_access_key_id=user.mturk_account.client_id,
                         aws_secret_access_key=client_secret)
예제 #3
0
 def create(self, request, *args, **kwargs):
     worker = get_or_create_worker(worker_id=request.data.get('workerId'))
     provider = MTurkProvider('https://' + request.get_host())
     task_id = request.data.get('taskId', -1)
     task_hash = Hashids(salt=settings.SECRET_KEY,
                         min_length=settings.ID_HASH_MIN_LENGTH)
     task_id = task_hash.decode(task_id)
     if len(task_id) == 0:
         task_id = -1
     hit_id = request.data.get('hitId', -1)
     mturk_hit = get_object_or_404(MTurkHIT, task_id=task_id, hit_id=hit_id)
     assignment_id = request.data.get('assignmentId', -1)
     mturk_assignment_id = None
     task_worker = None
     if assignment_id != 'ASSIGNMENT_ID_NOT_AVAILABLE':
         assignment, is_valid = provider.get_assignment(assignment_id)
         if not assignment or (is_valid and assignment.HITId != hit_id):
             return Response(data={"message": "Invalid assignment"},
                             status=status.HTTP_400_BAD_REQUEST)
         task_worker, created = TaskWorker.objects.get_or_create(
             worker=worker, task_id=task_id[0])
         if created:
             task_worker.task_status = TaskWorker.STATUS_IN_PROGRESS
             task_worker.save()
         assignment, created = MTurkAssignment.objects.get_or_create(
             hit=mturk_hit,
             assignment_id=assignment_id,
             task_worker=task_worker)
         mturk_assignment_id = assignment.id
         if created:
             assignment.status = TaskWorker.STATUS_IN_PROGRESS
             assignment.save()
     task_serializer = TaskSerializer(instance=mturk_hit.task,
                                      fields=('id', 'template',
                                              'project_data', 'status'),
                                      context={'task_worker': task_worker})
     response_data = {
         'task': task_serializer.data,
         'assignment': mturk_assignment_id
     }
     return Response(data=response_data, status=status.HTTP_200_OK)
예제 #4
0
 def create(self, **kwargs):
     provider = MTurkProvider(
         host=SITE_HOST,
         aws_access_key_id=self.validated_data['client_id'],
         aws_secret_access_key=self.validated_data['client_secret'])
     balance, is_valid = provider.test_connection()
     if not is_valid:
         raise ValidationError(
             'Invalid AWS Keys or missing AmazonMechanicalTurkFullAccess policy'
         )
     client_secret = AESUtil(key=AWS_DAEMO_KEY).encrypt(
         self.validated_data.pop('client_secret'))
     if not hasattr(kwargs.get('user'), 'mturk_account'):
         account = MTurkAccount.objects.create(user=kwargs.get('user'),
                                               client_secret=client_secret,
                                               **self.validated_data)
         return account
     else:
         kwargs.get('user').mturk_account.client_id = self.validated_data[
             'client_id']
         kwargs.get('user').mturk_account.client_secret = client_secret
         kwargs.get('user').mturk_account.save()
         return kwargs.get('user').mturk_account
 def create(self, request, *args, **kwargs):
     worker = get_or_create_worker(worker_id=request.data.get('workerId'))
     provider = MTurkProvider('https://' + request.get_host())
     task_id = request.data.get('taskId', -1)
     task_hash = Hashids(salt=settings.SECRET_KEY, min_length=settings.ID_HASH_MIN_LENGTH)
     task_id = task_hash.decode(task_id)
     if len(task_id) == 0:
         task_id = -1
     hit_id = request.data.get('hitId', -1)
     mturk_hit = get_object_or_404(MTurkHIT, task_id=task_id, hit_id=hit_id)
     assignment_id = request.data.get('assignmentId', -1)
     mturk_assignment_id = None
     task_worker = None
     if assignment_id != 'ASSIGNMENT_ID_NOT_AVAILABLE':
         assignment, is_valid = provider.get_assignment(assignment_id)
         if not assignment or (is_valid and assignment.HITId != hit_id):
             return Response(data={"message": "Invalid assignment"}, status=status.HTTP_400_BAD_REQUEST)
         task_worker, created = TaskWorker.objects.get_or_create(worker=worker, task_id=task_id[0])
         if created:
             task_worker.task_status = TaskWorker.STATUS_IN_PROGRESS
             task_worker.save()
         assignment, created = MTurkAssignment.objects.get_or_create(hit=mturk_hit,
                                                                     assignment_id=assignment_id,
                                                                     task_worker=task_worker)
         mturk_assignment_id = assignment.id
         if created:
             assignment.status = TaskWorker.STATUS_IN_PROGRESS
             assignment.save()
     task_serializer = TaskSerializer(instance=mturk_hit.task,
                                      fields=('id', 'template', 'project_data', 'status'),
                                      context={'task_worker': task_worker})
     response_data = {
         'task': task_serializer.data,
         'assignment': mturk_assignment_id
     }
     return Response(data=response_data, status=status.HTTP_200_OK)
예제 #6
0
def mturk_update_status(project):
    provider = MTurkProvider(SITE_HOST)
    hits = MTurkHIT.objects.filter(task__project_id=project['id'])
    for hit in hits:
        if project['status'] == Project.STATUS_IN_PROGRESS:
            provider.extend_hit(hit.hit_id)
            hit.status = MTurkHIT.STATUS_IN_PROGRESS
        else:
            provider.expire_hit(hit.hit_id)
            hit.status = MTurkHIT.STATUS_EXPIRED
        hit.save()
    return 'SUCCESS'
예제 #7
0
def mturk_publish():
    provider = MTurkProvider(SITE_HOST)
    projects = Project.objects.filter(deleted=False, min_rating__lt=0.61)
    for project in projects:
        provider.create_hits(project)
    return {'message': 'SUCCESS'}
예제 #8
0
def mturk_approve(list_workers):
    provider = MTurkProvider(SITE_HOST)
    for task_worker_id in list_workers:
        provider.approve_assignment({'id': task_worker_id})
    return 'SUCCESS'
예제 #9
0
def mturk_hit_update(task):
    provider = MTurkProvider(SITE_HOST)
    return provider.update_max_assignments(task)