Projet

Général

Profil

Bug #46937

le nettoyage des fichiers inutilisés parcourt trop naïvement workflow_data

Ajouté par Thomas Noël il y a plus de 3 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
24 septembre 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Exception:
  type = '<class 'AttributeError'>', value = ''str' object has no attribute 'values''

Stack trace (most recent call first):
  File "/usr/lib/python3/dist-packages/wcs/formdef.py", line 1631, in accumulate_filenames
  1629                     elif isinstance(field_data, dict) and isinstance(field_data.get('data'), list):
  1630                         for subfield_rowdata in field_data.get('data'):
> 1631                             for field_data in subfield_rowdata.values():  
  1632                                 if is_upload(field_data):
  1633                                     yield field_data.get_fs_filename()

  locals: 
     CardDef = <class 'wcs.carddef.CardDef'>
     field_data = {'data': ['CARTE', '0', ''], 'err': 0}
     formdef = <FormDef "Demander un badge d'accès en déchèterie" id:241>
     is_attachment = <function clean_unused_files.<locals>.is_attachment at 0x7f5c58f69f28>
     is_upload = <function clean_unused_files.<locals>.is_upload at 0x7f5c58f69ea0>
     option_data = 'demande de badge'
     part = <wcs.wf.register_comment.JournalEvolutionPart object at 0x7f5c55fbecf8>
     publisher = <wcs.compat.CompatWcsPublisher object at 0x7f5c59ae8c88>
     subfield_rowdata = 'CARTE'

Ça vient de #46431 et c'est parce que le parcours des champs où on cherche des fichiers passe aussi par formdata.workflow_data qui peut contenir n'importe quoi, par exemple ici un résultat d'appel webservice avec un "data".

Il faut aller un peu plus loin : vérifier que field_data.get('data') est une liste de dictionnaires.


Fichiers

Révisions associées

Révision f4886f5b (diff)
Ajouté par Thomas Noël il y a plus de 3 ans

misc: refine file search in blocks when looking for unused files (#46937)

Historique

#2

Mis à jour par Thomas Noël il y a plus de 3 ans

  • Description mis à jour (diff)
#3

Mis à jour par Thomas Noël il y a plus de 3 ans

#4

Mis à jour par Serghei Mihai il y a plus de 3 ans

question de style: pourquoi pas?

if not isinstance(subfield_rowdata, dict):
    continue
for block_field_data in subfield_rowdata.values():
    ...

#5

Mis à jour par Thomas Noël il y a plus de 3 ans

Serghei Mihai a écrit :

question de style: pourquoi pas?
[...]

Parce que ça fait deux lignes au lieu d'une ? ;)

Blague à part, faire un if:continue c'est intéressant avant un grand nombre de lignes qu'on ne veut pas indenter. Ici il y en a juste trois, donc je préfère programmer correctement. Mais je suis vieux.

#6

Mis à jour par Serghei Mihai il y a plus de 3 ans

  • Statut changé de Solution proposée à Solution validée
  • Assigné à mis à Thomas Noël

Go.

#7

Mis à jour par Thomas Noël il y a plus de 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit f4886f5b0a2cf7ac2907c24688d1d5ee1dd8f2df
Author: Thomas NOEL <tnoel@entrouvert.com>
Date:   Thu Sep 24 10:08:22 2020 +0200

    misc: refine file search in blocks when looking for unused files (#46937)

#8

Mis à jour par Frédéric Péters il y a plus de 3 ans

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

Formats disponibles : Atom PDF