Parameter required status is lost after wire round-trip

Ouverte Adaptée aux débutants
#3,854 1 commentaire 0 réactions 1 personne assignée Voir sur GitHub

Les mainteneurs répondent en général sous 2 jours

@its-amann y travaille déjà.

Depuis le 4/11/2026.

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
72/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
json, python
Domaine
backend

Piste de recherche

Commence par le modèle Parameter dans pyrit/models/parameter.py et par la fonction _reconstruct_param_type_from_wire, qui le reconstruit à partir du JSON. Exécute l'extrait de reproduction de l'issue pour confirmer que required vaut True avant l'aller-retour et False après. Restaurer REQUIRED_VALUE lorsque le drapeau required du wire est vrai devrait faire correspondre la valeur par défaut restaurée à l'originale. tests/unit/models/test_parameter.py devrait couvrir ce cas.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Bug: triage help wanted
Describe the bug

Parameter serializes its computed required flag, but _reconstruct_param_type_from_wire does not use it to restore REQUIRED_VALUE. A required declaration therefore deserializes as optional (default=None, required=False). Clients that round-trip a registry catalog can stop marking or validating the field as required, although backend construction still rejects a missing input.

Steps/Code to Reproduce
from pyrit.common import REQUIRED_VALUE
from pyrit.models.parameter import Parameter

original = Parameter(name="count", description="Required count", param_type=int, default=REQUIRED_VALUE)
restored = Parameter.model_validate_json(original.model_dump_json())
print(original.required, restored.required, restored.default)
Expected Results

The restored declaration remains required and has the same missing-input validation semantics as the original.

Actual Results

The wire JSON contains "required":true, but the restored model reports True False None for original required, restored required, and restored default.

Screenshots

N/A. This is a deterministic model serialization reproduction.

Versions

Python 3.12.3; PyRIT checkout revision 01ce6ca66a315770b36c7dca1f320668c0d92d7c. tests/unit/models/test_parameter.py (228 tests) and registry resolution tests (93 tests) passed; no backend HTTP workflow was run.

Langage dominant
Python
Étoiles
4.7k
Forks
1k
Merge moyen
2 j 3 h
PR mergées (30 j)
465

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

  • Aucun Dockerfile ni fichier Docker Compose
  • Propose un modèle de pull request
  • Aucun guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de microsoft/PyRIT

Toutes les issues de microsoft/PyRIT

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.