def _clone_and_close_context()

in aws_advanced_python_wrapper/utils/telemetry/xray_telemetry.py [0:0]


def _clone_and_close_context(context: XRayTelemetryContext, trace_level: TelemetryTraceLevel) -> XRayTelemetryContext:
    clone = XRayTelemetryContext(TelemetryConst.COPY_TRACE_NAME_PREFIX + context.get_name(), trace_level)

    clone._trace_entity.start_time = context._trace_entity.start_time

    for key in context._trace_entity.annotations.items():
        value = context._trace_entity.annotations[key]
        if key != TelemetryConst.TRACE_NAME_ANNOTATION and value is not None:
            clone.set_attribute(key, value)

    if context.is_segment and context._trace_entity.error:
        clone._trace_entity.add_error_flag()

    clone.set_attribute(TelemetryConst.SOURCE_TRACE_ANNOTATION, str(context._trace_entity.trace_id))

    if context._trace_entity.parent_id is not None:
        if trace_level == TelemetryTraceLevel.NESTED:
            clone._trace_entity.parent_id = context._trace_entity.parent_id

    clone.close_context(context._trace_entity.end_time)

    return clone