Skip to content

Commit b7f8b99

Browse files
feat: added stringy function for the custom royalty fee (#986) (#1001)
Signed-off-by: HusseinYasser <husseinyasser388@gmail.com>
1 parent aa0e9f0 commit b7f8b99

File tree

4 files changed

+76
-9
lines changed

4 files changed

+76
-9
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ This changelog is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.
1717
- Add inactivity bot workflow to unassign stale issue assignees (#952)
1818
- Made custom fraction fee end to end
1919
- Added Acceptance Criteria section to Good First Issue template for better contributor guidance (#997)
20+
- Added __str__() to CustomRoyaltyFee and updated examples and tests accordingly (#986)
2021

2122
### Changed
2223

examples/tokens/custom_royalty_fee.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,7 @@ def custom_royalty_fee():
2020
fee_collector_account_id=AccountId(0, 0, 456),
2121
all_collectors_are_exempt=True,
2222
)
23-
print("\nCustomRoyaltyFee:")
24-
print(f"Numerator: {royalty_fee.numerator}")
25-
print(f"Denominator: {royalty_fee.denominator}")
26-
print(f"Fallback Fee Amount: {royalty_fee.fallback_fee.amount if royalty_fee.fallback_fee is not None else 'None'}")
27-
print(f"Fallback Fee Denominating Token ID: {royalty_fee.fallback_fee.denominating_token_id if royalty_fee.fallback_fee is not None else 'None'}")
28-
print(f"Fee Collector Account ID: {royalty_fee.fee_collector_account_id}")
29-
print(f"All Collectors Exempt: {royalty_fee.all_collectors_are_exempt}")
23+
print(royalty_fee)
3024

3125
# Convert to protobuf
3226
royalty_fee_proto = royalty_fee._to_proto()

src/hiero_sdk_python/tokens/custom_royalty_fee.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,4 +150,27 @@ def _from_proto(cls, proto_fee) -> "CustomRoyaltyFee":
150150
fallback_fee=fallback_fee,
151151
fee_collector_account_id=fee_collector_account_id,
152152
all_collectors_are_exempt=proto_fee.all_collectors_are_exempt
153-
)
153+
)
154+
155+
def __str__(self) -> str:
156+
"""Returns a string representation of the CustomRoyaltyFee.
157+
158+
Includes the numerator, denominator, fallback fee details (if any),
159+
fee collector account ID, and exemption status.
160+
161+
Returns:
162+
str: A human-readable string representation of the royalty fee.
163+
"""
164+
fallback_fee_amount = self.fallback_fee.amount if self.fallback_fee else "None"
165+
fallback_fee_token_id = self.fallback_fee.denominating_token_id if self.fallback_fee else "None"
166+
167+
lines = [
168+
f"CustomRoyaltyFee:",
169+
f" Numerator = {self.numerator}",
170+
f" Denominator = {self.denominator}",
171+
f" Fallback Fee Amount = {fallback_fee_amount}",
172+
f" Fallback Fee Denominating Token ID = {fallback_fee_token_id}",
173+
f" Fee Collector Account ID = {self.fee_collector_account_id}",
174+
f" All Collectors Are Exempt = {self.all_collectors_are_exempt}",
175+
]
176+
return "\n".join(lines)

tests/unit/test_custom_fee.py

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,4 +150,53 @@ def test_custom_royalty_fee():
150150
assert new_fee.all_collectors_are_exempt is True
151151
assert isinstance(new_fee.fallback_fee, CustomFixedFee)
152152
assert new_fee.fallback_fee.amount == 50
153-
assert new_fee.fallback_fee.denominating_token_id == TokenId(0, 0, 789)
153+
assert new_fee.fallback_fee.denominating_token_id == TokenId(0, 0, 789)
154+
155+
@pytest.mark.parametrize(
156+
"custom_royalty_fee, expected_str",
157+
[
158+
(
159+
CustomRoyaltyFee(
160+
numerator=3,
161+
denominator=20,
162+
fallback_fee=None,
163+
fee_collector_account_id=None,
164+
all_collectors_are_exempt=True,
165+
),
166+
"\n".join([
167+
"CustomRoyaltyFee:",
168+
" Numerator = 3",
169+
" Denominator = 20",
170+
" Fallback Fee Amount = None",
171+
" Fallback Fee Denominating Token ID = None",
172+
" Fee Collector Account ID = None",
173+
" All Collectors Are Exempt = True",
174+
])
175+
),
176+
(
177+
CustomRoyaltyFee(
178+
numerator=7,
179+
denominator=100,
180+
fallback_fee=CustomFixedFee(
181+
amount=30,
182+
denominating_token_id=TokenId(0, 0, 123),
183+
),
184+
fee_collector_account_id=AccountId(0, 0, 456),
185+
all_collectors_are_exempt=False,
186+
),
187+
"\n".join([
188+
"CustomRoyaltyFee:",
189+
" Numerator = 7",
190+
" Denominator = 100",
191+
" Fallback Fee Amount = 30",
192+
" Fallback Fee Denominating Token ID = 0.0.123",
193+
" Fee Collector Account ID = 0.0.456",
194+
" All Collectors Are Exempt = False",
195+
])
196+
)
197+
]
198+
)
199+
def test_custom_royalty_fee_str(custom_royalty_fee: CustomRoyaltyFee, expected_str: str):
200+
"""Test the string representation of CustomRoyaltyFee."""
201+
fee_str = str(custom_royalty_fee)
202+
assert fee_str == expected_str

0 commit comments

Comments
 (0)