docs: update README with production hardening changes (tasks 7-10)

- Add network robustness bullet to features list
- Add new "Produktionssikkerhed" section covering timeouts, retry,
  thread safety, exception handling, logging and path sanitization
- Expand test section with table of all 9 test classes and their scope
- Add remaining Retry-After defensive parsing to backlog

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Martin Tranberg
2026-04-12 10:46:39 +02:00
parent 7fd69a9c3f
commit 2d34b6bcfe

View File

@@ -14,6 +14,7 @@ En moderne Python-baseret fil-browser til Microsoft SharePoint, specielt designe
- **Fuld Fil- og Mappestyring:** Understøtter upload, sletning og omdøbning, samt visning af udvidet fil-metadata (filstørrelse, redigeringsdato). - **Fuld Fil- og Mappestyring:** Understøtter upload, sletning og omdøbning, samt visning af udvidet fil-metadata (filstørrelse, redigeringsdato).
- **Multisprog:** Indbygget og brugerstyret understøttelse af både Dansk og Engelsk-grænseflade. - **Multisprog:** Indbygget og brugerstyret understøttelse af både Dansk og Engelsk-grænseflade.
- **Multi-File Editing:** Robust understøttelse for lokalt at redigere flere forskellige filer uafhængigt af hinanden i baggrunden uden at interface fryser. - **Multi-File Editing:** Robust understøttelse for lokalt at redigere flere forskellige filer uafhængigt af hinanden i baggrunden uden at interface fryser.
- **Netværkssikkerhed & Robusthed:** Automatisk retry med eksponentiel backoff ved HTTP 429 (rate limiting) og 503 (midlertidigt utilgængelig) samt timeout på alle netværkskald, så programmet aldrig hænger ved netværksproblemer.
## ⚙️ Indstillinger ## ⚙️ Indstillinger
@@ -27,6 +28,19 @@ Indstillingsdialogen er organiseret i faner:
| **System** | Sprog og log-output til fejlfinding | | **System** | Sprog og log-output til fejlfinding |
| **Om** | Versionsinformation og kontaktoplysninger | | **Om** | Versionsinformation og kontaktoplysninger |
## 🔒 Produktionssikkerhed
Programmet er gennemgået og hærdet til produktionsbrug:
| Område | Forbedring |
|--------|-----------|
| **Netværkstimeouts** | Alle `requests`-kald har `timeout=30 s` (API) / `timeout=120 s` (filuploads) — programmet hænger aldrig ved netværksproblemer |
| **Automatisk retry** | `_graph_request`-hjælper håndterer HTTP 429 og 503 med op til 3 forsøg og eksponentiel backoff (maks. 60 s), respekterer `Retry-After`-header |
| **Trådsikkerhed** | `threading.Lock` beskytter alle sammensatte operationer på `active_edits` (som tilgås fra både UI-tråd og baggrundstråde) |
| **Fejlhåndtering** | Alle `except:`-blokke er erstattet med `except Exception:``SystemExit` og `KeyboardInterrupt` ikke sluges |
| **Logging** | MSAL-initfejl og token-opdateringsfejl logges via `logger.error()` i stedet for `print()` |
| **Stisikkerhed** | `os.path.basename()` anvendes på server-kontrollerede filnavne ved mappedownload |
## 🛠️ Teknologier ## 🛠️ Teknologier
- **Sprog:** Python 3.x - **Sprog:** Python 3.x
@@ -80,10 +94,23 @@ En unit-test suite dækker de kritiske logik-komponenter:
python -m unittest tests.test_review_fixes -v python -m unittest tests.test_review_fixes -v
``` ```
Testene kører uden skærm/display og dækker: navigations-tæller, oversættelses-nøgler, URL-initialisering og signaturer. Testene kører uden skærm/display (**45 tests**) og dækker:
| Testklasse | Hvad der testes |
|------------|----------------|
| `TestStrings` | Oversættelses-nøgler og formatering |
| `TestNavGenGuard` | Navigations-tæller og stale-result beskyttelse |
| `TestUrlInitialization` | URL-initialisering i baggrundstråd |
| `TestDeadSiteBranch` | Fjernede dead-code grene |
| `TestIsBreakcrumbRemoved` | Ryddet signatur for `_navigate_to_item_data` |
| `TestTask7BareExcept` | `except Exception`, `logger.error`, `os.path.basename` |
| `TestNetworkTimeouts` | Alle `requests.*`-kald har `timeout=` |
| `TestGraphRequest` | Retry-logik: 429/503, `Retry-After`, max-forsøg, timeout-injektion |
| `TestActiveEditsLock` | `threading.Lock` på alle sammensatte `active_edits`-operationer |
## 💡 Backlog / Kommende muligheder ## 💡 Backlog / Kommende muligheder
1. Integration for håndtering af flere tenants (lejemål) 1. Integration for håndtering af flere tenants (lejemål)
2. Et yderligere detaljeret log-system specielt til debugging af baggrundstråden. 2. Et yderligere detaljeret log-system specielt til debugging af baggrundstråden.
3. Udvidet aktivitetslog til sporing af handlinger for de seneste 14 dage. 3. Udvidet aktivitetslog til sporing af handlinger for de seneste 14 dage.
4. Styring af licenser til specifikke kunders varigheder (fx 1 år, 3 år, Lifetime). 4. Styring af licenser til specifikke kunders varigheder (fx 1 år, 3 år, Lifetime).
5. Defensiv `try/except ValueError` i `_graph_request` ved parsing af `Retry-After`-header (for fremtidssikring mod HTTP-dato-format).