summaryrefslogtreecommitdiff
path: root/services/portfolio-manager
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-01 17:57:43 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-01 17:57:43 +0900
commit61b2a193e79d74783bb1ad4c3a8ccb6ead0f24c0 (patch)
tree374ad93df6d393715809192ff40b1754d56de39b /services/portfolio-manager
parent13a9b2c80bb3eb1353cf2d49bdbf7d0dbd858ccc (diff)
fix: lint cleanup after medium priority tasks
Diffstat (limited to 'services/portfolio-manager')
-rw-r--r--services/portfolio-manager/src/portfolio_manager/main.py9
-rw-r--r--services/portfolio-manager/tests/test_portfolio.py112
2 files changed, 79 insertions, 42 deletions
diff --git a/services/portfolio-manager/src/portfolio_manager/main.py b/services/portfolio-manager/src/portfolio_manager/main.py
index 87e4c64..a6823ae 100644
--- a/services/portfolio-manager/src/portfolio_manager/main.py
+++ b/services/portfolio-manager/src/portfolio_manager/main.py
@@ -1,7 +1,6 @@
"""Portfolio Manager Service entry point."""
import asyncio
-from decimal import Decimal
from shared.broker import RedisBroker
from shared.db import Database
@@ -111,15 +110,11 @@ async def run() -> None:
await broker.ack(ORDERS_STREAM, GROUP, msg_id)
except Exception as exc:
log.error("pending_process_failed", error=str(exc), msg_id=msg_id)
- metrics.errors_total.labels(
- service="portfolio-manager", error_type="processing"
- ).inc()
+ metrics.errors_total.labels(service="portfolio-manager", error_type="processing").inc()
try:
while True:
- messages = await broker.read_group(
- ORDERS_STREAM, GROUP, CONSUMER, count=10, block=1000
- )
+ messages = await broker.read_group(ORDERS_STREAM, GROUP, CONSUMER, count=10, block=1000)
for msg_id, msg in messages:
try:
event = Event.from_dict(msg)
diff --git a/services/portfolio-manager/tests/test_portfolio.py b/services/portfolio-manager/tests/test_portfolio.py
index 5a7ac64..768e071 100644
--- a/services/portfolio-manager/tests/test_portfolio.py
+++ b/services/portfolio-manager/tests/test_portfolio.py
@@ -63,19 +63,31 @@ def test_realized_pnl_on_sell() -> None:
tracker = PortfolioTracker()
# Buy at 50000
- tracker.apply_order(Order(
- signal_id="s1", symbol="BTCUSDT", side=OrderSide.BUY,
- type=OrderType.MARKET, price=Decimal("50000"),
- quantity=Decimal("0.1"), status=OrderStatus.FILLED,
- ))
+ tracker.apply_order(
+ Order(
+ signal_id="s1",
+ symbol="BTCUSDT",
+ side=OrderSide.BUY,
+ type=OrderType.MARKET,
+ price=Decimal("50000"),
+ quantity=Decimal("0.1"),
+ status=OrderStatus.FILLED,
+ )
+ )
assert tracker.realized_pnl == Decimal("0")
# Sell at 55000 — profit of 500
- tracker.apply_order(Order(
- signal_id="s2", symbol="BTCUSDT", side=OrderSide.SELL,
- type=OrderType.MARKET, price=Decimal("55000"),
- quantity=Decimal("0.1"), status=OrderStatus.FILLED,
- ))
+ tracker.apply_order(
+ Order(
+ signal_id="s2",
+ symbol="BTCUSDT",
+ side=OrderSide.SELL,
+ type=OrderType.MARKET,
+ price=Decimal("55000"),
+ quantity=Decimal("0.1"),
+ status=OrderStatus.FILLED,
+ )
+ )
assert tracker.realized_pnl == Decimal("500")
@@ -83,16 +95,28 @@ def test_realized_pnl_on_loss() -> None:
"""Selling at a loss should track negative realized PnL."""
tracker = PortfolioTracker()
- tracker.apply_order(Order(
- signal_id="s1", symbol="BTCUSDT", side=OrderSide.BUY,
- type=OrderType.MARKET, price=Decimal("50000"),
- quantity=Decimal("0.1"), status=OrderStatus.FILLED,
- ))
- tracker.apply_order(Order(
- signal_id="s2", symbol="BTCUSDT", side=OrderSide.SELL,
- type=OrderType.MARKET, price=Decimal("45000"),
- quantity=Decimal("0.1"), status=OrderStatus.FILLED,
- ))
+ tracker.apply_order(
+ Order(
+ signal_id="s1",
+ symbol="BTCUSDT",
+ side=OrderSide.BUY,
+ type=OrderType.MARKET,
+ price=Decimal("50000"),
+ quantity=Decimal("0.1"),
+ status=OrderStatus.FILLED,
+ )
+ )
+ tracker.apply_order(
+ Order(
+ signal_id="s2",
+ symbol="BTCUSDT",
+ side=OrderSide.SELL,
+ type=OrderType.MARKET,
+ price=Decimal("45000"),
+ quantity=Decimal("0.1"),
+ status=OrderStatus.FILLED,
+ )
+ )
assert tracker.realized_pnl == Decimal("-500")
@@ -101,24 +125,42 @@ def test_realized_pnl_accumulates() -> None:
tracker = PortfolioTracker()
# Buy 0.2 at 50000
- tracker.apply_order(Order(
- signal_id="s1", symbol="BTCUSDT", side=OrderSide.BUY,
- type=OrderType.MARKET, price=Decimal("50000"),
- quantity=Decimal("0.2"), status=OrderStatus.FILLED,
- ))
+ tracker.apply_order(
+ Order(
+ signal_id="s1",
+ symbol="BTCUSDT",
+ side=OrderSide.BUY,
+ type=OrderType.MARKET,
+ price=Decimal("50000"),
+ quantity=Decimal("0.2"),
+ status=OrderStatus.FILLED,
+ )
+ )
# Sell 0.1 at 55000 -> +500
- tracker.apply_order(Order(
- signal_id="s2", symbol="BTCUSDT", side=OrderSide.SELL,
- type=OrderType.MARKET, price=Decimal("55000"),
- quantity=Decimal("0.1"), status=OrderStatus.FILLED,
- ))
+ tracker.apply_order(
+ Order(
+ signal_id="s2",
+ symbol="BTCUSDT",
+ side=OrderSide.SELL,
+ type=OrderType.MARKET,
+ price=Decimal("55000"),
+ quantity=Decimal("0.1"),
+ status=OrderStatus.FILLED,
+ )
+ )
# Sell 0.1 at 60000 -> +1000
- tracker.apply_order(Order(
- signal_id="s3", symbol="BTCUSDT", side=OrderSide.SELL,
- type=OrderType.MARKET, price=Decimal("60000"),
- quantity=Decimal("0.1"), status=OrderStatus.FILLED,
- ))
+ tracker.apply_order(
+ Order(
+ signal_id="s3",
+ symbol="BTCUSDT",
+ side=OrderSide.SELL,
+ type=OrderType.MARKET,
+ price=Decimal("60000"),
+ quantity=Decimal("0.1"),
+ status=OrderStatus.FILLED,
+ )
+ )
assert tracker.realized_pnl == Decimal("1500")