herolib_python/lib/clients/stellar/model.py
2025-08-05 15:15:36 +02:00

71 lines
2.1 KiB
Python

from dataclasses import dataclass, field, asdict
from typing import List, Optional
from stellar_sdk import Keypair, Server, StrKey
import json
import redis
@dataclass
class StellarAsset:
type: str
balance: float
issuer: str = ""
def format_balance(self):
balance_float = float(self.balance)
formatted_balance = f"{balance_float:,.2f}"
if '.' in formatted_balance:
formatted_balance = formatted_balance.rstrip('0').rstrip('.')
return formatted_balance
def md(self):
formatted_balance = self.format_balance()
return f"- **{self.type}**: {formatted_balance}"
@dataclass
class StellarAccount:
owner: str
priv_key: str = ""
public_key: str = ""
assets: List[StellarAsset] = field(default_factory=list)
name: str = ""
description: str = ""
comments: List[str] = field(default_factory=list)
cat: str = ""
question: str = ""
def md(self):
result = [
f"# Stellar Account: {self.name or 'Unnamed'}","",
f"**Public Key**: {self.public_key}",
f"**Cat**: {self.cat}",
f"**Description**: {self.description[:60]}..." if self.description else "**Description**: None",
f"**Question**: {self.question}" if self.question else "**Question**: None",
"",
"## Assets:",""
]
for asset in self.assets:
result.append(asset.md())
if len(self.assets) == 0:
result.append("- No assets")
result.append("")
if self.comments:
result.append("## Comments:")
for comment in self.comments:
if '\n' in comment:
multiline_comment = "\n ".join(comment.split('\n'))
result.append(f"- {multiline_comment}")
else:
result.append(f"- {comment}")
return "\n".join(result)
def balance_str(self) -> str:
out=[]
for asset in self.assets:
out.append(f"{asset.type}:{float(asset.balance):,.0f}")
return " ".join(out)