Pakiety klienckie PBN¶
Kod integracji z PBN jest wydzielony do dwóch samodzielnych pakietów
publikowanych na PyPI (repozytoria pod github.com/iplweb/):
| Dystrybucja (PyPI) | Import Pythona | Repozytorium | Odpowiedzialność |
|---|---|---|---|
pbn-client |
pbn_client |
iplweb/pbn-client | HTTP, uwierzytelnianie i protokół API PBN (niezależne od Django) |
django-pbn-client |
django_pbn_client |
iplweb/django-pbn-client | abstrakcyjne modele Django i pobieranie/zapis stron PBN |
BPP zależy od obu dystrybucji jak od każdej innej zależności z PyPI
(pyproject.toml, sekcja [project.dependencies]). django-pbn-client
zależy dodatkowo od pbn-client. Istniejąca aplikacja pbn_api, jej etykieta
Django, konkretne modele i migracje pozostają w BPP. Moduł pbn_api.models.base
oraz część pbn_api.exceptions/pbn_api.const to cienkie warstwy zgodności
re-eksportujące klasy z nowych pakietów.
W repozytorium BPP nie ma już katalogu packages/ ani konfiguracji
uv workspace. Zmiana kodu klienta = PR do właściwego repozytorium pakietu →
nowe wydanie na PyPI (przez GitHub Release + Trusted Publishing) → bump wersji
zależności w BPP.
Podział odpowiedzialności¶
pbn-client jest warstwą protokołu i nie może zależeć od modeli BPP ani od
pbn_api. django-pbn-client udostępnia abstrakcyjne klasy bazowe oraz
generyczne usługi pobierania stron i zapisu (m.in. download_to_model,
get_or_download). Nie dostarcza konkretnych modeli lustrzanych — te,
ich relacje do BPP oraz historia migracji pozostają w pbn_api. Orkiestracja
importu, dopasowywanie rekordów, Celery i interfejs pobierania również
pozostają po stronie BPP.
Późniejsze wydzielenie konkretnych modeli wymagałoby zaprojektowania konfigurowalnych relacji i osobnej strategii migracji; nie należy przenosić istniejących migracji ani zmieniać etykiety aplikacji.
Pobieranie równoległe domyślnie używa wątków. Opcjonalny tryb
method="processes" korzysta z POSIX-owego fork, więc nie jest dostępny na
Windows.
Aktualizacja wersji pakietu w BPP¶
# po wydaniu nowej wersji pakietu na PyPI:
uv add "pbn-client>=0.2,<0.3" # lub edycja pyproject.toml
uv sync --refresh-package pbn-client # --refresh gdy index uv jest zcache'owany
uv run python src/manage.py check
uv run python src/manage.py makemigrations --check --dry-run # brak dryfu pbn
Wydawanie nowej wersji pakietu¶
W repozytorium danego pakietu (nie w BPP):
- Bump
versionwpyproject.toml, merge domain. - Utwórz GitHub Release z tagiem
vX.Y.Z— workflowrelease.ymlpublikuje na PyPI przez Trusted Publishing (OIDC, bez tokena). - Zbump zależność w BPP (sekcja wyżej).