Skip to content

Commit 817dc59

Browse files
committed
feat: improve the integration test_case
Signed-off-by: Manish Dait <daitmanish88@gmail.com>
1 parent f6c9674 commit 817dc59

File tree

5 files changed

+299
-244
lines changed

5 files changed

+299
-244
lines changed

src/hiero_sdk_python/consensus/topic_message.py

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from hiero_sdk_python.timestamp import Timestamp
1010
from hiero_sdk_python.hapi.mirror import consensus_service_pb2 as mirror_proto
11+
from hiero_sdk_python.transaction.transaction_id import TransactionId
1112

1213

1314
class TopicMessageChunk:
@@ -40,7 +41,7 @@ def __init__(
4041
consensus_timestamp: datetime,
4142
message_data: Dict[str, Union[bytes, int]],
4243
chunks: List[TopicMessageChunk],
43-
transaction_id: Optional[str] = None,
44+
transaction_id: Optional[TransactionId] = None,
4445
) -> None:
4546
"""
4647
Args:
@@ -52,14 +53,14 @@ def __init__(
5253
"sequence_number": int
5354
}
5455
chunks (List[TopicMessageChunk]): All individual chunks that form this message.
55-
transaction_id (Optional[str]): The transaction ID string if available.
56+
transaction_id (Optional[Transaction]): The transaction ID if available.
5657
"""
5758
self.consensus_timestamp: datetime = consensus_timestamp
5859
self.contents: Union[bytes, int] = message_data["contents"]
5960
self.running_hash: Union[bytes, int] = message_data["running_hash"]
6061
self.sequence_number: Union[bytes, int] = message_data["sequence_number"]
6162
self.chunks: List[TopicMessageChunk] = chunks
62-
self.transaction_id: Optional[str] = transaction_id
63+
self.transaction_id: Optional[TransactionId] = transaction_id
6364

6465
@classmethod
6566
def of_single(cls, response: mirror_proto.ConsensusTopicResponse) -> "TopicMessage": # type: ignore
@@ -72,13 +73,9 @@ def of_single(cls, response: mirror_proto.ConsensusTopicResponse) -> "TopicMessa
7273
running_hash: Union[bytes, int] = response.runningHash
7374
sequence_number: Union[bytes, int] = chunk.sequence_number
7475

75-
transaction_id: Optional[str] = None
76+
transaction_id: Optional[TransactionId] = None
7677
if response.HasField("chunkInfo") and response.chunkInfo.HasField("initialTransactionID"):
77-
tx_id = response.chunkInfo.initialTransactionID
78-
transaction_id = (
79-
f"{tx_id.shardNum}.{tx_id.realmNum}.{tx_id.accountNum}-"
80-
f"{tx_id.transactionValidStart.seconds}.{tx_id.transactionValidStart.nanos}"
81-
)
78+
transaction_id = TransactionId._from_proto(response.chunkInfo.initialTransactionID)
8279

8380
return cls(
8481
consensus_timestamp,
@@ -102,7 +99,7 @@ def of_many(cls, responses: List[mirror_proto.ConsensusTopicResponse]) -> "Topic
10299

103100
chunks: List[TopicMessageChunk] = []
104101
total_size: int = 0
105-
transaction_id: Optional[str] = None
102+
transaction_id: Optional[TransactionId] = None
106103

107104
for r in sorted_responses:
108105
c = TopicMessageChunk(r)
@@ -116,12 +113,7 @@ def of_many(cls, responses: List[mirror_proto.ConsensusTopicResponse]) -> "Topic
116113
and r.HasField("chunkInfo")
117114
and r.chunkInfo.HasField("initialTransactionID")
118115
):
119-
tx_id = r.chunkInfo.initialTransactionID
120-
transaction_id = (
121-
f"{tx_id.accountID.shardNum, '0'}.{tx_id.accountID.realmNum, '0'}.{tx_id.accountID.accountNum}-"
122-
f"{tx_id.transactionValidStart.seconds}.{tx_id.transactionValidStart.nanos}"
123-
)
124-
print(transaction_id)
116+
transaction_id = TransactionId._from_proto(r.chunkInfo.initialTransactionID)
125117

126118
contents = bytearray(total_size)
127119

src/hiero_sdk_python/consensus/topic_message_submit_transaction.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ def __init__(
4444

4545
self._current_index = 0
4646
self._total_chunks = self.get_required_chunks()
47-
self._transaction_ids: List[TransactionId] = []
47+
self._intial_transaction_id: Optional[TransactionId] = None
48+
self._initial_transaction_id: List[TransactionId] = []
4849
self._signing_keys: List["PrivateKey"] = []
4950

5051
def get_required_chunks(self) -> int:
@@ -96,13 +97,17 @@ def set_chunk_size(self, chunk_size: int) -> "TopicMessageSubmitTransaction":
9697
Set maximum chunk size in bytes.
9798
9899
Args:
99-
chunck_size (int): The size of each chunk in bytes.
100+
chunk_size (int): The size of each chunk in bytes.
100101
101102
Returns:
102103
TopicMessageSubmitTransaction: This transaction instance (for chaining).
103104
"""
104105
self._require_not_frozen()
106+
if chunk_size <= 0:
107+
raise ValueError("chunk_size must be positive")
108+
105109
self.chunk_size = chunk_size
110+
self._total_chunks = self.get_required_chunks()
106111
return self
107112

108113
def set_max_chunks(self, max_chunks: int) -> "TopicMessageSubmitTransaction":
@@ -116,6 +121,9 @@ def set_max_chunks(self, max_chunks: int) -> "TopicMessageSubmitTransaction":
116121
TopicMessageSubmitTransaction: This transaction instance (for chaining).
117122
"""
118123
self._require_not_frozen()
124+
if max_chunks <= 0:
125+
raise ValueError("max_chunks must be positive")
126+
119127
self.max_chunks = max_chunks
120128
return self
121129

@@ -193,10 +201,10 @@ def _build_proto_body(self) -> consensus_submit_message_pb2.ConsensusSubmitMessa
193201
message=chunk_content
194202
)
195203

