Fix lint debt and make CI gates honest
CI / skip-ci-check (pull_request) Successful in 19s
CI / secret-scan (pull_request) Successful in 19s
CI / python-ci (pull_request) Successful in 2m38s

- ruff: fix all 328 errors (autofix + manual); move config to [tool.ruff.lint]
- mypy: fix all errors (annotations, nullable-column guards, stale kwargs
  in weekly report caller)
- black: reformat src/tests so black --check passes
- CI: remove `|| true` from ruff/black/mypy/pytest steps in both
  .gitea and .github workflows; install project deps and add mypy
  step in gitea python-ci so gates actually run
- docs: move 14 root status/guide markdown files into docs/, update links
This commit is contained in:
2026-07-26 15:41:07 -04:00
parent 6e5e69ed10
commit 5df21d82f4
42 changed files with 518 additions and 602 deletions
+21 -17
View File
@@ -1,27 +1,28 @@
"""Tests for analytics module."""
import pytest
from datetime import date, timedelta
from decimal import Decimal
from pote.analytics.returns import ReturnCalculator
import pytest
from pote.analytics.benchmarks import BenchmarkComparison
from pote.analytics.metrics import PerformanceMetrics
from pote.db.models import Official, Security, Trade, Price
from pote.analytics.returns import ReturnCalculator
from pote.db.models import Price, Security, Trade
@pytest.fixture
def sample_prices(test_db_session, sample_security):
"""Create sample price data for testing."""
session = test_db_session
# Add SPY (benchmark) prices
spy = Security(ticker="SPY", name="SPDR S&P 500 ETF")
session.add(spy)
session.flush()
base_date = date(2024, 1, 1)
# Create SPY prices
for i in range(100):
price = Price(
@@ -34,7 +35,7 @@ def sample_prices(test_db_session, sample_security):
volume=1000000,
)
session.add(price)
# Create prices for sample_security (AAPL)
for i in range(100):
price = Price(
@@ -47,7 +48,7 @@ def sample_prices(test_db_session, sample_security):
volume=50000000,
)
session.add(price)
session.commit()
return session
@@ -80,7 +81,9 @@ def test_return_calculator_basic(test_db_session, sample_official, sample_securi
assert "exit_price" in result
def test_return_calculator_sell_trade(test_db_session, sample_official, sample_security, sample_prices):
def test_return_calculator_sell_trade(
test_db_session, sample_official, sample_security, sample_prices
):
session = test_db_session
"""Test return calculation for sell trade."""
trade = Trade(
@@ -130,7 +133,7 @@ def test_benchmark_comparison(test_db_session, sample_official, sample_security,
"""Test benchmark comparison."""
# Create trade and SPY security
spy = session.query(Security).filter_by(ticker="SPY").first()
trade = Trade(
official_id=sample_official.id,
security_id=spy.id,
@@ -154,12 +157,14 @@ def test_benchmark_comparison(test_db_session, sample_official, sample_security,
assert "beat_market" in result
def test_performance_metrics_official(test_db_session, sample_official, sample_security, sample_prices):
def test_performance_metrics_official(
test_db_session, sample_official, sample_security, sample_prices
):
session = test_db_session
"""Test official performance metrics."""
# Create multiple trades
spy = session.query(Security).filter_by(ticker="SPY").first()
for i in range(3):
trade = Trade(
official_id=sample_official.id,
@@ -171,7 +176,7 @@ def test_performance_metrics_official(test_db_session, sample_official, sample_s
value_max=Decimal("50000"),
)
session.add(trade)
session.commit()
# Get performance metrics
@@ -187,7 +192,7 @@ def test_multiple_windows(test_db_session, sample_official, sample_security, sam
session = test_db_session
"""Test calculating returns for multiple windows."""
spy = session.query(Security).filter_by(ticker="SPY").first()
trade = Trade(
official_id=sample_official.id,
security_id=spy.id,
@@ -231,7 +236,7 @@ def test_sector_analysis(test_db_session, sample_official, sample_prices):
value_max=Decimal("50000"),
)
session.add(trade)
session.commit()
metrics = PerformanceMetrics(session)
@@ -257,7 +262,7 @@ def test_timing_analysis(test_db_session, sample_official, sample_security):
value_max=Decimal("50000"),
)
session.add(trade)
session.commit()
metrics = PerformanceMetrics(session)
@@ -265,4 +270,3 @@ def test_timing_analysis(test_db_session, sample_official, sample_security):
assert "avg_disclosure_lag_days" in timing
assert timing["avg_disclosure_lag_days"] > 0