Projet

Général

Profil

0001-forms-include-functions-in-XML-export-10650.patch

Frédéric Péters, 13 avril 2016 17:37

Télécharger (4,86 ko)

Voir les différences:

Subject: [PATCH] forms: include functions in XML export (#10650)

 tests/test_formdef_import.py | 32 ++++++++++++++++++++++++++++++++
 wcs/formdef.py               | 43 ++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 74 insertions(+), 1 deletion(-)
tests/test_formdef_import.py
12 12
from wcs.categories import Category
13 13
from wcs.formdef import FormDef, fields, FormdefImportError
14 14
from wcs.workflows import Workflow
15
from wcs.roles import Role
15 16
from qommon.misc import indent_xml as indent
16 17

  
17 18
from utilities import create_temporary_pub
......
308 309
    fd2 = assert_xml_import_export_works(formdef)
309 310
    assert fd2.fields[0].type == 'page'
310 311
    assert fd2.fields[0].post_conditions == formdef.fields[0].post_conditions
312

  
313
def test_workflow_roles():
314
    Role.wipe()
315
    role = Role(name='blah')
316
    role.store()
317

  
318
    formdef = FormDef()
319
    formdef.name = 'foo'
320
    formdef.fields = []
321
    formdef.workflow_roles = {'_receiver': role.id}
322
    fd2 = assert_xml_import_export_works(formdef, include_id=True)
323
    assert fd2.workflow_roles.get('_receiver') == role.id
324

  
325
    fd2 = assert_xml_import_export_works(formdef, include_id=False)
326
    assert fd2.workflow_roles.get('_receiver') == role.id
327

  
328
    xml_export = export_to_indented_xml(formdef, include_id=True)
329
    xml_export_no_id = export_to_indented_xml(formdef, include_id=False)
330

  
331
    # same id, different name
332
    role.name = 'blah 2'
333
    role.store()
334

  
335
    fd2 = FormDef.import_from_xml_tree(xml_export, include_id=True)
336
    assert fd2.workflow_roles.get('_receiver') == role.id
337
    fd2 = FormDef.import_from_xml_tree(xml_export, include_id=False)
338
    assert fd2.workflow_roles.get('_receiver') is None
339

  
340
    role.remove_self()
341
    fd2 = FormDef.import_from_xml_tree(xml_export, include_id=True)
342
    assert fd2.workflow_roles.get('_receiver') is None
wcs/formdef.py
31 31
from qommon.publisher import get_publisher_class
32 32

  
33 33
from formdata import FormData
34
from roles import logged_users_role
34
from roles import Role, logged_users_role
35 35
from categories import Category
36 36
import fields
37 37
import data_sources
......
675 675
        for field in self.fields or []:
676 676
            fields.append(field.export_to_xml(charset=charset, include_id=include_id))
677 677

  
678
        if self.workflow_roles:
679
            roles = ET.SubElement(root, 'roles')
680
            for role_key, role_id in self.workflow_roles.items():
681
                if role_id is None:
682
                    continue
683
                role_id = str(role_id)
684
                if role_id.startswith('_') or role_id == 'logged-users':
685
                    role = unicode(role_id, charset)
686
                else:
687
                    try:
688
                        role = unicode(Role.get(role_id).name, charset)
689
                    except KeyError:
690
                        role = unicode(role_id, charset)
691
                sub = ET.SubElement(roles, 'role')
692
                sub.attrib['role_key'] = role_key
693
                if include_id:
694
                    sub.attrib['role_id'] = role_id
695
                sub.text = role
696

  
678 697
        options = ET.SubElement(root, 'options')
679 698
        for option in self.workflow_options or []:
680 699
            element = ET.SubElement(options, 'option')
......
813 832
                        formdef.workflow_id = w.id
814 833
                        break
815 834

  
835
        if tree.find('roles') is not None:
836
            roles_node = tree.find('roles')
837
            formdef.workflow_roles = {}
838
            for child in roles_node.getchildren():
839
                role_key = child.attrib['role_key']
840
                role_id = None
841
                value = child.text.encode(charset)
842
                if value.startswith('_') or value == 'logged-users':
843
                    role_id = value
844
                elif include_id:
845
                    role_id = child.attrib.get('role_id')
846
                else:
847
                    for role in Role.select(ignore_errors=True):
848
                        if role.name == value:
849
                            role_id = role.id
850
                            break
851

  
852
                if role_id and not Role.has_key(role_id):
853
                    role_id = None
854

  
855
                formdef.workflow_roles[role_key] = role_id
856

  
816 857
        return formdef
817 858

  
818 859
    def get_detailed_email_form(self, formdata, url):
819
-