示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
def get_payload(event):
    if 'payload' in event:
        return s3.read_dict(uri=event['payload']['s3Uri'])
    else:
        return event.get('test_payload', [])