diff --git a/doc/changes/changes_0.1.1.md b/doc/changes/changes_0.2.0.md similarity index 88% rename from doc/changes/changes_0.1.1.md rename to doc/changes/changes_0.2.0.md index 0bdaa732..ac7e03c1 100644 --- a/doc/changes/changes_0.1.1.md +++ b/doc/changes/changes_0.2.0.md @@ -1,4 +1,4 @@ -# advanced-analytics-framework 0.1.1, released ????-??-?? +# 0.2.0 - 2024-12-03 Code name: @@ -20,3 +20,4 @@ Code name: * #217: Rename dataflow abstraction files * #219: Applied PTB checks and fixes * #221: Fixed mypy warnings +* #233: Upgraded pydantic to version 2 \ No newline at end of file diff --git a/doc/changes/unreleased.md b/doc/changes/unreleased.md new file mode 100644 index 00000000..79e701b8 --- /dev/null +++ b/doc/changes/unreleased.md @@ -0,0 +1 @@ +# Unreleased diff --git a/exasol/analytics/udf/communication/broadcast_operation.py b/exasol/analytics/udf/communication/broadcast_operation.py index 7c1a4fb0..d6b1a44e 100644 --- a/exasol/analytics/udf/communication/broadcast_operation.py +++ b/exasol/analytics/udf/communication/broadcast_operation.py @@ -135,7 +135,7 @@ def _check_sequence_number(self, specific_message_obj: messages.Broadcast): def _get_and_check_specific_message_obj( self, message: messages.Message ) -> messages.Broadcast: - specific_message_obj = message.__root__ + specific_message_obj = message.root if not isinstance(specific_message_obj, messages.Broadcast): raise TypeError( f"Received the wrong message type. " diff --git a/exasol/analytics/udf/communication/discovery/multi_node/discovery_socket.py b/exasol/analytics/udf/communication/discovery/multi_node/discovery_socket.py index ccc96c02..e3e37f4d 100644 --- a/exasol/analytics/udf/communication/discovery/multi_node/discovery_socket.py +++ b/exasol/analytics/udf/communication/discovery/multi_node/discovery_socket.py @@ -15,7 +15,7 @@ class DiscoverySocket: def __init__(self, ip_address: IPAddress, port: Port): self._port = port self._ip_address = ip_address - self._logger = LOGGER.bind(ip_address=ip_address.dict(), port=port.dict()) + self._logger = LOGGER.bind(ip_address=ip_address.model_dump(), port=port.model_dump()) self._logger.info("create") self._udp_socket = socket.socket( socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP diff --git a/exasol/analytics/udf/communication/gather_operation.py b/exasol/analytics/udf/communication/gather_operation.py index 3bfa86bd..4634d1fe 100644 --- a/exasol/analytics/udf/communication/gather_operation.py +++ b/exasol/analytics/udf/communication/gather_operation.py @@ -251,7 +251,7 @@ def _check_sequence_number(self, specific_message_obj: Gather): ) def _get_and_check_specific_message_obj(self, message: messages.Message) -> Gather: - specific_message_obj = message.__root__ + specific_message_obj = message.root if not isinstance(specific_message_obj, Gather): raise TypeError( f"Received the wrong message type. " diff --git a/exasol/analytics/udf/communication/messages.py b/exasol/analytics/udf/communication/messages.py index bfe67f16..08bdf00e 100644 --- a/exasol/analytics/udf/communication/messages.py +++ b/exasol/analytics/udf/communication/messages.py @@ -1,6 +1,6 @@ from typing import Literal, Optional, Union -from pydantic import BaseModel +from pydantic import BaseModel, Field, RootModel from exasol.analytics.udf.communication.connection_info import ConnectionInfo from exasol.analytics.udf.communication.peer import Peer @@ -133,8 +133,8 @@ class Broadcast(BaseMessage, frozen=True): sequence_number: int -class Message(BaseModel, frozen=True): - __root__: Union[ +class Message(RootModel, frozen=True): + root: Union[ Ping, RegisterPeer, AcknowledgeRegisterPeer, @@ -156,4 +156,4 @@ class Message(BaseModel, frozen=True): Timeout, Gather, Broadcast, - ] + ] = Field(discriminator='message_type') diff --git a/exasol/analytics/udf/communication/peer_communicator/abort_timeout_sender.py b/exasol/analytics/udf/communication/peer_communicator/abort_timeout_sender.py index ace5d44b..c41d2cbc 100644 --- a/exasol/analytics/udf/communication/peer_communicator/abort_timeout_sender.py +++ b/exasol/analytics/udf/communication/peer_communicator/abort_timeout_sender.py @@ -32,7 +32,7 @@ def __init__( self._out_control_socket = out_control_socket self._states = _States.INIT self._logger = LOGGER.bind( - peer=peer.dict(), my_connection_info=my_connection_info.dict() + peer=peer.model_dump(), my_connection_info=my_connection_info.model_dump() ) def stop(self): diff --git a/exasol/analytics/udf/communication/peer_communicator/acknowledge_register_peer_sender.py b/exasol/analytics/udf/communication/peer_communicator/acknowledge_register_peer_sender.py index 777fba08..5d97359f 100644 --- a/exasol/analytics/udf/communication/peer_communicator/acknowledge_register_peer_sender.py +++ b/exasol/analytics/udf/communication/peer_communicator/acknowledge_register_peer_sender.py @@ -34,8 +34,8 @@ def __init__( self._peer = peer self._send_attempt_count = 0 self._logger = LOGGER.bind( - peer=peer.dict(), - my_connection_info=my_connection_info.dict(), + peer=peer.model_dump(), + my_connection_info=my_connection_info.model_dump(), needs_to_send_for_peer=self._needs_to_send_for_peer, ) self._logger.debug("init") diff --git a/exasol/analytics/udf/communication/peer_communicator/background_listener_interface.py b/exasol/analytics/udf/communication/peer_communicator/background_listener_interface.py index cadd8933..7f0f3f95 100644 --- a/exasol/analytics/udf/communication/peer_communicator/background_listener_interface.py +++ b/exasol/analytics/udf/communication/peer_communicator/background_listener_interface.py @@ -105,7 +105,7 @@ def _get_my_connection_info(self) -> ConnectionInfo: try: received = self._out_control.socket.receive() generic = deserialize_message(received, messages.Message) - message = generic.__root__ + message = generic.root if not isinstance(message, messages.MyConnectionInfo): raise UnexpectedMessageError( f"Unexpected message of type {type(message)}." diff --git a/exasol/analytics/udf/communication/peer_communicator/background_listener_thread.py b/exasol/analytics/udf/communication/peer_communicator/background_listener_thread.py index 504c52cd..5faa3926 100644 --- a/exasol/analytics/udf/communication/peer_communicator/background_listener_thread.py +++ b/exasol/analytics/udf/communication/peer_communicator/background_listener_thread.py @@ -240,7 +240,7 @@ def _handle_control_message(self, frames: List[Frame]) -> Status: message_obj: messages.Message = deserialize_message( frames[0].to_bytes(), messages.Message ) - specific_message_obj = message_obj.__root__ + specific_message_obj = message_obj.root if isinstance(specific_message_obj, messages.Stop): return BackgroundListenerThread.Status.STOPPED elif isinstance(specific_message_obj, PrepareToStop): @@ -251,13 +251,13 @@ def _handle_control_message(self, frames: List[Frame]) -> Status: else: self._logger.error( "RegisterPeer message not allowed", - message_obj=specific_message_obj.dict(), + message_obj=specific_message_obj.model_dump(), ) elif isinstance(specific_message_obj, messages.Payload): self.send_payload(payload=specific_message_obj, frames=frames) else: self._logger.error( - "Unknown message type", message_obj=specific_message_obj.dict() + "Unknown message type", message_obj=specific_message_obj.model_dump() ) except Exception as e: self._logger.exception("Exception during handling message", message=frames) @@ -291,8 +291,8 @@ def _add_peer( ): self._logger.error( "Peer belongs to a different group", - my_connection_info=self._my_connection_info.dict(), - peer=peer.dict(), + my_connection_info=self._my_connection_info.model_dump(), + peer=peer.model_dump(), ) raise ValueError("Peer belongs to a different group") if peer not in self._peer_state: @@ -321,7 +321,7 @@ def _handle_listener_message(self, frames: List[Frame]): message_obj: messages.Message = deserialize_message( message_content_bytes, messages.Message ) - specific_message_obj = message_obj.__root__ + specific_message_obj = message_obj.root if isinstance(specific_message_obj, messages.SynchronizeConnection): self._handle_synchronize_connection(specific_message_obj) elif isinstance(specific_message_obj, messages.AcknowledgeConnection): @@ -336,7 +336,7 @@ def _handle_listener_message(self, frames: List[Frame]): else: logger.error( "RegisterPeer message not allowed", - message_obj=specific_message_obj.dict(), + message_obj=specific_message_obj.model_dump(), ) elif isinstance(specific_message_obj, messages.AcknowledgeRegisterPeer): self._handle_acknowledge_register_peer_message(specific_message_obj) @@ -348,7 +348,7 @@ def _handle_listener_message(self, frames: List[Frame]): self._handle_acknowledge_payload_message(specific_message_obj) else: logger.error( - "Unknown message type", message_obj=specific_message_obj.dict() + "Unknown message type", message_obj=specific_message_obj.model_dump() ) except Exception as e: logger.exception( @@ -450,7 +450,7 @@ def _handle_acknowledge_register_peer_message( if self._register_peer_connection.successor != message.source: self._logger.error( "AcknowledgeRegisterPeer message not from successor", - message_obj=message.dict(), + message_obj=message.model_dump(), ) peer = message.peer self._peer_state[peer].received_acknowledge_register_peer() @@ -463,7 +463,7 @@ def _handle_register_peer_complete_message( if self._register_peer_connection.predecessor != message.source: self._logger.error( "RegisterPeerComplete message not from predecessor", - message_obj=message.dict(), + message_obj=message.model_dump(), ) peer = message.peer self._peer_state[peer].received_register_peer_complete() diff --git a/exasol/analytics/udf/communication/peer_communicator/background_peer_state.py b/exasol/analytics/udf/communication/peer_communicator/background_peer_state.py index fc13b1c3..2cce5539 100644 --- a/exasol/analytics/udf/communication/peer_communicator/background_peer_state.py +++ b/exasol/analytics/udf/communication/peer_communicator/background_peer_state.py @@ -45,8 +45,8 @@ def __init__( self._sender = sender self._prepare_to_stop = False self._logger = LOGGER.bind( - peer=self._peer.dict(), - my_connection_info=self._my_connection_info.dict(), + peer=self._peer.model_dump(), + my_connection_info=self._my_connection_info.model_dump(), ) self._logger.debug("__init__") diff --git a/exasol/analytics/udf/communication/peer_communicator/background_thread/connection_closer/close_connection_sender.py b/exasol/analytics/udf/communication/peer_communicator/background_thread/connection_closer/close_connection_sender.py index 6738cc35..0e545376 100644 --- a/exasol/analytics/udf/communication/peer_communicator/background_thread/connection_closer/close_connection_sender.py +++ b/exasol/analytics/udf/communication/peer_communicator/background_thread/connection_closer/close_connection_sender.py @@ -25,7 +25,7 @@ def __init__( self._send_attempt_count = 0 self._peer = peer self._logger = LOGGER.bind( - peer=peer.dict(), my_connection_info=my_connection_info.dict() + peer=peer.model_dump(), my_connection_info=my_connection_info.model_dump() ) self._logger.debug("init") @@ -47,7 +47,7 @@ def _send(self): else: self._logger.warning("resend", send_attempt_count=self._send_attempt_count) message = messages.Message( - __root__=messages.CloseConnection( + root=messages.CloseConnection( source=self._my_connection_info, destination=self._peer, attempt=self._send_attempt_count, diff --git a/exasol/analytics/udf/communication/peer_communicator/background_thread/connection_closer/connection_closer.py b/exasol/analytics/udf/communication/peer_communicator/background_thread/connection_closer/connection_closer.py index 2ec8141e..b8684213 100644 --- a/exasol/analytics/udf/communication/peer_communicator/background_thread/connection_closer/connection_closer.py +++ b/exasol/analytics/udf/communication/peer_communicator/background_thread/connection_closer/connection_closer.py @@ -35,15 +35,15 @@ def __init__( self._peer = peer self._sender = sender self._logger = LOGGER.bind( - peer=self._peer.dict(), - my_connection_info=self._my_connection_info.dict(), + peer=self._peer.model_dump(), + my_connection_info=self._my_connection_info.model_dump(), ) def received_close_connection(self): self._logger.debug("received_synchronize_connection") self._sender.send( Message( - __root__=messages.AcknowledgeCloseConnection( + root=messages.AcknowledgeCloseConnection( source=self._my_connection_info, destination=self._peer ) ) diff --git a/exasol/analytics/udf/communication/peer_communicator/background_thread/connection_closer/connection_is_closed_sender.py b/exasol/analytics/udf/communication/peer_communicator/background_thread/connection_closer/connection_is_closed_sender.py index d0120838..fddc1f6c 100644 --- a/exasol/analytics/udf/communication/peer_communicator/background_thread/connection_closer/connection_is_closed_sender.py +++ b/exasol/analytics/udf/communication/peer_communicator/background_thread/connection_closer/connection_is_closed_sender.py @@ -33,8 +33,8 @@ def __init__( self._out_control_socket = out_control_socket self._states = _States.INIT self._logger = LOGGER.bind( - peer=self._peer.dict(), - my_connection_info=my_connection_info.dict(), + peer=self._peer.model_dump(), + my_connection_info=my_connection_info.model_dump(), ) self._logger.debug("init") diff --git a/exasol/analytics/udf/communication/peer_communicator/connection_establisher.py b/exasol/analytics/udf/communication/peer_communicator/connection_establisher.py index b171c86e..b7f33aaa 100644 --- a/exasol/analytics/udf/communication/peer_communicator/connection_establisher.py +++ b/exasol/analytics/udf/communication/peer_communicator/connection_establisher.py @@ -36,8 +36,8 @@ def __init__( self._peer = peer self._sender = sender self._logger = LOGGER.bind( - peer=self._peer.dict(), - my_connection_info=self._my_connection_info.dict(), + peer=self._peer.model_dump(), + my_connection_info=self._my_connection_info.model_dump(), ) self._send_initial_messages() @@ -48,7 +48,7 @@ def received_synchronize_connection(self): self._logger.debug("received_synchronize_connection") self._sender.send( Message( - __root__=messages.AcknowledgeConnection( + root=messages.AcknowledgeConnection( source=self._my_connection_info, destination=self._peer ) ) diff --git a/exasol/analytics/udf/communication/peer_communicator/connection_is_ready_sender.py b/exasol/analytics/udf/communication/peer_communicator/connection_is_ready_sender.py index 20cf61a9..aba44340 100644 --- a/exasol/analytics/udf/communication/peer_communicator/connection_is_ready_sender.py +++ b/exasol/analytics/udf/communication/peer_communicator/connection_is_ready_sender.py @@ -33,8 +33,8 @@ def __init__( self._out_control_socket = out_control_socket self._states = _States.INIT self._logger = LOGGER.bind( - peer=self._peer.dict(), - my_connection_info=my_connection_info.dict(), + peer=self._peer.model_dump(), + my_connection_info=my_connection_info.model_dump(), ) self._logger.debug("init") diff --git a/exasol/analytics/udf/communication/peer_communicator/frontend_peer_state.py b/exasol/analytics/udf/communication/peer_communicator/frontend_peer_state.py index e66961bf..c79c97ea 100644 --- a/exasol/analytics/udf/communication/peer_communicator/frontend_peer_state.py +++ b/exasol/analytics/udf/communication/peer_communicator/frontend_peer_state.py @@ -37,7 +37,7 @@ def __init__( self._peer_register_forwarder_is_ready = False self._sequence_number = 0 self._logger = LOGGER.bind( - peer=peer.dict(), my_connection_info=my_connection_info.dict() + peer=peer.model_dump(), my_connection_info=my_connection_info.model_dump() ) def _next_sequence_number(self): @@ -72,7 +72,7 @@ def send(self, payload: List[Frame]): destination=self._peer, sequence_number=self._next_sequence_number(), ) - self._logger.debug("send", message=message.dict()) + self._logger.debug("send", message=message.model_dump()) self._background_listener.send_payload(message=message, payload=payload) return message.sequence_number diff --git a/exasol/analytics/udf/communication/peer_communicator/payload_receiver.py b/exasol/analytics/udf/communication/peer_communicator/payload_receiver.py index 461c0f1b..048e3fa2 100644 --- a/exasol/analytics/udf/communication/peer_communicator/payload_receiver.py +++ b/exasol/analytics/udf/communication/peer_communicator/payload_receiver.py @@ -25,14 +25,14 @@ def __init__( self._out_control_socket = out_control_socket self._sender = sender self._logger = LOGGER.bind( - peer=self._peer.dict(), - my_connection_info=self._my_connection_info.dict(), + peer=self._peer.model_dump(), + my_connection_info=self._my_connection_info.model_dump(), ) self._next_received_payload_sequence_number = 0 self._received_payload_dict: Dict[int, List[Frame]] = {} def received_payload(self, message: messages.Payload, frames: List[Frame]): - self._logger.info("received_payload", message=message.dict()) + self._logger.info("received_payload", message=message.model_dump()) self._send_acknowledge_payload_message(message.sequence_number) if message.sequence_number == self._next_received_payload_sequence_number: self._forward_new_message_directly(message, frames) @@ -43,13 +43,13 @@ def received_payload(self, message: messages.Payload, frames: List[Frame]): def _add_new_message_to_buffer( self, message: messages.Payload, frames: List[Frame] ): - self._logger.info("put_to_buffer", message=message.dict()) + self._logger.info("put_to_buffer", message=message.model_dump()) self._received_payload_dict[message.sequence_number] = frames def _forward_new_message_directly( self, message: messages.Payload, frames: List[Frame] ): - self._logger.info("forward_from_message", message=message.dict()) + self._logger.info("forward_from_message", message=message.model_dump()) self._forward_received_payload(frames) def _forward_messages_from_buffer(self): @@ -74,10 +74,10 @@ def _send_acknowledge_payload_message(self, sequence_number: int): ) self._logger.info( "_send_acknowledge_payload_message", - message=acknowledge_payload_message.dict(), + message=acknowledge_payload_message.model_dump(), ) self._sender.send( - message=messages.Message(__root__=acknowledge_payload_message) + message=messages.Message(root=acknowledge_payload_message) ) def _forward_received_payload(self, frames: List[Frame]): diff --git a/exasol/analytics/udf/communication/peer_communicator/payload_sender.py b/exasol/analytics/udf/communication/peer_communicator/payload_sender.py index bb46d710..9c987b82 100644 --- a/exasol/analytics/udf/communication/peer_communicator/payload_sender.py +++ b/exasol/analytics/udf/communication/peer_communicator/payload_sender.py @@ -45,8 +45,8 @@ def __init__( self._payload_message_sender_factory = payload_message_sender_factory self._sender = sender self._logger = LOGGER.bind( - peer=self._peer.dict(), - my_connection_info=self._my_connection_info.dict(), + peer=self._peer.model_dump(), + my_connection_info=self._my_connection_info.model_dump(), ) self._next_send_payload_sequence_number = 0 self._payload_message_sender_dict: Dict[int, PayloadMessageSender] = ( @@ -58,16 +58,16 @@ def try_send(self): payload_sender.try_send() def received_acknowledge_payload(self, message: messages.AcknowledgePayload): - self._logger.info("received_acknowledge_payload", message=message.dict()) + self._logger.info("received_acknowledge_payload", message=message.model_dump()) if message.sequence_number in self._payload_message_sender_dict: self._payload_message_sender_dict[message.sequence_number].stop() del self._payload_message_sender_dict[message.sequence_number] self._out_control_socket.send( - serialize_message(messages.Message(__root__=message)) + serialize_message(messages.Message(root=message)) ) def send_payload(self, message: messages.Payload, frames: List[Frame]): - self._logger.info("send_payload", message=message.dict()) + self._logger.info("send_payload", message=message.model_dump()) self._payload_message_sender_dict[message.sequence_number] = ( self._payload_message_sender_factory.create( message=message, diff --git a/exasol/analytics/udf/communication/peer_communicator/peer_communicator.py b/exasol/analytics/udf/communication/peer_communicator/peer_communicator.py index d59faee0..ab59dc99 100644 --- a/exasol/analytics/udf/communication/peer_communicator/peer_communicator.py +++ b/exasol/analytics/udf/communication/peer_communicator/peer_communicator.py @@ -84,7 +84,7 @@ def __init__( ) self._my_connection_info = self._background_listener.my_connection_info self._logger = self._logger.bind( - my_connection_info=self._my_connection_info.dict() + my_connection_info=self._my_connection_info.model_dump() ) self._logger.info("my_connection_info") self._peer_states: Dict[Peer, FrontendPeerState] = {} @@ -93,7 +93,7 @@ def _handle_messages(self, timeout_in_milliseconds: Optional[int] = 0): for message_obj, frames in self._background_listener.receive_messages( timeout_in_milliseconds ): - specific_message_obj = message_obj.__root__ + specific_message_obj = message_obj.root if isinstance(specific_message_obj, messages.ConnectionIsReady): peer = specific_message_obj.peer self._add_peer_state(peer) @@ -122,7 +122,7 @@ def _handle_messages(self, timeout_in_milliseconds: Optional[int] = 0): raise TimeoutError(specific_message_obj.reason) else: self._logger.error( - "Unknown message", message_obj=specific_message_obj.dict() + "Unknown message", message_obj=specific_message_obj.model_dump() ) def _add_peer_state(self, peer: Peer): @@ -170,7 +170,7 @@ def peers(self, timeout_in_milliseconds: Optional[int] = None) -> List[Peer]: def register_peer(self, peer_connection_info: ConnectionInfo): self._logger.info( - "register_peer", peer_connection_info=peer_connection_info.dict() + "register_peer", peer_connection_info=peer_connection_info.model_dump() ) self._handle_messages() if ( diff --git a/exasol/analytics/udf/communication/peer_communicator/register_peer_connection.py b/exasol/analytics/udf/communication/peer_communicator/register_peer_connection.py index d23ec86e..1cbd49f9 100644 --- a/exasol/analytics/udf/communication/peer_communicator/register_peer_connection.py +++ b/exasol/analytics/udf/communication/peer_communicator/register_peer_connection.py @@ -26,9 +26,9 @@ def __init__( my_connection_info: ConnectionInfo, ): self._logger = LOGGER.bind( - successor=successor.dict(), - predecessor=None if predecessor is None else predecessor.dict(), - my_connection_info=my_connection_info.dict(), + successor=successor.model_dump(), + predecessor=None if predecessor is None else predecessor.model_dump(), + my_connection_info=my_connection_info.model_dump(), ) self._successor = successor self._predecessor = predecessor @@ -49,7 +49,7 @@ def predecessor(self) -> Optional[Peer]: return self._predecessor def forward(self, peer: Peer): - self._logger.debug("forward", peer=peer.dict()) + self._logger.debug("forward", peer=peer.model_dump()) message = messages.RegisterPeer( peer=peer, source=Peer(connection_info=self._my_connection_info) ) @@ -57,7 +57,7 @@ def forward(self, peer: Peer): self._successor_socket.send(serialized_message) def ack(self, peer: Peer): - self._logger.debug("ack", peer=peer.dict()) + self._logger.debug("ack", peer=peer.model_dump()) if self._predecessor_socket is not None: message = messages.AcknowledgeRegisterPeer( peer=peer, source=Peer(connection_info=self._my_connection_info) @@ -66,7 +66,7 @@ def ack(self, peer: Peer): self._predecessor_socket.send(serialized_message) def complete(self, peer: Peer): - self._logger.debug("complete", peer=peer.dict()) + self._logger.debug("complete", peer=peer.model_dump()) message = messages.RegisterPeerComplete( peer=peer, source=Peer(connection_info=self._my_connection_info) ) diff --git a/exasol/analytics/udf/communication/peer_communicator/register_peer_forwarder.py b/exasol/analytics/udf/communication/peer_communicator/register_peer_forwarder.py index 18afbcbc..da3f5834 100644 --- a/exasol/analytics/udf/communication/peer_communicator/register_peer_forwarder.py +++ b/exasol/analytics/udf/communication/peer_communicator/register_peer_forwarder.py @@ -49,8 +49,8 @@ def __init__( self._peer = peer self._sender = sender self._logger = LOGGER.bind( - peer=self._peer.dict(), - my_connection_info=self._my_connection_info.dict(), + peer=self._peer.model_dump(), + my_connection_info=self._my_connection_info.model_dump(), ) self._send_initial_messages() diff --git a/exasol/analytics/udf/communication/peer_communicator/register_peer_forwarder_is_ready_sender.py b/exasol/analytics/udf/communication/peer_communicator/register_peer_forwarder_is_ready_sender.py index bc46085a..05c5375f 100644 --- a/exasol/analytics/udf/communication/peer_communicator/register_peer_forwarder_is_ready_sender.py +++ b/exasol/analytics/udf/communication/peer_communicator/register_peer_forwarder_is_ready_sender.py @@ -41,8 +41,8 @@ def __init__( self._out_control_socket = out_control_socket self._states = _States.INIT self._logger = LOGGER.bind( - peer=self._peer.dict(), - my_connection_info=my_connection_info.dict(), + peer=self._peer.model_dump(), + my_connection_info=my_connection_info.model_dump(), behavior_config=asdict(self._behavior_config), ) diff --git a/exasol/analytics/udf/communication/peer_communicator/register_peer_sender.py b/exasol/analytics/udf/communication/peer_communicator/register_peer_sender.py index a53b3b91..0ab9d2d9 100644 --- a/exasol/analytics/udf/communication/peer_communicator/register_peer_sender.py +++ b/exasol/analytics/udf/communication/peer_communicator/register_peer_sender.py @@ -34,8 +34,8 @@ def __init__( self._peer = peer self._send_attempt_count = 0 self._logger = LOGGER.bind( - peer=peer.dict(), - my_connection_info=my_connection_info.dict(), + peer=peer.model_dump(), + my_connection_info=my_connection_info.model_dump(), needs_to_send_for_peer=self._needs_to_send_for_peer, ) self._logger.debug("init") diff --git a/exasol/analytics/udf/communication/peer_communicator/sender.py b/exasol/analytics/udf/communication/peer_communicator/sender.py index 9915aee4..e9ab7699 100644 --- a/exasol/analytics/udf/communication/peer_communicator/sender.py +++ b/exasol/analytics/udf/communication/peer_communicator/sender.py @@ -35,7 +35,7 @@ def __init__( def send(self, message: Message): with self._send_socket_factory.create_send_socket() as send_socket: - serialized_message = serialize_message(message.__root__) + serialized_message = serialize_message(message.root) send_socket.send(serialized_message) send_socket.close(self._send_socket_linger_time_in_ms) diff --git a/exasol/analytics/udf/communication/peer_communicator/synchronize_connection_sender.py b/exasol/analytics/udf/communication/peer_communicator/synchronize_connection_sender.py index 964bbd1e..490d7a08 100644 --- a/exasol/analytics/udf/communication/peer_communicator/synchronize_connection_sender.py +++ b/exasol/analytics/udf/communication/peer_communicator/synchronize_connection_sender.py @@ -25,7 +25,7 @@ def __init__( self._finished = False self._send_attempt_count = 0 self._logger = LOGGER.bind( - peer=peer.dict(), my_connection_info=my_connection_info.dict() + peer=peer.model_dump(), my_connection_info=my_connection_info.model_dump() ) self._logger.debug("init") @@ -47,7 +47,7 @@ def _send(self): else: self._logger.warning("resend", send_attempt_count=self._send_attempt_count) message = messages.Message( - __root__=messages.SynchronizeConnection( + root=messages.SynchronizeConnection( source=self._my_connection_info, destination=self._peer, attempt=self._send_attempt_count, diff --git a/exasol/analytics/udf/communication/serialization.py b/exasol/analytics/udf/communication/serialization.py index b211efef..c0e018c9 100644 --- a/exasol/analytics/udf/communication/serialization.py +++ b/exasol/analytics/udf/communication/serialization.py @@ -4,7 +4,7 @@ def serialize_message(obj: BaseModel) -> bytes: - json_str = obj.json() + json_str = obj.model_dump_json() return json_str.encode("UTF-8") diff --git a/poetry.lock b/poetry.lock index 756e27e7..fb4e4be6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -11,6 +11,17 @@ files = [ {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, ] +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" +optional = false +python-versions = ">=3.8" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + [[package]] name = "anyio" version = "4.6.0" @@ -1853,62 +1864,135 @@ files = [ [[package]] name = "pydantic" -version = "1.10.18" -description = "Data validation and settings management using python type hints" +version = "2.10.2" +description = "Data validation using Python type hints" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +files = [ + {file = "pydantic-2.10.2-py3-none-any.whl", hash = "sha256:cfb96e45951117c3024e6b67b25cdc33a3cb7b2fa62e239f7af1378358a1d99e"}, + {file = "pydantic-2.10.2.tar.gz", hash = "sha256:2bc2d7f17232e0841cbba4641e65ba1eb6fafb3a08de3a091ff3ce14a197c4fa"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.27.1" +typing-extensions = ">=4.12.2" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] + +[[package]] +name = "pydantic-core" +version = "2.27.1" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.8" files = [ - {file = "pydantic-1.10.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e405ffcc1254d76bb0e760db101ee8916b620893e6edfbfee563b3c6f7a67c02"}, - {file = "pydantic-1.10.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e306e280ebebc65040034bff1a0a81fd86b2f4f05daac0131f29541cafd80b80"}, - {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11d9d9b87b50338b1b7de4ebf34fd29fdb0d219dc07ade29effc74d3d2609c62"}, - {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b661ce52c7b5e5f600c0c3c5839e71918346af2ef20062705ae76b5c16914cab"}, - {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c20f682defc9ef81cd7eaa485879ab29a86a0ba58acf669a78ed868e72bb89e0"}, - {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c5ae6b7c8483b1e0bf59e5f1843e4fd8fd405e11df7de217ee65b98eb5462861"}, - {file = "pydantic-1.10.18-cp310-cp310-win_amd64.whl", hash = "sha256:74fe19dda960b193b0eb82c1f4d2c8e5e26918d9cda858cbf3f41dd28549cb70"}, - {file = "pydantic-1.10.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72fa46abace0a7743cc697dbb830a41ee84c9db8456e8d77a46d79b537efd7ec"}, - {file = "pydantic-1.10.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef0fe7ad7cbdb5f372463d42e6ed4ca9c443a52ce544472d8842a0576d830da5"}, - {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a00e63104346145389b8e8f500bc6a241e729feaf0559b88b8aa513dd2065481"}, - {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae6fa2008e1443c46b7b3a5eb03800121868d5ab6bc7cda20b5df3e133cde8b3"}, - {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9f463abafdc92635da4b38807f5b9972276be7c8c5121989768549fceb8d2588"}, - {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3445426da503c7e40baccefb2b2989a0c5ce6b163679dd75f55493b460f05a8f"}, - {file = "pydantic-1.10.18-cp311-cp311-win_amd64.whl", hash = "sha256:467a14ee2183bc9c902579bb2f04c3d3dac00eff52e252850509a562255b2a33"}, - {file = "pydantic-1.10.18-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:efbc8a7f9cb5fe26122acba1852d8dcd1e125e723727c59dcd244da7bdaa54f2"}, - {file = "pydantic-1.10.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24a4a159d0f7a8e26bf6463b0d3d60871d6a52eac5bb6a07a7df85c806f4c048"}, - {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b74be007703547dc52e3c37344d130a7bfacca7df112a9e5ceeb840a9ce195c7"}, - {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcb20d4cb355195c75000a49bb4a31d75e4295200df620f454bbc6bdf60ca890"}, - {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:46f379b8cb8a3585e3f61bf9ae7d606c70d133943f339d38b76e041ec234953f"}, - {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cbfbca662ed3729204090c4d09ee4beeecc1a7ecba5a159a94b5a4eb24e3759a"}, - {file = "pydantic-1.10.18-cp312-cp312-win_amd64.whl", hash = "sha256:c6d0a9f9eccaf7f438671a64acf654ef0d045466e63f9f68a579e2383b63f357"}, - {file = "pydantic-1.10.18-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d5492dbf953d7d849751917e3b2433fb26010d977aa7a0765c37425a4026ff1"}, - {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe734914977eed33033b70bfc097e1baaffb589517863955430bf2e0846ac30f"}, - {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15fdbe568beaca9aacfccd5ceadfb5f1a235087a127e8af5e48df9d8a45ae85c"}, - {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c3e742f62198c9eb9201781fbebe64533a3bbf6a76a91b8d438d62b813079dbc"}, - {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:19a3bd00b9dafc2cd7250d94d5b578edf7a0bd7daf102617153ff9a8fa37871c"}, - {file = "pydantic-1.10.18-cp37-cp37m-win_amd64.whl", hash = "sha256:2ce3fcf75b2bae99aa31bd4968de0474ebe8c8258a0110903478bd83dfee4e3b"}, - {file = "pydantic-1.10.18-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:335a32d72c51a313b33fa3a9b0fe283503272ef6467910338e123f90925f0f03"}, - {file = "pydantic-1.10.18-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:34a3613c7edb8c6fa578e58e9abe3c0f5e7430e0fc34a65a415a1683b9c32d9a"}, - {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9ee4e6ca1d9616797fa2e9c0bfb8815912c7d67aca96f77428e316741082a1b"}, - {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23e8ec1ce4e57b4f441fc91e3c12adba023fedd06868445a5b5f1d48f0ab3682"}, - {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:44ae8a3e35a54d2e8fa88ed65e1b08967a9ef8c320819a969bfa09ce5528fafe"}, - {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5389eb3b48a72da28c6e061a247ab224381435256eb541e175798483368fdd3"}, - {file = "pydantic-1.10.18-cp38-cp38-win_amd64.whl", hash = "sha256:069b9c9fc645474d5ea3653788b544a9e0ccd3dca3ad8c900c4c6eac844b4620"}, - {file = "pydantic-1.10.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80b982d42515632eb51f60fa1d217dfe0729f008e81a82d1544cc392e0a50ddf"}, - {file = "pydantic-1.10.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aad8771ec8dbf9139b01b56f66386537c6fe4e76c8f7a47c10261b69ad25c2c9"}, - {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941a2eb0a1509bd7f31e355912eb33b698eb0051730b2eaf9e70e2e1589cae1d"}, - {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65f7361a09b07915a98efd17fdec23103307a54db2000bb92095457ca758d485"}, - {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6951f3f47cb5ca4da536ab161ac0163cab31417d20c54c6de5ddcab8bc813c3f"}, - {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a4c5eec138a9b52c67f664c7d51d4c7234c5ad65dd8aacd919fb47445a62c86"}, - {file = "pydantic-1.10.18-cp39-cp39-win_amd64.whl", hash = "sha256:49e26c51ca854286bffc22b69787a8d4063a62bf7d83dc21d44d2ff426108518"}, - {file = "pydantic-1.10.18-py3-none-any.whl", hash = "sha256:06a189b81ffc52746ec9c8c007f16e5167c8b0a696e1a726369327e3db7b2a82"}, - {file = "pydantic-1.10.18.tar.gz", hash = "sha256:baebdff1907d1d96a139c25136a9bb7d17e118f133a76a2ef3b845e831e3403a"}, -] - -[package.dependencies] -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, + {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, + {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, + {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, + {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, + {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, + {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, + {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, + {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, + {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, + {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, + {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, + {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, + {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, + {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, + {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, + {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydot" @@ -3257,4 +3341,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<4" -content-hash = "d105b9a8ebc6775ea37159016a69afbf31a01e8ba9e86355b685f5bab64fc244" +content-hash = "13c21c71da4dfa32d0fbf27e97945161937c95f95550e1387d44703846c75f11" diff --git a/pyproject.toml b/pyproject.toml index 6e3f216d..9af61693 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "exasol-advanced-analytics-framework" -version = "0.1.0" +version = "0.2.0" description = "Framework for building complex data analysis algorithms with Exasol" packages = [ @@ -27,7 +27,7 @@ exasol-bucketfs = ">=0.6.0,<1.0.0" click = "^8.0.4" pyexasol = ">=0.25.0,<1.0.0" pandas = "^2.2.3" -pydantic = "^1.10.2" +pydantic = "^2.10.2" pyzmq = "^26.0.3" sortedcontainers = "^2.4.0" structlog = "^24.2.0" diff --git a/tests/unit_tests/udf_communication/peer_communication/background_thread/connection_closer/test_connection_closer.py b/tests/unit_tests/udf_communication/peer_communication/background_thread/connection_closer/test_connection_closer.py index 9ac580f5..1e65c4b0 100644 --- a/tests/unit_tests/udf_communication/peer_communication/background_thread/connection_closer/test_connection_closer.py +++ b/tests/unit_tests/udf_communication/peer_communication/background_thread/connection_closer/test_connection_closer.py @@ -120,7 +120,7 @@ def test_received_close_connection(): == [ call.send( Message( - __root__=messages.AcknowledgeCloseConnection( + root=messages.AcknowledgeCloseConnection( source=test_setup.my_connection_info, destination=test_setup.peer, ) diff --git a/tests/unit_tests/udf_communication/peer_communication/test_connection_establisher.py b/tests/unit_tests/udf_communication/peer_communication/test_connection_establisher.py index 8fc3b930..50c1e268 100644 --- a/tests/unit_tests/udf_communication/peer_communication/test_connection_establisher.py +++ b/tests/unit_tests/udf_communication/peer_communication/test_connection_establisher.py @@ -120,7 +120,7 @@ def test_received_synchronize_connection(): == [ call.send( Message( - __root__=AcknowledgeConnection( + root=AcknowledgeConnection( source=test_setup.my_connection_info, destination=test_setup.peer, ) diff --git a/tests/unit_tests/udf_communication/peer_communication/test_payload_receiver.py b/tests/unit_tests/udf_communication/peer_communication/test_payload_receiver.py index 075a7286..f8d40f11 100644 --- a/tests/unit_tests/udf_communication/peer_communication/test_payload_receiver.py +++ b/tests/unit_tests/udf_communication/peer_communication/test_payload_receiver.py @@ -65,7 +65,7 @@ def create_acknowledge_payload_message( test_setup: TestSetup, message: messages.Payload ) -> messages.Message: acknowledge_message = messages.Message( - __root__=messages.AcknowledgePayload( + root=messages.AcknowledgePayload( source=Peer(connection_info=test_setup.my_connection_info), sequence_number=message.sequence_number, destination=test_setup.peer, diff --git a/tests/unit_tests/udf_communication/peer_communication/test_payload_sender.py b/tests/unit_tests/udf_communication/peer_communication/test_payload_sender.py index dd25d134..447d8573 100644 --- a/tests/unit_tests/udf_communication/peer_communication/test_payload_sender.py +++ b/tests/unit_tests/udf_communication/peer_communication/test_payload_sender.py @@ -103,7 +103,7 @@ def create_acknowledge_payload_message( test_setup: TestSetup, message: messages.Payload ) -> messages.Message: acknowledge_message = messages.Message( - __root__=messages.AcknowledgePayload( + root=messages.AcknowledgePayload( source=Peer(connection_info=test_setup.my_connection_info), sequence_number=message.sequence_number, destination=test_setup.peer, @@ -194,7 +194,7 @@ def test_received_acknowledge_payload_after_send_payload(): test_setup, payload_message ) test_setup.payload_sender.received_acknowledge_payload( - message=acknowledge_payload_message.__root__ + message=acknowledge_payload_message.root ) assert ( test_setup.out_control_socket_mock.mock_calls @@ -214,11 +214,11 @@ def test_received_acknowledge_payload_twice_after_send_payload(): test_setup, payload_message ) test_setup.payload_sender.received_acknowledge_payload( - message=acknowledge_payload_message.__root__ + message=acknowledge_payload_message.root ) test_setup.reset_mock() test_setup.payload_sender.received_acknowledge_payload( - message=acknowledge_payload_message.__root__ + message=acknowledge_payload_message.root ) assert ( test_setup.out_control_socket_mock.mock_calls == [] diff --git a/tests/unit_tests/udf_communication/peer_communication/test_synchronize_connection_sender.py b/tests/unit_tests/udf_communication/peer_communication/test_synchronize_connection_sender.py index a5b3ad2a..df7947b5 100644 --- a/tests/unit_tests/udf_communication/peer_communication/test_synchronize_connection_sender.py +++ b/tests/unit_tests/udf_communication/peer_communication/test_synchronize_connection_sender.py @@ -91,7 +91,7 @@ def test_try_send_after_init_and_is_time_false_and_force(): assert test_setup.sender_mock.mock_calls == [ call.send( messages.Message( - __root__=messages.SynchronizeConnection( + root=messages.SynchronizeConnection( source=test_setup.my_connection_info, destination=test_setup.peer, attempt=1, @@ -111,7 +111,7 @@ def test_try_send_after_init_and_is_time_true(): assert test_setup.sender_mock.mock_calls == [ call.send( messages.Message( - __root__=messages.SynchronizeConnection( + root=messages.SynchronizeConnection( source=test_setup.my_connection_info, destination=test_setup.peer, attempt=1, @@ -132,7 +132,7 @@ def test_try_send_twice_and_is_time_true(): assert test_setup.sender_mock.mock_calls == [ call.send( messages.Message( - __root__=messages.SynchronizeConnection( + root=messages.SynchronizeConnection( source=test_setup.my_connection_info, destination=test_setup.peer, attempt=2, diff --git a/tests/unit_tests/udf_communication/test_messages.py b/tests/unit_tests/udf_communication/test_messages.py index d7546144..c389514e 100644 --- a/tests/unit_tests/udf_communication/test_messages.py +++ b/tests/unit_tests/udf_communication/test_messages.py @@ -2,7 +2,7 @@ import pytest from polyfactory.factories.pydantic_factory import ModelFactory -from pydantic.fields import ModelField +from pydantic.fields import FieldInfo from exasol.analytics.udf.communication.messages import * from exasol.analytics.udf.communication.serialization import ( @@ -19,7 +19,7 @@ def test_message_serialization(message_class: Type): message = factory.build() byte_string = serialize_message(message) obj = deserialize_message(byte_string, Message) - assert message == obj.__root__ + assert message == obj.root @pytest.mark.parametrize("message_class", base_message_subclasses) @@ -33,6 +33,6 @@ def test_message_type(message_class: Type): def test_all_base_message_subclasses_are_registered_in_root_field_of_message(): - root_field: ModelField = Message.__fields__["__root__"] - classes_in_root_field = set(get_args(root_field.type_)) + root_field: FieldInfo = Message.model_fields["root"] + classes_in_root_field = set(get_args(root_field.annotation)) assert classes_in_root_field == set(base_message_subclasses) diff --git a/version.py b/version.py index 9da99632..55cfb40d 100644 --- a/version.py +++ b/version.py @@ -5,6 +5,6 @@ # Do not edit this file manually! # If you need to change the version, do so in the project.toml, e.g. by using `poetry version X.Y.Z`. MAJOR = 0 -MINOR = 1 +MINOR = 2 PATCH = 0 VERSION = f"{MAJOR}.{MINOR}.{PATCH}"