GitHub

Synchronizacja kodu sync/async

Utrzymuj wygenerowane moduły sync na podstawie źródeł async.

Na tej stronie

Moduły async są źródłem prawdy dla większości implementacji endpointów, klientów, middleware i serwisów. Moduły sync wymienione w scripts/gen_sync.py powstają automatycznie z tych źródeł async.

Wygenerowane pliki zaczynają się od:

# Generated by scripts/gen_sync.py from src/ksef2/_clients/async_auth.py.
# DO NOT EDIT BY HAND - edit the async source and run `just gen-sync`.
python

Zmień wygenerowaną parę

  1. Edytuj moduł źródłowy async.

    $EDITOR src/ksef2/_clients/async_auth.py
    bash
  2. Wygeneruj odpowiadający moduł sync.

    just gen-sync
    bash

    Dla jednej pary użyj generatora bezpośrednio:

    uv run python scripts/gen_sync.py --only src/ksef2/_clients/async_auth.py
    bash
  3. Sprawdź diff źródła async i wygenerowanego targetu sync.

    git diff -- src/ksef2/_clients/async_auth.py src/ksef2/_clients/auth.py
    bash
  4. Uruchom check generacji przed PR.

    just check-gen-sync
    bash

just release-check też uruchamia check-gen-sync, więc nieaktualne pliki generated blokują release.

Sprawdź jedną parę

Użyj --only ze źródłem async albo targetem sync:

uv run python scripts/gen_sync.py --check --diff --only src/ksef2/_clients/auth.py
bash

To pomaga przy pracy nad jedną parą, gdy chcesz zobaczyć krótki diff.

Granice generatora

Nie każda para sync/async jest generowana. Część modułów jest celowo wspólna albo strukturalnie inna:

  • src/ksef2/_core/polling.py zawiera wspólne helpery pollingu sync i async.
  • src/ksef2/_core/response_errors.py zawiera wspólne mapowanie błędów odpowiedzi.
  • src/ksef2/_clients/base.py i src/ksef2/_clients/async_base.py różnią się własnością klienta bazowego i zarządzaniem zasobami.
  • src/ksef2/_core/http.py i src/ksef2/_core/async_http.py różnią się własnością transportu i zamykaniem.

Lista par i wyjątków znajduje się w scripts/gen_sync.py. Aktualizuj ją, gdy moduł staje się generated albo celowo divergent.

Co sprawdza release gate

just release-check uruchamia:

just lint
just format-check
just check-ksef-api-version
just check-gen-sync
just typecheck
just test
just test-runtime-checks
uv build
bash

Dla generacji sync oznacza to, że:

  • wygenerowane targety zgadzają się z transformacją źródeł async;
  • wygenerowane pliki nadal formatują się konfiguracją repo;
  • publiczne powierzchnie sync i async są pilnowane przez testy parytetu;
  • paczka buduje się z wygenerowanych plików zapisanych w repo.

Referencja