No description
Find a file
Viktor Barzin 01a940b9b6 wrongmove: fix DetachedInstanceError in daily market aggregator task
`compute_aggregate_snapshot` returns ORM rows that were created inside
a `with Session(engine)` block — by the time the Celery task tries to
serialise their attributes into the result dict the session has closed,
triggering SQLAlchemy's DetachedInstanceError. Combined with acks_late
this caused the task to be redelivered repeatedly (4× in the first
manual trigger).

Fix: drop the per-row dict-serialisation in the task return — keep just
`aggregates_written: int`. The per-band stats are already logged by the
aggregator's own info-level lines, so no observability is lost.

Caught when manually firing the task on prod to seed today's snapshot
before the 04:00 UTC daily fire. Aggregator itself ran fine (the rows
were written before the session closed); only the post-return access
was broken.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 12:53:26 +00:00
.claude remove local agents, replaced by global dev team [ci skip] 2026-03-23 00:17:54 +02:00
.github/workflows adding ruff auto check for pull requests as well as fixing all ruff errors (#1) 2025-09-14 19:40:18 +01:00
.woodpecker wrongmove: write VITE_MAPBOX_TOKEN to .env.production in CI (replaces broken build_args) 2026-05-15 22:10:25 +00:00
alembic wrongmove: daily price-trend monitoring (per-listing badge + macro strip) 2026-05-16 12:02:25 +00:00
api wrongmove: daily price-trend monitoring (per-listing badge + macro strip) 2026-05-16 12:02:25 +00:00
cli Add debug CLI listings subcommand (list, detail, stream, refresh) 2026-02-22 15:17:56 +00:00
config Add configurable request timeout and retry on TimeoutError 2026-02-21 17:50:36 +00:00
docs docs: add UI/UX redesign implementation plan 2026-02-28 15:46:30 +00:00
frontend wrongmove: daily price-trend monitoring (per-listing badge + macro strip) 2026-05-16 12:02:25 +00:00
grafana Add Server-Timing headers to all API endpoints for per-request latency breakdown 2026-02-23 21:30:51 +00:00
k8s wrongmove: round-3 fix sweep — scrape pipeline, BUY tab, filter URL state, render hygiene, map polish 2026-05-10 22:27:29 +00:00
models wrongmove: daily price-trend monitoring (per-listing badge + macro strip) 2026-05-16 12:02:25 +00:00
rec Add configurable request timeout and retry on TimeoutError 2026-02-21 17:50:36 +00:00
repositories wrongmove: add "seen" soft-hide decision with price-aware resurfacing 2026-05-16 11:07:44 +00:00
scripts Add setup-test-venv.sh for running tests without Docker [ci skip] 2026-02-14 11:44:49 +00:00
services wrongmove: daily price-trend monitoring (per-listing badge + macro strip) 2026-05-16 12:02:25 +00:00
tasks wrongmove: fix DetachedInstanceError in daily market aggregator task 2026-05-16 12:53:26 +00:00
tests wrongmove: stabilise setup_periodic_tasks tests after market-aggregator add 2026-05-16 12:07:50 +00:00
utils wrongmove: round-3 fix sweep — scrape pipeline, BUY tab, filter URL state, render hygiene, map polish 2026-05-10 22:27:29 +00:00
.dockerignore Flatten repo structure: move crawler/ to root, remove vqa/ and immoweb/ 2026-02-07 23:01:20 +00:00
.env.sample Add OSRM and OTP Docker services with setup scripts 2026-02-08 13:16:10 +00:00
.gitignore Add .worktrees/ to .gitignore for git worktree isolation 2026-02-21 15:48:34 +00:00
.style.yapf Flatten repo structure: move crawler/ to root, remove vqa/ and immoweb/ 2026-02-07 23:01:20 +00:00
alembic.ini Flatten repo structure: move crawler/ to root, remove vqa/ and immoweb/ 2026-02-07 23:01:20 +00:00
celery_app.py wrongmove: daily price-trend monitoring (per-listing badge + macro strip) 2026-05-16 12:02:25 +00:00
CLAUDE.md Add setup-test-venv.sh for running tests without Docker [ci skip] 2026-02-14 11:44:49 +00:00
csv_exporter.py Replace pandas with stdlib csv, apprise with direct Slack webhook, switch to opencv-headless 2026-02-21 19:47:10 +00:00
data_access.py Flatten repo structure: move crawler/ to root, remove vqa/ and immoweb/ 2026-02-07 23:01:20 +00:00
database.py Fall back to SQLite default when DB_CONNECTION_STRING is unset 2026-02-10 22:38:52 +00:00
docker-compose.yml Add structured JSON logging, OTel business metrics, and Grafana dashboard 2026-02-14 10:59:12 +00:00
Dockerfile wrongmove: round-3 fix sweep — scrape pipeline, BUY tab, filter URL state, render hygiene, map polish 2026-05-10 22:27:29 +00:00
GUIDE Flatten repo structure: move crawler/ to root, remove vqa/ and immoweb/ 2026-02-07 23:01:20 +00:00
listing_processor.py Fix metric imports: use module-level access instead of name imports 2026-02-14 11:21:49 +00:00
logging_config.py Add structured JSON logging, OTel business metrics, and Grafana dashboard 2026-02-14 10:59:12 +00:00
main.py Add debug CLI listings subcommand (list, detail, stream, refresh) 2026-02-22 15:17:56 +00:00
notifications.py Replace pandas with stdlib csv, apprise with direct Slack webhook, switch to opencv-headless 2026-02-21 19:47:10 +00:00
podman-compose.yml Flatten repo structure: move crawler/ to root, remove vqa/ and immoweb/ 2026-02-07 23:01:20 +00:00
poetry.lock Regenerate requirements.txt after dependency cleanup 2026-02-21 19:47:15 +00:00
pyproject.toml Replace pandas with stdlib csv, apprise with direct Slack webhook, switch to opencv-headless 2026-02-21 19:47:10 +00:00
README.md Flatten repo structure: move crawler/ to root, remove vqa/ and immoweb/ 2026-02-07 23:01:20 +00:00
redis_repository.py wrongmove: round-3 fix sweep — scrape pipeline, BUY tab, filter URL state, render hygiene, map polish 2026-05-10 22:27:29 +00:00
requirements.txt Regenerate requirements.txt after dependency cleanup 2026-02-21 19:47:15 +00:00
runall.sh Flatten repo structure: move crawler/ to root, remove vqa/ and immoweb/ 2026-02-07 23:01:20 +00:00
start.sh Add shared pre-push hook to run tests before pushing 2026-02-14 11:36:26 +00:00
TASKS.md Flatten repo structure: move crawler/ to root, remove vqa/ and immoweb/ 2026-02-07 23:01:20 +00:00
ui_exporter.py wrongmove: daily price-trend monitoring (per-listing badge + macro strip) 2026-05-16 12:02:25 +00:00

Setup

  1. Instal deps:
poetry install && cp .env.sample .env
  1. Check .env if you want to customize settings for broker and db
  2. run ./start.sh

This starts the backend

To start the fronend:

cd frontend && cp .env.sample .env

Change the DEV_HOST to any name you want to use to access the web interface.

Next, setup the DNS record (e.g in your /etc/hosts) file. This is important as auth is done via external [authentik] service that needs to redirect to a name.

Run ./start.sh

This starts a Caddy proxy with correct certificates, and npm dev server. All requests going to the frontend are forwarded to the npm server and the ones for the backed (that go to /api/*) are forwarded to the backend service.

Lastly, reachout to Viktor to allowlist your DEV_HOST so that authentik can authorize callbacks to your host.

Formatting

yapf --style .style.yapf --recursive .

For VSCode - install yapf extension. Enable formatting using yap and the style file in this repo (there may be an easier way; I put this in my user settings json):

{
    "[python]": {
        "editor.formatOnSaveMode": "file",
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "eeyore.yapf",
        "editor.formatOnType": false
      },
      "yapf.args": ["--style", "/home/wizard/code/realestate-crawler/crawler/.style.yapf"]
}

ADB commands (from /Applications/BlueStacks.app/Contents/MacOS):

Set proxy

./hd-adb shell settings put global http_proxy 192.168.9.110:8080

Disable proxy:

/hd-adb shell settings put global http_proxy :0

Connect adb

./hd-adb connect 127.0.0.1:5555

Disconnect adb

/hd-adb disconnect