Andrey Epifancev
|
b1d0186c77
|
Зависимости под контур: PyJWT 2.8.0, cryptography 43.0.3; JwksVerifier без PyJWK в decode (#43)
- requirements: PyJWT[crypto]==2.8.0, cryptography==43.0.3 (dev согласован)
- JwksVerifier: в decode передаётся signing_key.key, алгоритм выводится из типа ключа
(_algorithms_for_key: RSA -> RS256, EC P-256 -> ES256), как для AUTH_PUBLIC_KEY
- DevHs256Verifier: TypeError/ValueError от PyJWT 2.8 (нечисловой exp) -> AuthError, не 500
- тест: RSA-ключ из JWKS + ES256-токен (и наоборот) -> AuthError
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
|
2026-10-07 18:38:48 +04:00 |
|
Andrey Epifancev
|
df8a5285bb
|
feat(domain): ядро импорта справочников из выгрузки ЕЦП (§13.1–13.2)
- domain/directory_import.py: read_rows (xlsx первый лист / csv UTF-8 `;`/`,`,
заголовки по нормализованному тексту, MISSING_COLUMNS / UNSUPPORTED_FILE),
plan_import — чистая функция: операции плана и отчёт с кодами §13.2,
ASSUMPTION(OQ-87..91); ИНН — через domain/inn.py.
- openpyxl==3.1.5 (+ et_xmlfile==2.0.0) в requirements.txt,
types-openpyxl в requirements-dev.txt.
- Тесты без БД: нормализация, чтение csv/xlsx (Review Focus 1–3), каждый код
§13.2, skip/update, фикстура «Русский Бисквит» (ФЛ в строке 12 → UNSUPPORTED_TYPE).
- План фазы 2: Task 9 отмечена; tasks.md 3.1.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012vJkmBGKKqMoEMzvsXG3y2
|
2026-10-04 22:29:52 +04:00 |
|