Projet

Général

Profil

Bug #80332

testdef, 'BlockSubWidget' object has no attribute 'field'

Ajouté par Frédéric Péters il y a 9 mois. Mis à jour il y a 9 mois.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
08 août 2023
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

Exception:
  type = '<class 'AttributeError'>', value = ''BlockSubWidget' object has no attribute 'field''

Stack trace (most recent call first):
  File "/usr/lib/python3/dist-packages/wcs/testdef.py", line 347, in widget_has_real_error
   345         if widget.error == widget.REQUIRED_ERROR:
   346             if testdef:
>  347                 testdef.missing_required_fields.append(widget.field.label)
   348             return False
   349 

  locals: 
     testdef = <wcs.testdef.TestDef object at 0x7f277a7ba670>
     widget = <BlockSubWidget at 7f277a542e20: f170$element0>

  File "/usr/lib/python3/dist-packages/wcs/testdef.py", line 372, in get_error_subwidget
   370             widget.is_subwidget = True
   371 
>  372             if widget.error and cls.widget_has_real_error(widget, testdef):
   373                 return widget
   374 

  locals: 
     cls = <class 'wcs.testdef.TestDef'>
     testdef = <wcs.testdef.TestDef object at 0x7f277a7ba670>
     widget = <BlockSubWidget at 7f277a542e20: f170$element0>

  File "/usr/lib/python3/dist-packages/wcs/testdef.py", line 362, in get_error_widget
   360         if widget.field.key == 'block' and (not widget.error or widget.error == widget.REQUIRED_ERROR):
   361             widget.error = None
>  362             return cls.get_error_subwidget(widget, testdef)
   363 
   364         if cls.widget_has_real_error(widget, testdef):

  locals: 
     cls = <class 'wcs.testdef.TestDef'>
     testdef = <wcs.testdef.TestDef object at 0x7f277a7ba670>
     widget = <BlockWidget at 7f277a542400: f170>

  File "/usr/lib/python3/dist-packages/wcs/testdef.py", line 294, in run_widget_validation
   292         widget.parse()
   293 
>  294         widget = TestDef.get_error_widget(widget, self)
   295         if not widget:
   296             return

  locals: 
     field = <BlockField 170 'CV du ou des porteurs de projet'>
     self = <wcs.testdef.TestDef object at 0x7f277a7ba670>
     value = None
     widget = <BlockWidget at 7f277a542400: f170>

  File "/usr/lib/python3/dist-packages/wcs/testdef.py", line 250, in fill_page_fields
   248                 value = field.from_json_value(value)
   249 
