From b672b99ce256d0635965d896115ba09ab6659ce6 Mon Sep 17 00:00:00 2001 From: evan Date: Tue, 4 Jan 2022 19:09:10 -0500 Subject: [PATCH 1/2] Added bonus history functionality. --- psiturk/amt_services.py | 30 ++++++++++++++++++++++++++++++ psiturk/api/__init__.py | 11 +++++++++++ 2 files changed, 41 insertions(+) diff --git a/psiturk/amt_services.py b/psiturk/amt_services.py index 7121e6be..dc7908a0 100644 --- a/psiturk/amt_services.py +++ b/psiturk/amt_services.py @@ -220,6 +220,36 @@ def get_assignment(self, assignment_id): 'status': assignment['AssignmentStatus'], } return worker_data + + @amt_service_response + def get_bonuses(self, hit_id=None, assignment_ids=None): + """Get a list of paid bonuses.""" + bonuses = [] + if hit_id: + paginator = self.mtc.get_paginator('list_bonus_payments') + args = dict( + HITId=hit_id + ) + for page in paginator.paginate(**args): + bonuses.extend(page['BonusPayments']) + elif assignment_ids: + if not isinstance(assignment_ids, list): + assignment_ids = [assignment_ids] + for assignment_id in assignment_ids: + paginator = self.mtc.get_paginator('list_bonus_payments') + args = dict( + AssignmentId=assignment_id, + ) + for page in paginator.paginate(**args): + bonuses.extend(page['BonusPayments']) + bonus_data = [{ + 'workerId': bonus['WorkerId'], + 'bonusAmount': bonus['BonusAmount'], + 'assignmentId': bonus['AssignmentId'], + 'reason': bonus['Reason'], + 'grantTime': bonus['GrantTime'] + } for bonus in bonuses] + return bonus_data @amt_service_response def bonus_assignment(self, assignment_id, worker_id, amount, reason=""): diff --git a/psiturk/api/__init__.py b/psiturk/api/__init__.py index bc90d6d2..03b189fd 100644 --- a/psiturk/api/__init__.py +++ b/psiturk/api/__init__.py @@ -278,6 +278,15 @@ def post(self): raise APIException(message='task name `{}` not recognized!'.format(data['name'])) +class BonusList(Resource): + def post(self): + data = request.json + hit_id = data['hit_id'] if 'hit_id' in data else None + assignment_ids = data['assignment_ids'] if 'assignment_ids' in data else None + bonuses = services_manager.amt_services_wrapper.get_bonuses( + hit_id=hit_id, assignment_ids=assignment_ids).data + return bonuses, 201 + api.add_resource(ServicesManager, '/services_manager', '/services_manager/') api.add_resource(AssignmentList, '/assignments', '/assignments/') @@ -293,4 +302,6 @@ def post(self): api.add_resource(TaskList, '/tasks', '/tasks/') api.add_resource(Tasks, '/tasks/') +api.add_resource(BonusList, '/bonuses', '/bonuses/') + api.init_app(api_blueprint) From c24c6566753183c5c0e544b00ee6a30cdd30e4cd Mon Sep 17 00:00:00 2001 From: evan Date: Tue, 4 Jan 2022 19:12:55 -0500 Subject: [PATCH 2/2] Increased pagination page size. --- psiturk/amt_services.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/psiturk/amt_services.py b/psiturk/amt_services.py index dc7908a0..5a3ac504 100644 --- a/psiturk/amt_services.py +++ b/psiturk/amt_services.py @@ -189,7 +189,8 @@ def get_assignments(self, assignment_status=None, hit_ids=None): for hit_id in hit_ids: paginator = self.mtc.get_paginator('list_assignments_for_hit') args = dict( - HITId=hit_id + HITId=hit_id, + PaginationConfig={'PageSize':100} ) if assignment_status: args['AssignmentStatuses'] = [assignment_status] @@ -228,7 +229,8 @@ def get_bonuses(self, hit_id=None, assignment_ids=None): if hit_id: paginator = self.mtc.get_paginator('list_bonus_payments') args = dict( - HITId=hit_id + HITId=hit_id, + PaginationConfig={'PageSize':100} ) for page in paginator.paginate(**args): bonuses.extend(page['BonusPayments']) @@ -239,6 +241,7 @@ def get_bonuses(self, hit_id=None, assignment_ids=None): paginator = self.mtc.get_paginator('list_bonus_payments') args = dict( AssignmentId=assignment_id, + PaginationConfig={'PageSize':100} ) for page in paginator.paginate(**args): bonuses.extend(page['BonusPayments']) @@ -417,7 +420,8 @@ def list_qualification_types(self, Query='', MustBeRequestable=False, qualification_types = [] kwargs = { 'MustBeRequestable': MustBeRequestable, - 'MustBeOwnedByCaller': MustBeOwnedByCaller + 'MustBeOwnedByCaller': MustBeOwnedByCaller, + 'PaginationConfig': {'PageSize':100} } if Query: kwargs['Query'] = Query