Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def debug_complete():
''' Debugging route for complete. '''
if not 'uniqueId' in request.args:
raise ExperimentError('improper_inputs')
else:
unique_id = request.args['uniqueId']
mode = request.args['mode']
try:
user = Participant.query.\
filter(Participant.uniqueid == unique_id).one()
user.status = COMPLETED
user.endhit = datetime.datetime.now()
db_session.add(user)
db_session.commit()
except:
raise ExperimentError('error_setting_worker_complete')
else:
# send them back to mturk.
if (mode == 'sandbox' or mode == 'live'):
return render_template('closepopup.html')
else:
return render_template('complete.html')
filter(Participant.status.in_([3, 4])).\
all()
# Iterate through all the people who completed this assignment.
# This should be one person, and it should match the person who
# submitted the HIT, but that doesn't always hold.
status_report = ''
for part in parts:
if part.workerid == assignment['workerId']:
found_assignment = True
response = self.amt_services.approve_assignment(assignment_id)
if not response.success:
raise response.exception
else:
part.status = CREDITED
db_session.add(part)
db_session.commit()
break
if not found_assignment:
# approve assignments not found in DB if the assignment id has been specified
if ignore_local_not_found:
response = self.amt_services.approve_assignment(assignment_id)
if response.success:
pass # yay
else:
raise response.exception
else:
raise WorkerIdNotFoundInLocalDBError()
return {'assignment_id': assignment_id}
def worker_submitted():
''' Submit worker '''
if not 'uniqueId' in request.args:
resp = {"status": "bad request"}
return jsonify(**resp)
else:
unique_id = request.args['uniqueId']
app.logger.info("Submitted experiment for %s" % unique_id)
try:
user = Participant.query.\
filter(Participant.uniqueid == unique_id).one()
user.status = SUBMITTED
db_session.add(user)
db_session.commit()
status = "success"
except exc.SQLAlchemyError:
status = "database error"
resp = {"status": status}
return jsonify(**resp)
def approve_local_assignment(self, assignment):
try:
assignment_id = assignment.assignmentid
response = self.amt_services.approve_assignment(assignment_id)
if not response.success:
raise response.exception
assignment.status = CREDITED
db_session.add(assignment)
db_session.commit()
return {'assignment_id': assignment_id}
except Exception as e:
return {'exception': e, 'assignment_id': assignment_id}
def worker_complete():
''' Complete worker. '''
if not 'uniqueId' in request.args:
resp = {"status": "bad request"}
return jsonify(**resp)
else:
unique_id = request.args['uniqueId']
app.logger.info("Completed experiment %s" % unique_id)
try:
user = Participant.query.\
filter(Participant.uniqueid == unique_id).one()
user.status = COMPLETED
user.endhit = datetime.datetime.now()
db_session.add(user)
db_session.commit()
status = "success"
except exc.SQLAlchemyError:
status = "database error"
resp = {"status": status}
return jsonify(**resp)
try:
# lookup user in database
user = Participant.query.\
filter(Participant.uniqueid == uniqueId).\
one()
user_data = loads(user.datastring) # load datastring from JSON
bonus = 0
for record in user_data['data']: # for line in data file
trial = record['trialdata']
if trial['phase'] == 'TEST':
if trial['hit'] is True:
bonus += 0.02
user.bonus = bonus
db_session.add(user)
db_session.commit()
resp = {"bonusComputed": "success"}
return jsonify(**resp)
except:
abort(404) # again, bad to display HTML, but...
else: # not using psiturk ad server
ad_location = "{}?mode={}".format(self.config.get(
'Shell Parameters', 'ad_location'), mode)
hit_config = self._generate_hit_config(
ad_location, num_workers, reward, duration)
response = self.amt_services.create_hit(hit_config)
if not response.success:
raise response.exception
else:
hit_id = response.data['HITId']
# stash hit id in psiturk database
hit = Hit(hitid=hit_id)
db_session.add(hit)
db_session.commit()
return {'hit_id': hit_id, 'ad_id': ad_id}