Skip to content

Commit 77f9b29

Browse files
author
Oleksandr Bazarnov
committed
handle duplicates for the default stdout deprecation warnings
1 parent a9ba12a commit 77f9b29

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

airbyte_cdk/sources/declarative/models/base_model_with_deprecations.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,14 @@ def __init__(self, **model_fields: Any) -> None:
5252
"""
5353
# call the parent constructor first to initialize Pydantic internals
5454
super().__init__(**model_fields)
55+
# set the placeholder for the default deprecation messages
56+
self._default_deprecation_messages: List[str] = []
5557
# set the placeholder for the deprecation logs
5658
self._deprecation_logs: List[AirbyteLogMessage] = []
5759
# process deprecated fields, if present
5860
self._process_fields(model_fields)
61+
# emit default deprecation messages
62+
self._emit_default_deprecation_messages()
5963
# set the deprecation logs attribute to the model
6064
self._set_deprecation_logs_attr_to_model()
6165

@@ -119,13 +123,23 @@ def _create_warning(self, field_name: str, message: str) -> None:
119123
message (str): Warning message to be displayed.
120124
"""
121125

122-
message = f"Component type: `{self.__class__.__name__}`. Field '{field_name}' is deprecated. {message}"
123-
# Emit a warning message for deprecated fields (to stdout) (Python Default behavior)
124-
warnings.warn(message, DeprecationWarning)
126+
deprecated_message = f"Component type: `{self.__class__.__name__}`. Field '{field_name}' is deprecated. {message}"
127+
128+
if deprecated_message not in self._default_deprecation_messages:
129+
# Avoid duplicates in the default deprecation messages
130+
self._default_deprecation_messages.append(deprecated_message)
131+
125132
# Create an Airbyte deprecation log message
126-
deprecation_log_message = AirbyteLogMessage(level=Level.WARN, message=message)
133+
deprecation_log_message = AirbyteLogMessage(level=Level.WARN, message=deprecated_message)
127134
# Add the deprecation message to the Airbyte log messages,
128135
# this logs are displayed in the Connector Builder.
129136
if deprecation_log_message not in self._deprecation_logs:
130137
# Avoid duplicates in the deprecation logs
131138
self._deprecation_logs.append(deprecation_log_message)
139+
140+
def _emit_default_deprecation_messages(self) -> None:
141+
"""
142+
Emit default deprecation messages for deprecated fields to STDOUT.
143+
"""
144+
for message in self._default_deprecation_messages:
145+
warnings.warn(message, DeprecationWarning)

0 commit comments

Comments
 (0)