71 lines
2.1 KiB
Python
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)
|