fix(scrape-objective): drop redundant self arg in sync_all_groups loop #313

Merged
lekss361 merged 1 commit from fix/obj-sync-all-groups-self-arg into main 2026-05-17 16:13:42 +00:00
Owner

Bug

Live Objective scraper попадает в TypeError после первого же trigger'a через /api/v1/admin/scrape/objective/sync-our:

TypeError: sync_objective_group() got multiple values for argument 'group_name'
  celery/app/task.py:__call__

Glitchtip issue: BACKEND-1F, release a93bef4 (PR #311 деплой), first_seen 2026-05-17 16:07:24Z.

Root cause

backend/app/workers/tasks/scrape_objective.py:431 вызывает sync_objective_group(self, group_name=group, ...) — но это @celery_app.task(bind=True) task. Task.__call__ для bind=True уже авто-prepend'ит task instance к self.run(). Лишний positional self ложится на первый юзер-param (group_name), потом kwarg group_name=group → TypeError.

Fix

Одна строка: убрать self, из call-сайта. Сигнатура sync_objective_group(self, group_name=None, ...) — НЕ трогать (нужна для bind=True).

Cross-call audit

Grep по всему репо (backend/, data/):

  • sync_objective_group( — 3 hits: def (142), logger (429), bugged call (431). Один call-сайт, всё.
  • sync_all_groups( — только def (356). Только через .apply_async() (admin_scrape.py).

Acceptance

После merge + deploy:

  • Trigger через UI → run появляется в objective_scrape_runs со status='running'
  • Через 3 мин — первая группа (Свердловская область) выдаёт rows_lots > 0, raw_id populated в свежих objective_lots строках
  • Glitchtip BACKEND-1F не повторяется (release > a93bef4)

Risk

Минимальный. Single-line argument removal в loop. Никакая логика не меняется, только Python calling convention.

## Bug Live Objective scraper попадает в TypeError после первого же trigger'a через `/api/v1/admin/scrape/objective/sync-our`: ``` TypeError: sync_objective_group() got multiple values for argument 'group_name' celery/app/task.py:__call__ ``` Glitchtip issue: BACKEND-1F, release `a93bef4` (PR #311 деплой), first_seen 2026-05-17 16:07:24Z. ## Root cause `backend/app/workers/tasks/scrape_objective.py:431` вызывает `sync_objective_group(self, group_name=group, ...)` — но это `@celery_app.task(bind=True)` task. `Task.__call__` для bind=True уже авто-prepend'ит task instance к `self.run()`. Лишний positional `self` ложится на первый юзер-param (`group_name`), потом kwarg `group_name=group` → TypeError. ## Fix Одна строка: убрать `self,` из call-сайта. Сигнатура `sync_objective_group(self, group_name=None, ...)` — НЕ трогать (нужна для bind=True). ## Cross-call audit Grep по всему репо (`backend/`, `data/`): - `sync_objective_group(` — 3 hits: def (142), logger (429), bugged call (431). Один call-сайт, всё. - `sync_all_groups(` — только def (356). Только через `.apply_async()` (admin_scrape.py). ## Acceptance После merge + deploy: - Trigger через UI → run появляется в `objective_scrape_runs` со `status='running'` - Через 3 мин — первая группа (Свердловская область) выдаёт `rows_lots > 0`, `raw_id` populated в свежих `objective_lots` строках - Glitchtip BACKEND-1F не повторяется (release > a93bef4) ## Risk Минимальный. Single-line argument removal в loop. Никакая логика не меняется, только Python calling convention.
lekss361 added 1 commit 2026-05-17 16:12:06 +00:00
fix(scrape-objective): drop redundant self arg in sync_all_groups loop
Some checks failed
CI / backend (pull_request) Failing after 46s
CI / frontend (pull_request) Successful in 1m53s
dbc9a880cf
Celery bind=True task __call__ auto-prepends task instance to run(),
передача self явно создаёт TypeError "got multiple values for argument
'group_name'" когда первый user-param (group_name) перевязывается на
наш self positional.

Discovered после PR #311 деплоя OBJECTIVE_API_KEY — worker впервые
подхватил sync_all_groups и зафейлил в Glitchtip BACKEND-1F.
lekss361 merged commit fce48a8924 into main 2026-05-17 16:13:42 +00:00
Author
Owner

Merged via deep-code-reviewer — verdict APPROVE.

Cross-call audit confirmed single call-site (line 431). Celery bind=True semantics correct: Task.__call__ auto-binds task instance, so passing self explicitly at direct-call site causes double-bind on first user param. Body of sync_objective_group never references self, so removal is safe. Signature unchanged (self: Any at line 143) — needed for bind=True declaration. Forgejo Actions deploy.yml triggers on backend/** — confirmed.

Merged via deep-code-reviewer — verdict APPROVE. Cross-call audit confirmed single call-site (line 431). Celery `bind=True` semantics correct: `Task.__call__` auto-binds task instance, so passing `self` explicitly at direct-call site causes double-bind on first user param. Body of `sync_objective_group` never references `self`, so removal is safe. Signature unchanged (`self: Any` at line 143) — needed for `bind=True` declaration. Forgejo Actions deploy.yml triggers on `backend/**` — confirmed.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#313
No description provided.