44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
#
|
|
# Copyright (c) 2023 Airbyte, Inc., all rights reserved.
|
|
#
|
|
|
|
|
|
from datetime import datetime
|
|
from typing import List, Optional, Union
|
|
|
|
from airbyte_cdk.models import (
|
|
AirbyteMessage,
|
|
AirbyteStream,
|
|
AirbyteStreamStatus,
|
|
AirbyteStreamStatusReason,
|
|
AirbyteStreamStatusTraceMessage,
|
|
AirbyteTraceMessage,
|
|
StreamDescriptor,
|
|
TraceType,
|
|
)
|
|
from airbyte_cdk.models import Type as MessageType
|
|
|
|
|
|
def as_airbyte_message(
|
|
stream: Union[AirbyteStream, StreamDescriptor],
|
|
current_status: AirbyteStreamStatus,
|
|
reasons: Optional[List[AirbyteStreamStatusReason]] = None,
|
|
) -> AirbyteMessage:
|
|
"""
|
|
Builds an AirbyteStreamStatusTraceMessage for the provided stream
|
|
"""
|
|
|
|
now_millis = datetime.now().timestamp() * 1000.0
|
|
|
|
trace_message = AirbyteTraceMessage(
|
|
type=TraceType.STREAM_STATUS,
|
|
emitted_at=now_millis,
|
|
stream_status=AirbyteStreamStatusTraceMessage(
|
|
stream_descriptor=StreamDescriptor(name=stream.name, namespace=stream.namespace),
|
|
status=current_status,
|
|
reasons=reasons,
|
|
),
|
|
)
|
|
|
|
return AirbyteMessage(type=MessageType.TRACE, trace=trace_message)
|