def build_pre_response_from_object(event, log_details=True, input_attribute='taskObject', s3_resource=None): if log_details: print(event) source_ref = event['dataObject'].get('source-ref') if source_ref: if s3_resource: value = s3.read_dict(uri=source_ref, s3_resource=s3_resource) else: value = s3.read_dict(uri=source_ref) else: source = event['dataObject'].get('source') if source is None: print('No source or source-ref value found') return {} else: if type(source) is str: value = json.loads(source) else: value = source if log_details: print('Task object is: {}'.format(json.dumps(value))) response = {'taskInput': {}} response['taskInput'][input_attribute] = value if log_details: print('Response is {}'.format(json.dumps(response))) return response
def parse_requester_annotation(content, delete_temp_file=False, s3_resource=None): s3_resource = s3_resource if s3_resource else s3.resource if content and len(content) > 0: try: content = json.loads(content) if 'payload' in content: return content['payload'] elif 'payloadBytes' in content: return json.loads( zlib.decompress( base64.b85decode(content['payloadBytes'].encode()))) elif 'payloadURI' in content: results = s3.read_dict(uri=content['payloadURI'], s3_resource=s3_resource) if delete_temp_file: s3.delete_object(uri=content['payloadURI'], s3_resource=s3_resource) return results else: return content except json.decoder.JSONDecodeError: return content else: return content
def get_worker_responses(output_uri, job_name): by_worker = {} by_item = {} bucket_name, k = s3.decompose_uri(output_uri) for response_key in s3.list_objects(uri=os.path.join(output_uri, job_name, 'annotations/worker-response')): response_obj = s3.read_dict(bucket_name, response_key) item_id = response_key.split('/')[-2] by_item[item_id] = response_obj for response in response_obj['answers']: worker_id = response['workerId'] responses = by_worker.get(worker_id, []) response['itemId'] = item_id responses.append(response) by_worker[worker_id] = responses return by_item, by_worker
def get_payload(event): if 'payload' in event: return s3.read_dict(uri=event['payload']['s3Uri']) else: return event.get('test_payload', [])