def pynamodb_meta_processor()

in aws_xray_sdk/ext/pynamodb/patch.py [0:0]


def pynamodb_meta_processor(wrapped, instance, args, kwargs, return_value,
                            exception, subsegment, stack):
    operation_name = args[0].headers['X-Amz-Target'].decode('utf-8').split('.')[1]
    region = args[0].url.split('.')[1]

    aws_meta = {
        'operation': operation_name,
        'region': region
    }

    # in case of client timeout the return value will be empty
    if return_value is not None:
        aws_meta['request_id'] = return_value.headers.get('x-amzn-RequestId')
        subsegment.put_http_meta(http.STATUS, return_value.status_code)

    if exception:
        subsegment.add_error_flag()
        subsegment.add_exception(exception, stack, True)

    if PYNAMODB4:
        resp = json.loads(return_value.text) if return_value else None
    else:
        resp = return_value.json() if return_value else None
    _extract_whitelisted_params(subsegment.name, operation_name, aws_meta,
                                [None, json.loads(args[0].body.decode('utf-8'))],
                                None, resp)

    subsegment.set_aws(aws_meta)