196-
# Multi-chunk metadata
204+
# Multi-chunk metadata
197205
if self._total_chunks > 1:
198206
body.chunkInfo.CopyFrom(consensus_submit_message_pb2.ConsensusMessageChunkInfo(
199-
initialTransactionID=self.transaction_id._to_proto(),
207+
initialTransactionID=self._intial_transaction_id._to_proto(),
200208
total=self._total_chunks,
201209
number=self._current_index + 1
202210
))
@@ -255,7 +263,9 @@ def freeze_with(self, client: "Client") -> "TopicMessageSubmitTransaction":
255263

256264
for i in range(self.get_required_chunks()):
257265
if i == 0:
258-
# First chunk uses the original transaction ID
266+
if self._intial_transaction_id is None:
267+
self._intial_transaction_id = self.transaction_id
268+
259269
chunk_transaction_id = self.transaction_id
260270
else:
261271
chunk_valid_start = timestamp_pb2.Timestamp(
@@ -268,15 +278,9 @@ def freeze_with(self, client: "Client") -> "TopicMessageSubmitTransaction":
268278
)
269279

270280
self._transaction_ids.append(chunk_transaction_id)
271-
272-
for node in client.network.nodes:
273-
self.node_account_id = node._account_id
274-
transaction_body = self.build_transaction_body()
275-
self._transaction_body_bytes[node._account_id] = transaction_body.SerializeToString()
276-
277-
self.node_account_id = client.network.current_node._account_id
281+
282+
return super().freeze_with(client)
278283

279-
return self
280284

281285
def execute(self, client: "Client"):
282286
self._validate_chunking()
@@ -286,14 +290,13 @@ def execute(self, client: "Client"):
286290

287291
# Multi-chunk transaction - execute all chunks
288292
responses = []
289-
print(self.get_required_chunks())
290293

291294
for chunk_index in range(self.get_required_chunks()):
292295
self._current_index = chunk_index
293296

294297
if self._transaction_ids and chunk_index < len(self._transaction_ids):
295298
self.transaction_id = self._transaction_ids[chunk_index]
296-
299+
297300
self._transaction_body_bytes.clear()
298301
self._signature_map.clear()
299302

src/hiero_sdk_python/query/topic_message_query.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import time
22
import threading
33
from datetime import datetime
4-
from typing import Optional, Callable, Union, Dict, List, Any
4+
from typing import Optional, Callable, Union, Dict, List
55

66
from hiero_sdk_python.hapi.mirror import consensus_service_pb2 as mirror_proto
77
from hiero_sdk_python.hapi.services import basic_types_pb2, timestamp_pb2
88
from hiero_sdk_python.consensus.topic_id import TopicId
99
from hiero_sdk_python.consensus.topic_message import TopicMessage
10+
from hiero_sdk_python.transaction.transaction_id import TransactionId
1011
from hiero_sdk_python.utils.subscription_handle import SubscriptionHandle
1112
from hiero_sdk_python.client.client import Client
1213

@@ -143,21 +144,15 @@ def run_stream():
143144
on_message(msg_obj)
144145
continue
145146

146-
initial_tx_id = response.chunkInfo.initialTransactionID
147-
tx_id_str = (f"{initial_tx_id.accountID.shardNum or '0'}."
148-
f"{initial_tx_id.accountID.realmNum or '0'}."
149-
f"{initial_tx_id.accountID.accountNum}-"
150-
f"{initial_tx_id.transactionValidStart.seconds}."
151-
f"{initial_tx_id.transactionValidStart.nanos}")
147+
initial_tx_id = TransactionId._from_proto(response.chunkInfo.initialTransactionID)
152148

153-
if tx_id_str not in pending_chunks:
154-
pending_chunks[tx_id_str] = []
149+
if initial_tx_id not in pending_chunks:
150+
pending_chunks[initial_tx_id] = []
155151

156-
pending_chunks[tx_id_str].append(response)
152+
pending_chunks[initial_tx_id].append(response)
157153

158-
if len(pending_chunks) == response.chunkInfo.total:
159-
chunk_list = [resp for chunk_list in pending_chunks.values() for resp in chunk_list]
160-
pending_chunks.clear()
154+
if len(pending_chunks[initial_tx_id]) == response.chunkInfo.total:
155+
chunk_list = pending_chunks.pop(initial_tx_id)
161156

162157
msg_obj = TopicMessage.of_many(chunk_list)
163158
on_message(msg_obj)

0 commit comments

Comments
 (0)