fix: ruff lint and format fixes for persist assessment

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
pselamy
2026-06-14 19:18:31 +00:00
co-authored by Claude Opus 4.6
parent 15ed793817
commit a8ad512eec
4 changed files with 12 additions and 27 deletions
+3 -1
View File
@@ -165,7 +165,9 @@ class TelegramSettings(BaseSettings):
class DetectorSettings(BaseSettings): class DetectorSettings(BaseSettings):
"""Risk-scorer / detector tuning.""" """Risk-scorer / detector tuning."""
model_config = SettingsConfigDict(env_prefix="DETECTOR_", env_file=".env", env_file_encoding="utf-8", extra="ignore") model_config = SettingsConfigDict(
env_prefix="DETECTOR_", env_file=".env", env_file_encoding="utf-8", extra="ignore"
)
alert_threshold: float = Field( alert_threshold: float = Field(
default=0.80, default=0.80,
+3 -7
View File
@@ -537,7 +537,7 @@ class Pipeline:
result.success_count + result.failure_count, result.success_count + result.failure_count,
) )
async def _persist_assessment(self, assessment: "RiskAssessment") -> None: async def _persist_assessment(self, assessment: RiskAssessment) -> None:
"""Write the assessment row. Best-effort; never raises.""" """Write the assessment row. Best-effort; never raises."""
if not self._db_manager: if not self._db_manager:
return return
@@ -574,9 +574,7 @@ class Pipeline:
volume_impact=( volume_impact=(
_D(str(round(size_sig.volume_impact, 4))) if size_sig is not None else None _D(str(round(size_sig.volume_impact, 4))) if size_sig is not None else None
), ),
book_impact=( book_impact=(_D(str(round(size_sig.book_impact, 4))) if size_sig is not None else None),
_D(str(round(size_sig.book_impact, 4))) if size_sig is not None else None
),
wallet_age_hours=wallet_age, wallet_age_hours=wallet_age,
should_alert=assessment.should_alert, should_alert=assessment.should_alert,
threshold_at_eval=_D(str(round(self._settings.detector.alert_threshold, 3))), threshold_at_eval=_D(str(round(self._settings.detector.alert_threshold, 3))),
@@ -586,9 +584,7 @@ class Pipeline:
repo = RiskAssessmentRepository(session) repo = RiskAssessmentRepository(session)
await repo.insert(dto) await repo.insert(dto)
except Exception as e: except Exception as e:
logger.warning( logger.warning("Failed to persist risk assessment %s: %s", assessment.assessment_id, e)
"Failed to persist risk assessment %s: %s", assessment.assessment_id, e
)
async def run(self) -> None: async def run(self) -> None:
"""Start the pipeline and run until interrupted. """Start the pipeline and run until interrupted.
@@ -585,9 +585,7 @@ class RiskAssessmentRepository:
async def get_by_assessment_id(self, assessment_id: str) -> RiskAssessmentDTO | None: async def get_by_assessment_id(self, assessment_id: str) -> RiskAssessmentDTO | None:
result = await self.session.execute( result = await self.session.execute(
select(RiskAssessmentModel).where( select(RiskAssessmentModel).where(RiskAssessmentModel.assessment_id == assessment_id)
RiskAssessmentModel.assessment_id == assessment_id
)
) )
model = result.scalar_one_or_none() model = result.scalar_one_or_none()
if model is None: if model is None:
+5 -16
View File
@@ -24,7 +24,6 @@ from polymarket_insider_tracker.pipeline import Pipeline
from polymarket_insider_tracker.storage.database import DatabaseManager from polymarket_insider_tracker.storage.database import DatabaseManager
from polymarket_insider_tracker.storage.models import Base, RiskAssessmentModel from polymarket_insider_tracker.storage.models import Base, RiskAssessmentModel
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# Fixtures # Fixtures
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
@@ -63,9 +62,7 @@ async def db_manager(async_engine):
manager._sync_engine = None manager._sync_engine = None
manager._async_engine = async_engine manager._async_engine = async_engine
manager._sync_session_factory = None manager._sync_session_factory = None
manager._async_session_factory = async_sessionmaker( manager._async_session_factory = async_sessionmaker(bind=async_engine, expire_on_commit=False)
bind=async_engine, expire_on_commit=False
)
return manager return manager
@@ -139,9 +136,7 @@ class TestPersistAssessment:
): ):
"""Assessments with should_alert=False must still hit the DB; no dispatch.""" """Assessments with should_alert=False must still hit the DB; no dispatch."""
assessment = _make_assessment(sample_trade, should_alert=False, score=0.45) assessment = _make_assessment(sample_trade, should_alert=False, score=0.45)
pipeline = _build_pipeline( pipeline = _build_pipeline(mock_settings, db_manager=db_manager, assessment=assessment)
mock_settings, db_manager=db_manager, assessment=assessment
)
await pipeline._score_and_alert(SignalBundle(trade_event=sample_trade)) await pipeline._score_and_alert(SignalBundle(trade_event=sample_trade))
@@ -160,21 +155,15 @@ class TestPersistAssessment:
assert pipeline.stats.alerts_sent == 0 assert pipeline.stats.alerts_sent == 0
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_persistence_failure_does_not_block_dispatch( async def test_persistence_failure_does_not_block_dispatch(self, mock_settings, sample_trade):
self, mock_settings, sample_trade
):
"""If repo.insert blows up, the alert pipeline still ships the alert.""" """If repo.insert blows up, the alert pipeline still ships the alert."""
assessment = _make_assessment(sample_trade, should_alert=True, score=0.92) assessment = _make_assessment(sample_trade, should_alert=True, score=0.92)
# db_manager whose get_async_session raises -> _persist_assessment swallows it # db_manager whose get_async_session raises -> _persist_assessment swallows it
broken_db = MagicMock() broken_db = MagicMock()
broken_db.get_async_session = MagicMock( broken_db.get_async_session = MagicMock(side_effect=RuntimeError("DB connection failed"))
side_effect=RuntimeError("DB connection failed")
)
pipeline = _build_pipeline( pipeline = _build_pipeline(mock_settings, db_manager=broken_db, assessment=assessment)
mock_settings, db_manager=broken_db, assessment=assessment
)
await pipeline._score_and_alert(SignalBundle(trade_event=sample_trade)) await pipeline._score_and_alert(SignalBundle(trade_event=sample_trade))