Dodaj ErrorRecord: zunifikowany, wersjonowany kontrakt błędów PBN#7
Open
mpasternak wants to merge 2 commits into
Open
Dodaj ErrorRecord: zunifikowany, wersjonowany kontrakt błędów PBN#7mpasternak wants to merge 2 commits into
mpasternak wants to merge 2 commits into
Conversation
Nowy moduł pbn_client.error_record z ErrorRecord (frozen dataclass), totalną funkcją parse() (NIGDY nie rzuca — łapie też RecursionError/OverflowError/ MemoryError na wrogich body) i serialize() do stabilnego formatu v1 (jednoliniowy JSON, każde pole capowane → blob dowodliwie < 65535). parse() rozpoznaje formaty legacy (tuple-repr HttpException, traceback z prefiksem pbn_api/pbn_client) ORAZ v1 — umożliwia hostowi reader-first rollout. Pole `wire` (v1/legacy/empty) i `content_json_valid` (odróżnia JSON null od niepoprawnego body) pozwalają adapterom hosta renderować bez rozjazdów. Publiczne API: ErrorRecord, parse_error_record, serialize_error_record. Bump 0.2.0 -> 0.2.1 (dodatek API; mieści się w <0.3, django-pbn-client 0.2.0 pozostaje kompatybilny). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
json.loads głęboko zagnieżdżonego body na CPythonie <3.14 rzuca RecursionError (content_json None), a 3.14+ parsuje głębiej bez błędu (content_json = lista). Test asertował sztywno content_json is None → fail na 3.14. Kontrakt „parse() nigdy nie rzuca" trzyma w obu przypadkach; test sprawdza teraz totalność + rozpoznanie krotki niezależnie od głębi, a content_json_valid spójnie z content_json. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Co i po co
Nowy moduł
pbn_client.error_record— czysta, framework-niezależnareprezentacja błędów PBN, którą host (BPP) parsował dotąd w wielu miejscach
kruchą, rozjeżdżającą się logiką.
ErrorRecord(frozen dataclass) — znormalizowany błąd PBN.parse(stored)— TOTALNE (nigdy nie rzuca; łapie teżRecursionError/OverflowError/MemoryErrorna wrogim body z PBN).Rozpoznaje legacy tuple-repr
HttpException, traceback z prefiksempbn_api/pbn_client, ORAZ nowy format v1.serialize(rec)— stabilny format v1 (jednoliniowy JSON). Każde polecapowane → blob dowodliwie < 65535 (mieści się w
TextFieldhosta).wire(v1/legacy/empty) icontent_json_valid(odróżnia JSONnullod niepoprawnego body) pozwalają adapterom hosta renderować bezrozjazdów i wdrożyć reader-first rollout (czyta v1 zanim zacznie zapisywać).
Publiczne API:
ErrorRecord,parse_error_record,serialize_error_record.Wersja
0.2.0 → 0.2.1— dodatek API, additive. Świadomie 0.2.1 (nie 0.3.0), żebyzmieścić się w
<0.3— dzięki temudjango-pbn-client0.2.0 (pinpbn-client>=0.2,<0.3) pozostaje kompatybilny bez skoordynowanego release'u.Testy
tests/test_error_record.py(41 testów): totalność (fuzz + głęboki JSON +OverflowError), rozpoznanie każdej gałęzi, brak kolizji legacy↔v1, round-trip
serialize/parse, dowodliwy limit rozmiaru. Pełna suita pakietu: 140 passed.
Konsument: BPP repointuje display na ten moduł (osobny PR na
iplweb/bpp).🤖 Generated with Claude Code