Projet

Général

Profil

Development #77106

Workflow: plus d'une action création d'une demande, dont le wf a aussi une action création d'une demande

Ajouté par Lauréline Guérin il y a environ un an. Mis à jour il y a environ un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
28 avril 2023
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

Description

Formdef formdef1 avec un workflow wf1 avec:

- action création d'une demande, formdef2
- dans le même statut, une autre action création d'une demande, formdef2

Formdef formdef2 avec un workflow wf2 avec:
- action création d'une demande, formdef3

Création d'un formdata formdef1, échec, "Détection d’une création récursive de fiches"

Je pense que je reproduis avec le test suivant:

def test_recursive_create_formdata_with_subformdata(pub):
    FormDef.wipe()
    pub.loggederror_class.wipe()

    # simple sub formdef, which workflow does not create other related formdatas.
    subformdef = FormDef()
    subformdef.name = 'test subform'
    subformdef.fields = [
        StringField(id='0', label='string', varname='foo_string'),
    ]
    subformdef.store()

    formdef = FormDef()
    formdef.name = 'test form'
    formdef.fields = [
        StringField(id='0', label='string', varname='foo_string'),
    ]
    formdef.store()

    wf = Workflow(name='create-formdata')
    wf.possible_status = Workflow.get_default_workflow().possible_status[:]
    create = wf.possible_status[1].add_action('create_formdata', id='_create', prepend=True)
    create.label = 'create a sub form'
    create.varname = 'resubmitted'
    create.mappings = [Mapping(field_id='0', expression='test')]
    create.formdef_slug = subformdef.url_name
    create2 = wf.possible_status[1].add_action('create_formdata', id='_create', prepend=True)
    create2.label = 'create a sub form 2, the same'
    create2.varname = 'resubmitted'
    create2.mappings = [Mapping(field_id='0', expression='test')]
    create2.formdef_slug = subformdef.url_name
    wf.store()

    formdef.workflow_id = wf.id
    formdef.store()

    formdata = formdef.data_class()()
    formdata.data = {}
    formdata.just_created()
    formdata.store()
    formdata.perform_workflow()

    assert formdef.data_class().count() == 1
    assert subformdef.data_class().count() == 2
    assert pub.loggederror_class.count() == 0

    formdef.data_class().wipe()
    subformdef.data_class().wipe()

    # now add formdata creation in subformdef workflow
    subsubformdef = FormDef()
    subsubformdef.name = 'test subsubform'
    subsubformdef.fields = [
        StringField(id='0', label='string', varname='foo_string'),
    ]
    subsubformdef.store()

    subwf = Workflow(name='create-formdata-again')
    subwf.possible_status = Workflow.get_default_workflow().possible_status[:]
    create = subwf.possible_status[1].add_action('create_formdata', id='_create', prepend=True)
    create.label = 'create a subsub form'
    create.varname = 'resubmitted'
    create.mappings = [Mapping(field_id='0', expression='test')]
    create.formdef_slug = subsubformdef.url_name
    subwf.store()

    subformdef.workflow_id = subwf.id
    subformdef.store()

    formdata = formdef.data_class()()
    formdata.data = {}
    formdata.just_created()
    formdata.store()
    formdata.perform_workflow()

    assert formdef.data_class().count() == 1
    assert subformdef.data_class().count() == 2  # fail
    assert subsubformdef.data_class().count() == 2  # fail
    assert pub.loggederror_class.count() == 0  # fail, Detected recursive creation of forms

Demandes liées

Lié à w.c.s. - Bug #74574: CardDef branché sur un workflow qui exécute une action de création de fiche du même model (RecursionError: maximum recursion depth exceeded while calling a Python object)Fermé16 février 2023

Actions

Révisions associées

Révision d0bd8b48 (diff)
Ajouté par Frédéric Péters il y a environ un an

workflows: redo recursion detection using workflow execution stacks (#77106)

Révision 889532cb (diff)
Ajouté par Frédéric Péters il y a environ un an

workflows: redo recursion detection using workflow execution stacks (#77106)

Historique

#2

Mis à jour par Lauréline Guérin il y a environ un an

  • Lié à Bug #74574: CardDef branché sur un workflow qui exécute une action de création de fiche du même model (RecursionError: maximum recursion depth exceeded while calling a Python object) ajouté
#3

Mis à jour par Robot Gitea il y a environ un an

  • Tracker changé de Bug à Development
  • Statut changé de Nouveau à En cours
  • Assigné à mis à Frédéric Péters

Frédéric Péters (fpeters) a ouvert une pull request sur Gitea concernant cette demande :

#4

Mis à jour par Robot Gitea il y a environ un an

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

Mis à jour par Robot Gitea il y a environ un an

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

Lauréline Guérin (lguerin) a approuvé une pull request sur Gitea concernant cette demande :

#6

Mis à jour par Robot Gitea il y a environ un an

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

Frédéric Péters (fpeters) a mergé une pull request sur Gitea concernant cette demande :

#7

Mis à jour par Transition automatique il y a environ un an

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

Mis à jour par Transition automatique il y a 10 mois

Automatic expiration

Formats disponibles : Atom PDF