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:
29
README.md
29
README.md
@@ -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:` så `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).
|
||||||
|
|||||||
Reference in New Issue
Block a user