>  250             self.run_widget_validation(field, value)
   251 
   252             self.add_value_to_formdata(field, formdata, value)

  locals: 
     field = <BlockField 170 'CV du ou des porteurs de projet'>
     fields = [<CommentField beda7762-8f90-4a20-bd8b-3ea87153db5c '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <FileField 970f463c-8e60-4d19-adb1-964199ed01b9 'Statuts de l’association, datés et signés'>, <FileField 9c41105a-c5bb-40ba-bd5e-eb4365ea218b 'Liste des membres du bureau'>, <FileField 3dbe15cc-9e32-4463-9b2f-41782f0efee1 'Copie du récépissé de déclaration auprès du Tribunal d’Instance'>, <FileField d66a3333-5af4-4d4d-a8a4-2710e9757ee2 'Certificat d’inscription au répertoire des établissements (SIRET'>, <CommentField c9391390-3844-42f3-b4c7-e7c40be43f6f '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <CommentField ce78b354-d1f3-4bc0-a687-96a644a4077f '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <FileField 31148ac5-5283-405e-97ac-e78ecfcae9a2 'Budget prévisionnel de la structure établi sur 24 mois'>, <FileField fd5fde88-7f22-4c96-bb74-c80d128aa841 'Budget prévisionnel du projet établi sur 24 mois'>, <FileField 18de3a06-e442-46a3-bd90-9021e6e1eb0f 'Bilan et compte de résultat de l’année N-1'>, <FileField 611dcf92-570f-42d7-a655-fe9931445286 'Relevé d’identité bancaire'>, <CommentField 54bb0c20-1d30-4c0c-b4d5-0c710ac399e1 '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <FileField 154 'Calendrier du projet'>, <BlockField 170 'CV du ou des porteurs de projet'>, <BlockField 171 'Tout document complémentaire permettant de valoriser l’action et'>, <CommentField 3f114490-8e1a-449d-8a37-7ab6db4ff431 '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <FileField cb5fa7d6-8c14-49d1-b3af-884b167eeb05 "Contrat d'engagement républicain">]
     formdata = <_wcs_Appel-A-Projet-Innovation-Sociale 'Appel à projet innovation sociale - n°None' id:None>
     objectdef = <FormDef 'Appel à projet innovation sociale' id:221>
     page = <PageField 92e67bd8-aa34-462f-8d7d-4b6e3f34b484 'Pièces à joindre'>
     self = <wcs.testdef.TestDef object at 0x7f277a7ba670>
     value = None
     x = <FileField bf296a1451-174c-4a62-a347-01cc26736746 'Pièce jointe'>

  File "/usr/lib/python3/dist-packages/wcs/testdef.py", line 218, in _run
   216                 continue
   217 
>  218             self.fill_page_fields(fields, page, formdata, objectdef)
   219             previous_page = page
   220 

  locals: 
     field = <BoolField ac4bd93d-b8be-4ae3-9a67-ba8f1e93f05c 'Précise que la subvention départementale, si elle est accordée, '>
     fields = [<CommentField beda7762-8f90-4a20-bd8b-3ea87153db5c '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <FileField 970f463c-8e60-4d19-adb1-964199ed01b9 'Statuts de l’association, datés et signés'>, <FileField 9c41105a-c5bb-40ba-bd5e-eb4365ea218b 'Liste des membres du bureau'>, <FileField 3dbe15cc-9e32-4463-9b2f-41782f0efee1 'Copie du récépissé de déclaration auprès du Tribunal d’Instance'>, <FileField d66a3333-5af4-4d4d-a8a4-2710e9757ee2 'Certificat d’inscription au répertoire des établissements (SIRET'>, <CommentField c9391390-3844-42f3-b4c7-e7c40be43f6f '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <CommentField ce78b354-d1f3-4bc0-a687-96a644a4077f '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <FileField 31148ac5-5283-405e-97ac-e78ecfcae9a2 'Budget prévisionnel de la structure établi sur 24 mois'>, <FileField fd5fde88-7f22-4c96-bb74-c80d128aa841 'Budget prévisionnel du projet établi sur 24 mois'>, <FileField 18de3a06-e442-46a3-bd90-9021e6e1eb0f 'Bilan et compte de résultat de l’année N-1'>, <FileField 611dcf92-570f-42d7-a655-fe9931445286 'Relevé d’identité bancaire'>, <CommentField 54bb0c20-1d30-4c0c-b4d5-0c710ac399e1 '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <FileField 154 'Calendrier du projet'>, <BlockField 170 'CV du ou des porteurs de projet'>, <BlockField 171 'Tout document complémentaire permettant de valoriser l’action et'>, <CommentField 3f114490-8e1a-449d-8a37-7ab6db4ff431 '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <FileField cb5fa7d6-8c14-49d1-b3af-884b167eeb05 "Contrat d'engagement républicain">]
     fields_by_page = {<PageField 1 'Demande'>: [<CommentField 2 '<p><img alt="logo prefecture moselle" height="221" src="https://'>, <CommentField 8289202f-5bf3-43c9-bcba-0ecaf1ba4d74 '<div class="infonotice">\n<h3><strong>Mode d&#39;emploi du formul'>, <CommentField 3 '<p><em>(*) Indique un champ obligatoire</em></p>'>, <CommentField 4 '<hr>\n<h3><!--StartFragment--><strong>Conditions</strong></h3>\n'>, <ItemField 137 "L'activité créée par le projet se trouve en Moselle">, <CommentField 101 '<div class="errornotice">\n<h4><strong>Date limite de d&eacute;p&'>, <CommentField 297fe92c-9ea9-4254-b74e-7091d8dc82e7 '<hr>\n<h3><!--StartFragment--><strong>Pi&egrave;ces &agrave; join'>, <CommentField 2dcbe0d5-1fba-40fe-8416-28525cbc9faa '<p>Lors de la compl&eacute;tion de ce dossier, il vous sera dema'>, <CommentField 12 '<hr>\n<p align="center" style="margin-left: 33.6pt;"><strong>Pour'>, <CommentField 0d1b553d-b4b1-4e22-9d4e-e299ce5df6dc '<hr />'>, <BoolField 26 "Afficher les mentions d'information">, <CommentField 14 '<hr>\n<h6><strong>MENTIONS </strong><!--StartFragment--><strong>D'>], <PageField 42 'Structure porteuse'>: [<CommentField 107 '<h3><!--StartFragment--><strong>Structure porteuse</strong></h3>'>, <StringField 106 'Nom de la structure'>, <StringField 124 'N° de SIRET'>, <ItemField 111 'Statut'>, <DateField 113 'Date de création envisagée'>, <ItemField 112 'Type'>, <StringField 125 "Secteur d'activité">, <ItemField 114 'Code APE'>, <DateField 116 'Date de déclaration en préfecture'>, <DateField 117 'Date de publication au journal officiel'>, <CommentField 110 '<h3><!--StartFragment--><strong>Adresse</strong></h3>\n\n<hr>'>, <StringField 120 'Adresse'>, <ItemField 43 'Code postal et commune'>, <CommentField 126 '<h3><!--StartFragment--><strong>Représentant légal</strong></h3>'>, <StringField 127 'Nom'>, <StringField 128 'Prénom'>, <StringField 129 'Fonction'>, <StringField 130 'Numéro de téléphone'>, <EmailField 131 'Adresse e-mail'>, <CommentField 109 '<h3><!--StartFragment--><strong>Moyens humains</strong></h3>\n\n<h'>, <StringField 118 'Nombre de salariés'>, <StringField 119 'Total en équivalent temps plein'>, <CommentField 79edd892-56b6-45ed-835b-5002d4daa3cb '<h3><!--StartFragment--><strong>Subvention</strong></h3>\n\n<hr>'>, <ItemField 6e893fd1-cf16-41e9-bbb2-73a792a5e57a "Votre structure a-t-elle déjà bénéficié d'une subvention du Dépa">, <BlockField 168 'Subvention(s) précédente(s)'>], <PageField 15 'Contact'>: [<CommentField 30 '<h3><strong>Contact</strong></h3>\n\n<p>Informations concernant la'>, <StringField 18 'Nom'>, <StringField 19 'Prénom'>, <StringField 132 'Fonction'>, <StringField 100 'Numéro de téléphone'>, <EmailField 20 'Adresse e-mail'>], <PageField 102 'Projet'>: [<CommentField 39 '<h3><!--StartFragment--><strong>Projet</strong></h3>\n\n<hr>'>, <StringField 103 'Nom du projet'>, <CommentField 133 '<h3><!--StartFragment--><strong>Maturité</strong></h3>\n\n<hr>'>, <ItemField 134 'Phase du projet'>, <CommentField 135 '<p>Votre projet n&eacute;cessite une phase pr&eacute;alable &agr'>, <CommentField 136 '<p>Votre projet se situe dans la phase de lancement ou de d&eacu'>, <CommentField dcfe003a-1eb9-40d7-89aa-fff1ac495ee3 '<h3><!--StartFragment--><strong>Th&egrave;me</strong></h3>\n\n<hr>'>, <ItemsField eaad72b8-5803-4270-908e-08bb1e331078 'Thème du projet'>, <StringField 2110029b-0110-4f9f-8027-45171b8d08c5 'Préciser'>], <PageField e1d50add-70c1-4348-8aa8-284a9aead3cf 'Description du projet'>: [<CommentField 139 '<h3><!--StartFragment--><strong>Description</strong></h3>\n\n<hr>'>, <TextField 138 'Présentation générale - enjeux et objectifs'>, <ItemsField 141 'Territoire de mise en oeuvre du projet'>, <StringField fecb0f38-40e1-49a5-a384-0879a8f0327d 'Préciser'>, <CommentField de17829d-5c29-428b-80fb-696e7d834050 '<p>(Vous pouvez consulter cette carte pour avoir le d&eacute;cou'>], <PageField 09b7a167-6e8a-49c4-bf13-ec057a090f08 'Bénéficiaires'>: [<CommentField 46aecc3b-6577-4f5b-90f4-1fe4d38b25f7 '<h3><!--StartFragment--><strong>B&eacute;n&eacute;ficiaires</str'>, <TextField 142 'Quels sont les bénéficiaires du projet ?'>, <TextField 143 'A quels besoins identifiés sur le territoire le projet répond-il'>, <ItemField 144 'Votre projet s’appuie-t-il sur un diagnostic territorial ?'>, <TextField 145 'Précisez'>, <ItemField 7abd7937-2079-4d4b-a161-03c546d44772 'Les bénéficiaires ont-ils été associés à la définition du besoin'>, <TextField 4a88f3c5-68ea-4d46-af5c-b2c9e8b86597 'Précisez'>], <PageField 7cbe612f-7281-40f4-848b-26a7caaf31f2 'Partenariats et gouvernance'>: [<CommentField 155 '<h3><!--StartFragment--><strong>Partenariats et gouvernance</str'>, <ItemField ba812737-8ce8-4945-867d-b2b9b045f6fd 'Votre projet mobilise-t-il des partenariats avec les acteurs du '>, <TextField adf9a2fb-f94c-4cd2-a933-d4c73485d742 'Précisez'>], <PageField 6e1a2bb7-d0c0-40e2-9231-188874425521 'Impacts du projet'>: [<CommentField 147 '<h3><!--StartFragment--><strong>Impacts</strong></h3>\n\n<hr>'>, <TextField 146 'En quoi votre projet est-il innovant ?'>, <ItemsField c47077f4-596a-4edf-a0bc-f8dfd511e1cd 'Quelles ressources humaines votre projet mobilisera-t-il ?'>, <StringField f363d10e-9b2e-494e-abb6-df1e3904237a "Estimation du nombre d'emploi">, <StringField 19ac5e8f-355f-437d-9dae-ac558c6aef7f 'Emplois en équivalent temps plein'>, <StringField 392d2f17-eff6-4b0a-8ed8-4b9a06534f98 'Nombre de bénévoles'>, <StringField cb931f48-3d62-4c75-b100-7765af68cde4 "Equivalent en nombre d'heures de travail">, <TextField 149 'Quels sont les impacts attendus du projet, en termes économique '>, <TextField 150 'Quelles sont les modalités d’évaluation du projet envisagées ?'>, <ItemField 93d730d7-8a53-42a1-997e-0a788bfd33a0 'Pourriez-vous envisager d’engager à terme une démarche de mesure'>], <PageField f09a77cd-dcaf-41ac-a024-4dd1c9bdd6c8 'Mise en oeuvre du projet'>: [<CommentField 152 '<h3><!--StartFragment--><strong>Calendrier</strong></h3>\n\n<hr>'>, <TextField 3c7245cc-34c4-4f6b-9bac-9da41c63de77 'Quel est l’état d’avancement du projet : autorisation d’occupati'>, <ItemField 159 'Votre projet est-il suivi par un programme d’accompagnement ?'>, <TextField 160 'Précisez'>], <PageField 163 'Financement du projet'>: [<CommentField f7c12efb-e8f2-4a29-9485-fb1bca9f70fd '<h3><!--StartFragment--><strong>Financement</strong></h3>\n\n<hr>'>, <StringField 105 'Quel montant de financement départemental sollicitez-vous au tit'>, <StringField 104 'Coût total du projet (€)'>, <CommentField 26802448-06a5-42c2-bc0b-34088a50efe0 '<h3><!--StartFragment--><!--StartFragment--><span class="biglist'>, <StringField 377365c6-2b93-49b2-aad2-affca296b151 'Montant des investissements (€)'>, <StringField 166 'Nature des investissements'>, <CommentField fa045dd1-96a3-42a0-9bbb-c5ebd944b26e '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <StringField c278efee-8450-4c98-99a7-32302cc4d974 'Montant des dépenses de fonctionnement (€)'>, <StringField 167 'Nature des dépenses de fonctionnement'>, <CommentField e5d122eb-74b9-456e-8779-7bd1676dc37a '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <BlockField 169 'Quels sont les autres financements mobilisés ?'>], <PageField bf00bb1c-9767-4433-acf5-565492a33383 'Complément'>: [<CommentField 161 '<h3><!--StartFragment--><strong>Compl&eacute;ment</strong></h3>\n'>, <TextField 162 'Autres éléments que vous souhaitez porter à notre connaissance'>], <PageField 92e67bd8-aa34-462f-8d7d-4b6e3f34b484 'Pièces à joindre'>: [<CommentField beda7762-8f90-4a20-bd8b-3ea87153db5c '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <FileField 970f463c-8e60-4d19-adb1-964199ed01b9 'Statuts de l’association, datés et signés'>, <FileField 9c41105a-c5bb-40ba-bd5e-eb4365ea218b 'Liste des membres du bureau'>, <FileField 3dbe15cc-9e32-4463-9b2f-41782f0efee1 'Copie du récépissé de déclaration auprès du Tribunal d’Instance'>, <FileField d66a3333-5af4-4d4d-a8a4-2710e9757ee2 'Certificat d’inscription au répertoire des établissements (SIRET'>, <CommentField c9391390-3844-42f3-b4c7-e7c40be43f6f '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <CommentField ce78b354-d1f3-4bc0-a687-96a644a4077f '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <FileField 31148ac5-5283-405e-97ac-e78ecfcae9a2 'Budget prévisionnel de la structure établi sur 24 mois'>, <FileField fd5fde88-7f22-4c96-bb74-c80d128aa841 'Budget prévisionnel du projet établi sur 24 mois'>, <FileField 18de3a06-e442-46a3-bd90-9021e6e1eb0f 'Bilan et compte de résultat de l’année N-1'>, <FileField 611dcf92-570f-42d7-a655-fe9931445286 'Relevé d’identité bancaire'>, <CommentField 54bb0c20-1d30-4c0c-b4d5-0c710ac399e1 '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <FileField 154 'Calendrier du projet'>, <BlockField 170 'CV du ou des porteurs de projet'>, <BlockField 171 'Tout document complémentaire permettant de valoriser l’action et'>, <CommentField 3f114490-8e1a-449d-8a37-7ab6db4ff431 '<h3><!--StartFragment--><!--StartFragment--><!--StartFragment-->'>, <FileField cb5fa7d6-8c14-49d1-b3af-884b167eeb05 "Contrat d'engagement républicain">], <PageField 5ebe163d-b8e5-4b0e-9515-0c22116c25cc "Déclaration sur l'honneur">: [<CommentField 91a3cc85-0da2-4ae9-b922-23b3f0b7770d '<hr>\n<h3><!--StartFragment--><strong>D&eacute;claration sur l&#3'>, <ItemField fe48a0de-c4ff-4a03-ad67-b93ca198dac3 'Je suis le représentant légal de la structure'>, <FileField 3207a6ad-d53b-4d30-9074-e35b269f8c29 'Merci de joindre le pouvoir permettant d’engager la structure'>, <StringField dad9481e-cbf9-4624-9e10-62acf521710d 'Je soussigné(e),'>, <BoolField e90fbc98-a16b-457a-8b7a-cfcc8e66998d 'Certifie que la structure est régulièrement déclarée'>, <BoolField 6acb5120-b10a-4278-a835-a1530de9faf8 "Déclare qu'elle est en règle au regard de l’ensemble des déclara">, <BoolField 43adc3a6-591b-49dd-8fb5-b082e30c750d 'Certifie avoir pris connaissance du règlement de l’appel à proje'>, <BoolField 1351ebb8-9fe8-4107-98c6-2a6a05646a13  [...]
     formdata = <_wcs_Appel-A-Projet-Innovation-Sociale 'Appel à projet innovation sociale - n°None' id:None>
     i = 12
     objectdef = <FormDef 'Appel à projet innovation sociale' id:221>
     page = <PageField 92e67bd8-aa34-462f-8d7d-4b6e3f34b484 'Pièces à joindre'>
     previous_page = <PageField bf00bb1c-9767-4433-acf5-565492a33383 'Complément'>
     self = <wcs.testdef.TestDef object at 0x7f277a7ba670>

  File "/usr/lib/python3/dist-packages/wcs/testdef.py", line 176, in run
   174             else:
   175                 if self.expected_error:
>  176                     raise TestError(
   177                         _('Expected error "%s" but test completed with success.') % self.expected_error
   178                     )

  locals: 
     objectdef = <FormDef 'Appel à projet innovation sociale' id:221>
     self = <wcs.testdef.TestDef object at 0x7f277a7ba670>

  File "/usr/lib/python3/dist-packages/wcs/admin/tests.py", line 501, in run_tests
   499                 test.run(objectdef)
   500             except TestError as e:
>  501                 test.error = str(e)
   502 
   503         test_result = TestResult()

  locals: 
     objectdef = <FormDef 'Appel à projet innovation sociale' id:221>
     reason = 'Modification du champ «\xa0Adresse\xa0»'
     test = <wcs.testdef.TestDef object at 0x7f277a7ba670>
     testdefs = [<wcs.testdef.TestDef object at 0x7f277a7ba670>]

  File "/usr/lib/python3/dist-packages/wcs/admin/tests.py", line 484, in execute
   482         reason = self.kwargs['reason']
   483 
>  484         result = self.run_tests(objectdef, reason)
   485 
   486         if result and self.kwargs['snapshot_id'] is not None:

  locals: 
     objectdef = <FormDef 'Appel à projet innovation sociale' id:221>
     reason = 'Modification du champ «\xa0Adresse\xa0»'
     self = <TestsAfterJob id:905fdf56-633b-4e32-b9cc-c3b392410e33>

Révisions associées

Révision ebe24abd (diff)
Ajouté par Valentin Deniaud il y a 9 mois

testdef: do not crash on required block with optional fields (#80332)

Historique

#1

Mis à jour par Valentin Deniaud il y a 9 mois

  • Assigné à mis à Valentin Deniaud
#2

Mis à jour par Robot Gitea il y a 9 mois

  • Statut changé de Nouveau à En cours

Valentin Deniaud (vdeniaud) a ouvert une pull request sur Gitea concernant cette demande :

#3

Mis à jour par Robot Gitea il y a 9 mois

  • Statut changé de En cours à Solution proposée
#4

Mis à jour par Robot Gitea il y a 9 mois

  • Statut changé de Solution proposée à Solution validée

Paul Marillonnet (pmarillonnet) a approuvé une pull request sur Gitea concernant cette demande :

#5

Mis à jour par Robot Gitea il y a 9 mois

  • Statut changé de Solution validée à Résolu (à déployer)

Valentin Deniaud (vdeniaud) a mergé une pull request sur Gitea concernant cette demande :

#6

Mis à jour par Transition automatique il y a 9 mois

  • Statut changé de Résolu (à déployer) à Solution déployée
#7

Mis à jour par Transition automatique il y a 7 mois

Automatic expiration

Formats disponibles : Atom PDF