diff --git a/tasks/market_tasks.py b/tasks/market_tasks.py index e57fd79..12c1da8 100644 --- a/tasks/market_tasks.py +++ b/tasks/market_tasks.py @@ -32,26 +32,20 @@ def compute_daily_market_aggregates_task(self: Any) -> dict[str, Any]: celery_logger.info("Starting daily market aggregator (task=%s)", self.request.id) per_listing = market_aggregator.update_per_listing_trend(engine) aggregates = market_aggregator.compute_aggregate_snapshot(engine) + # Materialise only the count — the row objects came from a session + # that's already closed, so accessing any lazy-loaded attribute would + # raise DetachedInstanceError. The aggregator's own logger lines have + # already printed the per-band stats. + aggregates_count = len(aggregates) result = { "status": "ok", "per_listing": per_listing, - "aggregates": [ - { - "snapshot_date": a.snapshot_date.isoformat(), - "listing_type": a.listing_type, - "min_bedrooms": a.min_bedrooms, - "max_bedrooms": a.max_bedrooms, - "listing_count": a.listing_count, - "median_total_price": a.median_total_price, - "median_qmprice": a.median_qmprice, - } - for a in aggregates - ], + "aggregates_written": aggregates_count, } celery_logger.info( - "Daily market aggregator complete: rent_updated=%s buy_updated=%s aggregates=%s", + "Daily market aggregator complete: rent_updated=%s buy_updated=%s aggregates=%d", per_listing.get("rent_updated"), per_listing.get("buy_updated"), - len(aggregates), + aggregates_count, ) return result