[bug] Template.clean() corrections land one write late over the REST API
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 52/100
Direzione di ricerca
Inizia tracciando ValidatedModelSerializer.validate() e il punto di ingresso TemplateSerializer.validate_vpn, quindi esamina Template.clean() e il percorso di salvataggio PUT/PATCH. Riproduci i casi PATCH descritti nell’issue che riguardano solo il tipo e quelli che riguardano solo i campi obbligatori. Il lavoro è completato quando ogni modifica applica le relative correzioni nella stessa scrittura, con test che coprano entrambi i casi e la compatibilità con openwisp-utils#760.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
ValidatedModelSerializer.validate() only applies incoming data when there is no
instance (creation); on PUT/PATCH it runs full_clean() on the instance as
loaded. So Template.clean() never sees the change being saved, and its
type-scoped corrections are applied one write late — the offending write stores
an inconsistent row, and some later unrelated write happens to fix it.
TemplateSerializer.validate_vpn does not catch this: it only fires when both
type and vpn are present in initial_data, so a type-only PATCH bypasses it.
Steps To Reproduce
- Create a template with
type="vpn"and a VPN attached. PATCH /api/v1/controller/template/<pk>/with
{"type": "generic", "config": {"interfaces": []}}→200.- Re-read the row:
typeisgenericbutvpnis still set, contradicting
clean()'s "clears VPN specific fields if type is not VPN". PATCHanything else, e.g.{"name": "renamed"}→ only now isvpnset to
None.
Same shape for required/default: PATCH {"required": true} stores
required=True, default=False, and default becomes True only on a later
write.
Expected behavior
The type change itself should clear vpn/auto_cert, and required should
force default on the same write.
Depends on openwisp/openwisp-utils#760 — and note that if that
lands as copy-based validation, Template.clean() will need to stop correcting
by assignment, since those corrections would no longer be saved at all.
Screenshots
N/A.
System Informatioon:
- OS: Pop!_OS 24.04 LTS
- Python Version: Python 3.13.5
- Django Version: Django 5.2.16
- Browser and Browser Version (if applicable): N/A (REST API)
Also: openwisp-controller 1.2.3, openwisp-utils 1.2.2, djangorestframework
3.16.1.
- Lingua principale
- Python
- Stelle
- 794
- Fork
- 339
- Merge medio
- 9h 56m
- PR unite (30g)
- 32
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di openwisp/openwisp-controller
-
[bug] DeviceListFilterBackend drops additional query filters when config__templates is providedApertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
openwisp/openwisp-controller#1544 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[fix] Recent Commands row uses "created" timestamp for the "Modified" fieldForse già presa @xovishnukosuri l’ha presa 236 giorni fa. Apertabug
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
openwisp/openwisp-controller#1263 · 4 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 45/100
openwisp/openwisp-controller#1524 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[feature] Emit a signal when a device operating system changesForse di nuovo libera @Vara715 l’ha presa 20 giorni fa e non c’è nessuna pull request aperta. Apertaenhancement
Difficoltà 3/5 Mezza giornata Idoneità per principianti 65/100
openwisp/openwisp-controller#1506 · 4 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
[feature] Add board_name field to Device model for DTB board identificationForse di nuovo libera @atif09 l’ha presa 48 giorni fa e non c’è nessuna pull request aperta. Apertaenhancement gsoc
openwisp/openwisp-controller#1491 · 2 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di openwisp/openwisp-controller
Issue simili
-
curriculum documentation quality
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
githubnext/gh-aw-workshop#5367 ·
I maintainer di solito rispondono entro 3 giorni
-
Create Noise Latents ignores randomize_seed and produces the same noise every runForse già presa @griptapeops l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
griptape-ai/griptape-nodes-library-diffusers#127 ·
I maintainer di solito rispondono entro 1 giorno
-
Jenkins capacity report: metrics history is lost when archiving a month failsForse già presa @RaphaelFakhri l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
adoptium/infrastructure#4568 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
huggingface/deep-rl-class#723 ·
-
premises-missing
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
WingedGuardian/GENesis-AGI#3928 ·
I maintainer di solito rispondono entro 1 giorno