Fix CLI formatting, standardize ticker names to 32 chars

This commit is contained in:
mark 2026-07-22 12:26:37 -04:00
commit 4c70fbd27a
3 changed files with 39 additions and 3 deletions

View file

@ -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)

View file

@ -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

View file

@ -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