Skip to content

PBN import: rozdzielenie pobierania od przetwarzania#347

Open
mpasternak wants to merge 23 commits into
feature/multi-hosted-configfrom
feature/pbn-import-rozdziel-pobieranie
Open

PBN import: rozdzielenie pobierania od przetwarzania#347
mpasternak wants to merge 23 commits into
feature/multi-hosted-configfrom
feature/pbn-import-rozdziel-pobieranie

Conversation

@mpasternak

Copy link
Copy Markdown
Member

Cel

Rozbicie kroków importu PBN (src/pbn_import) na dwie niezależnie uruchamiane fazy: pobieranie (PBN → tabele-lustra pbn_api.*) i przetwarzanie/integracja (lustro → modele bpp.*). Można teraz uruchomić samo pobieranie, samo przetwarzanie albo oba — niezależnie per encja.

Co się zmienia

  • ImportStepBase: nowe metody download() / process(), run() = obie po kolei, __call__(method=…) z walidacją.
  • 6 importerów rozdzielonych (download/process): Źródła, Wydawcy, Konferencje, Autorzy, Publikacje, Oświadczenia. Każdy process() ostrzega miękko przy pustym lustrze i kontynuuje.
  • Nowa integracja konferencji integruj_konferencje() — wcześniej konferencje były tylko pobierane do lustra, nigdy nie trafiały do bpp.Konferencja. Idempotentna (po pbn_uid, potem (nazwa, rozpoczecie)), odporna (value_or_none, savepoint+IntegrityError, przycinanie zbyt długich pól).
  • Model faz w step_definitions.py + resolver zgodności wstecznej: stary klucz disable_<encja> wyłącza obie fazy; nowe klucze granularne (disable_<encja>_download/_process) nadpisują. Bez migracji DB (JSONField).
  • ImportManager wykonuje fazy per-metoda, results kluczowane po result_key (encja:faza).
  • Formularz: dwukolumnowa tabela (Pobieranie | Przetwarzanie); kroki niepodzielne (initial/institution/opłaty) na pełną szerokość; punktacja źródeł tylko w kolumnie przetwarzania.
  • CLI: granularne flagi --disable-<encja>-<faza> + legacy aliasy --disable-<encja> (obie fazy).
  • Presety przepisane na klucze granularne (legacy + **all_disabled dawałyby zły wynik przez resolver).

Kroki niepodzielne świadomie zostają bez zmian: initial_setup/institution_setup (setup), fee_import (pobiera i zapisuje w jednej pętli — nierozdzielalne), source_scoring_import (process-only na cache).

Zgodność wsteczna

Stare sesje, presety i skrypty CLI (disable_zrodla itd.) działają bez zmian — resolver tłumaczy legacy na obie fazy. Brak migracji bazy.

Dokumentacja

  • Spec: docs/superpowers/specs/2026-06-07-pbn-import-rozdzielenie-pobierania-od-przetwarzania-design.md
  • Plan: docs/superpowers/plans/2026-06-07-pbn-import-rozdziel-pobieranie.md

Testy

  • 487 testów zielonych w src/pbn_import/ + src/pbn_integrator/ lokalnie.
  • TDD: każdy z 15 tasków z testami; review spec + jakość per task; finalny review całości.
  • Nowe pliki testów: split per importer, integruj_konferencje, model faz, manager per faza, CLI granular/legacy, presety granularne.

Plan testów (do weryfikacji)

  • CI: Build test-runner image + Tests (sharded) zielone
  • Ręcznie: nowy import z zaznaczonym tylko „Pobieranie" dla Źródeł → lustro Journal pełne, Zrodlo nietknięte; potem tylko „Przetwarzanie" → źródła w BPP
  • Stary preset / --disable-zrodla nadal pomija oba podkroki

🤖 Generated with Claude Code

mpasternak and others added 23 commits June 7, 2026 20:27
Projekt rozbicia kroków importu PBN na niezależne fazy download/process
(6 krokow rozdzielanych + nowa integracja konferencji), z dwukolumnowym
formularzem, zgodnoscia wsteczna configu i miekkim ostrzezeniem przy
pustym lustrze.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…etwarzania

15 taskow TDD: fazy w ImportStepBase, integruj_konferencje, split 6 importerow,
model faz w step_definitions + resolver zgodnosci wstecznej, ImportManager per
faza, CLI granular+legacy, presety, dwukolumnowy formularz.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- integruj_konferencje: value_or_none zamiast value() (sentinel '[brak k]'),
  savepoint + except IntegrityError, filter().first() (nie get()).
- Task 7: test ustawia default_jednostka, process() guard na nazwa.
- Task 9: nota bloku migracji kontraktu (9-13 przejsciowo czerwone),
  przepisane 4 zlamane testy step_definitions (16 faz), policzona licznosc.
- Task 12: reverse('pbn_import:presets'); presety wylacznie granularne.
- Spec: results -> jedyny konsument _display_results.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ethod)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Konferencja

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…tal, komentarze

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ed (spójność) + napraw wrapper test po splicie

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Zastąp monolityczne run() dwoma metodami:
- download(): pobieranie v1+v2 z PBN do lustra
- process(): import z lustra do BPP (opcjonalnie z kasowaniem)
Zaktualizuj test_publication_import.py — stare testy run() zastąpiono
odpowiednikami dla download()/process().

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…cess()

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…stecznej

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…result_key

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…zanie)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…pól (odporność importu)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant