Fix CLI formatting, standardize ticker names to 32 chars
This commit is contained in:
parent
75dbaf176f
commit
4c70fbd27a
3 changed files with 39 additions and 3 deletions
|
|
@ -7,6 +7,8 @@ from .formatter import (
|
||||||
color_yellow,
|
color_yellow,
|
||||||
color_cyan,
|
color_cyan,
|
||||||
format_currency_color,
|
format_currency_color,
|
||||||
|
format_currency_color_padded,
|
||||||
|
truncate_ticker,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -38,11 +40,12 @@ def main():
|
||||||
print("-" * 90)
|
print("-" * 90)
|
||||||
|
|
||||||
for trade in kalshi.trades:
|
for trade in kalshi.trades:
|
||||||
pnl_str = format_currency_color(trade["pnl_no_fees"], no_color)
|
pnl_str = format_currency_color_padded(trade["pnl_no_fees"], 14, no_color)
|
||||||
fees = trade["open_fees"] + trade["close_fees"]
|
fees = trade["open_fees"] + trade["close_fees"]
|
||||||
|
ticker_display = truncate_ticker(trade["ticker"])
|
||||||
print(
|
print(
|
||||||
f"{trade['ticker']:<32} | {trade['side']:<4} | {trade['qty']:<6.2f} | "
|
f"{ticker_display:<32} | {trade['side']:<4} | {trade['qty']:<6.2f} | "
|
||||||
f"${trade['entry']:<5.2f} | ${trade['exit']:<5.2f} | {pnl_str:<14} | ${fees:<5.2f}"
|
f"${trade['entry']:<5.2f} | ${trade['exit']:<5.2f} | {pnl_str} | ${fees:<5.2f}"
|
||||||
)
|
)
|
||||||
|
|
||||||
print("-" * 90)
|
print("-" * 90)
|
||||||
|
|
|
||||||
|
|
@ -37,3 +37,17 @@ def format_currency_color(value, no_color=False):
|
||||||
"""Returns a signed, colorized string based on profit or loss status."""
|
"""Returns a signed, colorized string based on profit or loss status."""
|
||||||
val_str = f"${value:+.2f}"
|
val_str = f"${value:+.2f}"
|
||||||
return color_green(val_str, no_color) if value >= 0 else color_red(val_str, no_color)
|
return color_green(val_str, no_color) if value >= 0 else color_red(val_str, no_color)
|
||||||
|
|
||||||
|
|
||||||
|
def format_currency_color_padded(value, width, no_color=False):
|
||||||
|
"""Returns a signed, colorized string padded to specified width before coloring."""
|
||||||
|
val_str = f"${value:+.2f}"
|
||||||
|
padded_str = f"{val_str:<{width}}"
|
||||||
|
return color_green(padded_str, no_color) if value >= 0 else color_red(padded_str, no_color)
|
||||||
|
|
||||||
|
|
||||||
|
def truncate_ticker(ticker, max_len=32):
|
||||||
|
"""Truncates ticker to max_len, using ellipsis if longer than 29 chars."""
|
||||||
|
if len(ticker) > 29:
|
||||||
|
return ticker[:29] + "..."
|
||||||
|
return ticker
|
||||||
|
|
|
||||||
|
|
@ -66,3 +66,22 @@ def test_cli_missing_file():
|
||||||
)
|
)
|
||||||
assert result.returncode != 0
|
assert result.returncode != 0
|
||||||
assert "not found" in result.stderr.lower() or "error" in result.stderr.lower()
|
assert "not found" in result.stderr.lower() or "error" in result.stderr.lower()
|
||||||
|
|
||||||
|
|
||||||
|
def test_cli_ticker_truncation(tmp_path):
|
||||||
|
csv_file = tmp_path / "long_ticker.csv"
|
||||||
|
csv_file.write_text(
|
||||||
|
"type,quantity_fp,market_ticker,side,entry_price_dollars,exit_price_dollars,"
|
||||||
|
"open_fees_dollars,close_fees_dollars,realized_pnl_without_fees_dollars,"
|
||||||
|
"realized_pnl_with_fees_dollars,close_timestamp,open_timestamp\n"
|
||||||
|
"trade,1.00,VERYLONGTICKERNAME-THAT-EXCEEDS-THIRTY-CHARS,yes,0.50,1.00,"
|
||||||
|
"0.01,0.02,0.50,0.47,2026-07-07T12:19:57-04:00,2026-07-07T09:48:19-04:00\n"
|
||||||
|
)
|
||||||
|
result = subprocess.run(
|
||||||
|
[sys.executable, "-m", "kalshi_csv.cli", str(csv_file), "--no-color"],
|
||||||
|
capture_output=True,
|
||||||
|
text=True,
|
||||||
|
)
|
||||||
|
assert result.returncode == 0
|
||||||
|
assert "VERYLONGTICKERNAME-THAT-EXCEE..." in result.stdout
|
||||||
|
assert "VERYLONGTICKERNAME-THAT-EXCEEDS-THIRTY-CHARS" not in result.stdout
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue