1- """
2- hiero_sdk_python.tokens.token_relationship.py
3- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1+ """hiero_sdk_python.tokens.token_relationship.py
42
53Provides TokenRelationship, a dataclass modeling an account’s relationship to a token,
64including ID, symbol, balance, KYC status, freeze status, decimals, and auto-association flag.
5+ This class is primarily used for parsing and representing data returned by queries like
6+ CryptoGetAccountInfoQuery.
77"""
88from dataclasses import dataclass
99from typing import Optional
1010
1111from hiero_sdk_python .hapi .services .basic_types_pb2 import (
12- TokenRelationship as TokenRelationshipProto ,
13- TokenFreezeStatus as TokenFreezeStatusProto ,
14- TokenKycStatus as TokenKycStatusProto ,
12+ TokenRelationship as TokenRelationshipProto ,
13+ TokenFreezeStatus as TokenFreezeStatusProto ,
14+ TokenKycStatus as TokenKycStatusProto ,
1515)
1616from hiero_sdk_python .tokens .token_freeze_status import TokenFreezeStatus
1717from hiero_sdk_python .tokens .token_id import TokenId
@@ -43,6 +43,20 @@ class TokenRelationship:
4343
4444 @classmethod
4545 def _from_proto (cls , proto : Optional [TokenRelationshipProto ]) -> 'TokenRelationship' :
46+ """Creates a TokenRelationship instance from a protobuf TokenRelationship message.
47+
48+ Parses the protobuf fields, converting enum types (KYC, Freeze status) and
49+ TokenId objects into their corresponding Python representations.
50+
51+ Args:
52+ proto (Optional[TokenRelationshipProto]): The protobuf TokenRelationship message.
53+
54+ Returns:
55+ TokenRelationship: The corresponding Python dataclass instance.
56+
57+ Raises:
58+ ValueError: If the input `proto` object is None.
59+ """
4660 if proto is None :
4761 raise ValueError ("Token relationship proto is None" )
4862
@@ -51,6 +65,7 @@ def _from_proto(cls, proto: Optional[TokenRelationshipProto]) -> 'TokenRelations
5165 if proto .tokenId
5266 else None
5367 )
68+ # Convert HAPI protobuf enums to SDK enums
5469 kyc_status : TokenKycStatus = TokenKycStatus ._from_proto (proto .kycStatus )
5570 freeze_status : TokenFreezeStatus = TokenFreezeStatus ._from_proto (proto .freezeStatus )
5671
@@ -65,12 +80,22 @@ def _from_proto(cls, proto: Optional[TokenRelationshipProto]) -> 'TokenRelations
6580 )
6681
6782 def _to_proto (self ) -> TokenRelationshipProto :
83+ """Converts this TokenRelationship instance into its protobuf representation.
84+
85+ Converts SDK enums (TokenFreezeStatus, TokenKycStatus) back into their
86+ HAPI protobuf integer enum values for transmission.
87+
88+ Returns:
89+ TokenRelationshipProto: The corresponding protobuf message.
90+ """
91+ # Determine protobuf enum value for freeze status
6892 freeze_status = TokenFreezeStatusProto .FreezeNotApplicable
6993 if self .freeze_status == TokenFreezeStatus .FROZEN :
7094 freeze_status = TokenFreezeStatusProto .Frozen
7195 elif self .freeze_status == TokenFreezeStatus .UNFROZEN :
7296 freeze_status = TokenFreezeStatusProto .Unfrozen
7397
98+ # Determine protobuf enum value for KYC status
7499 kyc_status = TokenKycStatusProto .KycNotApplicable
75100 if self .kyc_status == TokenKycStatus .GRANTED :
76101 kyc_status = TokenKycStatusProto .Granted
@@ -91,4 +116,4 @@ def _to_proto(self) -> TokenRelationshipProto:
91116 if self .automatic_association is not None :
92117 proto .automatic_association = self .automatic_association
93118
94- return proto
119+ return proto
0 commit comments