Пример #1
0
    def test_messages(self):
        """ test if the error messages are exported
        """
        form = ZMIForm("test", "<EncodingTest>")
        form.manage_addField("int_field", "int Field", "IntegerField")

        form2 = ZMIForm("test2", "ValueTest")
        request = FakeRequest()
        for message_key in form.int_field.get_error_names():
            request[message_key] = "test message for error key <%s>" % message_key
        form.int_field.manage_messages(REQUEST=request)

        xml = formToXML(form)
        XMLToForm(xml, form2)
        # print xml

        request.clear()
        request["field_int_field"] = "not a number"

        try:
            form.validate_all(request)
            self.fail("form should fail in validation")
        except FormValidationError, e:
            self.assertEquals(1, len(e.errors))
            text1 = e.errors[0].error_text
Пример #2
0
    def test_messages(self):
        """ test if the error messages are exported
        """
        factory = self.root.manage_addProduct['Formulator']
        factory.manage_add('form', 'Test Form')
        form = self.root.form
        form.manage_addField('int_field', 'int Field', 'IntegerField')

        form2 = ZMIForm('test2', 'ValueTest')
        request = TestRequest()
        for message_key in form.int_field.get_error_names():
            request.form[
                message_key] = 'test message for error key <%s>' % message_key
        form.int_field.manage_messages(REQUEST=request)

        xml = formToXML(form)
        XMLToForm(xml, form2)
        # print xml

        request = TestRequest(form={'field_int_field': 'not a number'})
        try:
            form.validate_all(request)
            self.fail('form should fail in validation')
        except FormValidationError, e:
            self.assertEquals(1, len(e.errors))
            text1 = e.errors[0].error_text
Пример #3
0
    def test_validatorMethod(self):
        self.root.manage_addProduct['Formulator'] \
            .manage_add('form', 'Test Form')
        form = self.root.form

        self.root.manage_addDTMLMethod('test_dtml','Test DTML','ok')

        form.manage_addField('string_field', '<string> Field', 'StringField')
        form.string_field.values['external_validator'] = Method('test_dtml')

        # test that the override works:
        self.assertEquals('ok',
                          form.string_field.get_value('external_validator')())

        # now serialize it:
        xml = formToXML(form)

        # get the external validator from the output
        # XXX this could be more elegant, I guess ...
        for line in xml.split('\n'):
            m = re.match(r'\s*<external_validator type="method">(.*?)</external_validator>\s*',
                         line)
            if m: break
        else:
            self.fail('external_validator not found in xml')
        self.assertEquals('test_dtml',m.group(1))

        # deserialize it
        self.root.manage_addProduct['Formulator'] \
            .manage_add('form2', 'Test Form')
        form2 = self.root.form2
        XMLToForm(xml, form2)
        self.assertEquals('ok',
                          form2.string_field.get_value('external_validator')())
Пример #4
0
    def test_messages(self):
        """ test if the error messages are exported
        """
        form = ZMIForm('test', '<EncodingTest>')
        form.manage_addField('int_field', 'int Field', 'IntegerField')
        
        form2 = ZMIForm('test2', 'ValueTest')
        request = FakeRequest()
        for message_key in form.int_field.get_error_names():
           request[message_key] = 'test message for error key <%s>' % message_key
        form.int_field.manage_messages(REQUEST=request)
        
        
        xml = formToXML(form)
        XMLToForm(xml, form2)
        # print xml

        request.clear()
        request['field_int_field'] = 'not a number'

        try:
            form.validate_all(request)
            self.fail('form should fail in validation')
        except FormValidationError, e:
            self.assertEquals(1, len(e.errors))
            text1 = e.errors[0].error_text
Пример #5
0
    def test_validatorMethod(self):
        self.root.manage_addProduct['Formulator'] \
            .manage_add('form', 'Test Form')
        form = self.root.form

        self.root.manage_addDTMLMethod('test_dtml', 'Test DTML', 'ok')

        form.manage_addField('string_field', '<string> Field', 'StringField')
        form.string_field.values['external_validator'] = Method('test_dtml')

        # test that the override works:
        self.assertEquals('ok',
                          form.string_field.get_value('external_validator')())

        # now serialize it:
        xml = formToXML(form)

        # get the external validator from the output
        # XXX this could be more elegant, I guess ...
        for line in xml.split('\n'):
            m = re.match(
                r'\s*<external_validator type="method">(.*?)</external_validator>\s*',
                line)
            if m: break
        else:
            self.fail('external_validator not found in xml')
        self.assertEquals('test_dtml', m.group(1))

        # deserialize it
        self.root.manage_addProduct['Formulator'] \
            .manage_add('form2', 'Test Form')
        form2 = self.root.form2
        XMLToForm(xml, form2)
        self.assertEquals('ok',
                          form2.string_field.get_value('external_validator')())
Пример #6
0
    def test_messages(self):
        """ test if the error messages are exported
        """
        form = ZMIForm('test', '<EncodingTest>')
        form.manage_addField('int_field', 'int Field', 'IntegerField')

        form2 = ZMIForm('test2', 'ValueTest')
        request = FakeRequest()
        for message_key in form.int_field.get_error_names():
            request[
                message_key] = 'test message for error key <%s>' % message_key
        form.int_field.manage_messages(REQUEST=request)

        xml = formToXML(form)
        XMLToForm(xml, form2)
        # print xml

        request.clear()
        request['field_int_field'] = 'not a number'

        try:
            form.validate_all(request)
            self.fail('form should fail in validation')
        except FormValidationError, e:
            self.assertEqual(1, len(e.errors))
            text1 = e.errors[0].error_text
Пример #7
0
    def test_messages(self):
        """ test if the error messages are exported
        """
        factory = self.root.manage_addProduct['Formulator']
        factory.manage_add('form', 'Test Form')
        form = self.root.form
        form.manage_addField('int_field', 'int Field', 'IntegerField')

        form2 = ZMIForm('test2', 'ValueTest')
        request = TestRequest()
        for message_key in form.int_field.get_error_names():
            request.form[message_key] = 'test message for error key <%s>' % message_key
        form.int_field.manage_messages(REQUEST=request)

        xml = formToXML(form)
        XMLToForm(xml, form2)
        # print xml

        request = TestRequest(form={'field_int_field': 'not a number'})
        try:
            form.validate_all(request)
            self.fail('form should fail in validation')
        except FormValidationError, e:
            self.assertEquals(1, len(e.errors))
            text1 = e.errors[0].error_text
Пример #8
0
    def test_emptyGroup(self):
        """ test bugfix: empty groups are allowed in the XMLForm """
        form = ZMIForm('test', 'GroupTest')
        form.add_group('empty')

        form2 = ZMIForm('test2', 'GroupTestCopy')

        xml = formToXML(form)
        XMLToForm(xml, form2)
        # print xml
        self.assertEqualForms(form, form2)
Пример #9
0
    def test_emptyGroup(self):
        """ test bugfix: empty groups are allowed in the XMLForm """
        form = ZMIForm('test', 'GroupTest')
        form.add_group('empty')

        form2 = ZMIForm('test2', 'GroupTestCopy')

        xml = formToXML(form)
        XMLToForm(xml, form2)
        # print xml
        self.assertEqualForms(form, form2)
Пример #10
0
    def test_serializeDateTimeValues(self):
        form = ZMIForm('test', 'DateTime')

        form.manage_addField('date_field', 'Date Field', 'DateTimeField')
        form.date_field.values['start_datetime'] = DateTime('2004/01/01 12:01:00')

        form2 = ZMIForm('test', 'DateTime2')

        xml = formToXML(form)
        XMLToForm(xml, form2)

        self.assertEqualForms(form, form2)
Пример #11
0
    def test_serializeDateTimeValues(self):
        form = ZMIForm('test', 'DateTime')

        form.manage_addField('date_field', 'Date Field', 'DateTimeField')
        form.date_field.values['start_datetime'] = DateTime(
            '2004/01/01 12:01:00')

        form2 = ZMIForm('test', 'DateTime2')

        xml = formToXML(form)
        XMLToForm(xml, form2)

        self.assertEqualForms(form, form2)
Пример #12
0
    def test_emptyGroup(self):
        """ test bugfix: empty groups are allowed in the XMLForm """
        form = ZMIForm('test', 'GroupTest')
        form.add_group('empty')
        
        form2 = ZMIForm('test2', 'GroupTestCopy')
        
        xml = formToXML(form)
        XMLToForm(xml, form2)
        # print xml

        # XXX actually the empty group is not rendered anyway, but
        # if we get here, we are behind the bug anyway ...
        self.assertEquals(form.render(), form2.render())

        self.assertEquals(form.get_groups(), form2.get_groups())
Пример #13
0
    def test_emptyGroup(self):
        """ test bugfix: empty groups are allowed in the XMLForm """
        form = ZMIForm('test', 'GroupTest')
        form.add_group('empty')

        form2 = ZMIForm('test2', 'GroupTestCopy')

        xml = formToXML(form)
        XMLToForm(xml, form2)
        # print xml

        # XXX actually the empty group is not rendered anyway, but
        # if we get here, we are behind the bug anyway ...
        self.assertEqual(form.render(), form2.render())

        self.assertEqual(form.get_groups(), form2.get_groups())
Пример #14
0
    def test_serializeProxyField(self):
        """Test formToXML and XMLToForm with proxyfields.
    """
        portal_skins = self.getSkinsTool()
        # Create the default field library with a template field
        portal_skins.manage_addProduct['OFSP'].manage_addFolder('erp5_geek')
        skin_folder = portal_skins._getOb('erp5_geek')
        skin_folder.manage_addProduct['ERP5Form'].addERP5Form(
            'Base_viewGeekFieldLibrary', 'View')
        form = skin_folder._getOb('Base_viewGeekFieldLibrary', None)
        form.manage_addField('my_title', 'My Geek Title', 'StringField')

        # Custom field library has to have an higher priority
        selection = portal_skins.getSkinPath('View')
        selection = selection.split(',')
        selection.append('erp5_geek')
        portal_skins.manage_skinLayers(skinpath=tuple(selection),
                                       skinname='View',
                                       add_skin=1)
        portal_skins.getPortalObject().changeSkin(None)

        skin_folder = portal_skins._getOb('custom')
        skin_folder.manage_addProduct['ERP5Form'].addERP5Form(
            'Base_viewGeek', 'View')
        form = skin_folder._getOb('Base_viewGeek', None)
        form.manage_addField('my_title', 'Title', 'ProxyField')
        field = form._getOb('my_title')
        field.manage_edit_xmlrpc(
            dict(form_id='Base_viewGeekFieldLibrary', field_id='my_title'))
        my_title = 'My Custom Proxy Title'
        field.manage_edit_surcharged_xmlrpc({'title': my_title})

        # Test xml serialisation of form.
        xml_string = formToXML(form)
        xml_tree = etree.fromstring(xml_string)
        field_node = xml_tree.find('groups/group/fields/field')
        self.assertEqual(field_node.find('type').text, 'ProxyField')
        self.assertTrue(field_node.find('delegated_list/title') is not None)

        skin_folder.manage_addProduct['ERP5Form'].addERP5Form(
            'Base_viewSuperGeek', 'View')
        form = skin_folder._getOb('Base_viewSuperGeek')
        # Test objectification of XML
        XMLToForm(xml_string, form)
        self.assertTrue(form.my_title.get_value('title'), my_title)
Пример #15
0
  def test_serializeProxyField(self):
    """Test formToXML and XMLToForm with proxyfields.
    """
    portal_skins = self.getSkinsTool()
    # Create the default field library with a template field
    portal_skins.manage_addProduct['OFSP'].manage_addFolder('erp5_geek')
    skin_folder = portal_skins._getOb('erp5_geek')
    skin_folder.manage_addProduct['ERP5Form'].addERP5Form(
        'Base_viewGeekFieldLibrary',
        'View')
    form = skin_folder._getOb('Base_viewGeekFieldLibrary', None)
    form.manage_addField('my_title', 'My Geek Title', 'StringField')

    # Custom field library has to have an higher priority
    selection = portal_skins.getSkinPath('View')
    selection = selection.split(',')
    selection.append('erp5_geek')
    portal_skins.manage_skinLayers(skinpath=tuple(selection),
                                skinname='View', add_skin=1)
    portal_skins.getPortalObject().changeSkin(None)

    skin_folder = portal_skins._getOb('custom')
    skin_folder.manage_addProduct['ERP5Form'].addERP5Form('Base_viewGeek',
                                                          'View')
    form = skin_folder._getOb('Base_viewGeek', None)
    form.manage_addField('my_title', 'Title', 'ProxyField')
    field = form._getOb('my_title')
    field.manage_edit_xmlrpc(dict(
      form_id='Base_viewGeekFieldLibrary', field_id='my_title'))
    my_title = 'My Custom Proxy Title'
    field.manage_edit_surcharged_xmlrpc({'title': my_title})

    # Test xml serialisation of form.
    xml_string = formToXML(form)
    xml_tree = etree.fromstring(xml_string)
    field_node = xml_tree.find('groups/group/fields/field')
    self.assertEqual(field_node.find('type').text, 'ProxyField')
    self.assertTrue(field_node.find('delegated_list/title') is not None)

    skin_folder.manage_addProduct['ERP5Form'].addERP5Form('Base_viewSuperGeek',
                                                          'View')
    form = skin_folder._getOb('Base_viewSuperGeek')
    # Test objectification of XML
    XMLToForm(xml_string, form)
    self.assertTrue(form.my_title.get_value('title'), my_title)
Пример #16
0
    def test_deserializeFlushesOldFields(self):
        # test that deserializing a form removes old values which
        # have been defined on that from previously
        # this may be an issue if one edits a form directly
        # via the ZMI "XML" tab; removing a field in the XML did not
        # remove that field from the form contents
        form = ZMIForm('test', 'Source')
        form2 = ZMIForm('test2', 'Target')

        form.manage_addField('date_field', 'Date Field', 'DateTimeField')
        form2.manage_addField('another_field', 'String Field', 'StringField')

        xml = formToXML(form)
        XMLToForm(xml, form2)

        self.assertEqualForms(form, form2)
        self.failIf( form2.has_field('another_field') )
        self.failIf('another_field' in form2.objectIds() )
Пример #17
0
    def test_deserializeFlushesOldFields(self):
        # test that deserializing a form removes old values which
        # have been defined on that from previously
        # this may be an issue if one edits a form directly
        # via the ZMI "XML" tab; removing a field in the XML did not
        # remove that field from the form contents
        form = ZMIForm('test', 'Source')
        form2 = ZMIForm('test2', 'Target')

        form.manage_addField('date_field', 'Date Field', 'DateTimeField')
        form2.manage_addField('another_field', 'String Field', 'StringField')

        xml = formToXML(form)
        XMLToForm(xml, form2)

        self.assertEqualForms(form, form2)
        self.failIf(form2.has_field('another_field'))
        self.failIf('another_field' in form2.objectIds())
Пример #18
0
    def test_escaping(self):
        """ test if the necessary elements are escaped in the XML.
        (Actually this test is very incomplete)
        """
        form = ZMIForm('test', '<EncodingTest>')
        # XXX don't test escaping of name, as needs to be javascript
        # valid anyway?
        form.name = 'name'
        form.add_group('a & b')

        form.manage_addField('string_field', '<string> Field', 'StringField')
        form.manage_addField('int_field', '<int> Field', 'IntegerField')
        form.manage_addField('float_field', '<Float> Field', 'FloatField')
        form.manage_addField('date_field', '<Date> Field', 'DateTimeField')
        form.manage_addField('list_field', '<List> Field', 'ListField')
        form.manage_addField('multi_field', '<Checkbox> Field',
                             'MultiCheckBoxField')

        form2 = ZMIForm('test2', 'ValueTest')

        xml = formToXML(form)
        XMLToForm(xml, form2)

        for field in form.get_fields():
            self.assert_(form2.has_field(field.getId()))
            field2 = getattr(form2, field.getId())
            # XXX test if values are the same
            self.assertEqual(field.values, field2.values)
            # test if default renderings are the same
            self.assertEqual(field.render(), field2.render())

        self.assertEqual(form.title, form2.title)
        self.assertEqual(form.name, form2.name)
        self.assertEqual(form.action, form2.action)
        self.assertEqual(form.enctype, form2.enctype)
        self.assertEqual(form.method, form2.method)

        # if we have forgotten something, this will usually remind us ;-)
        self.assertEqual(form.render(), form2.render())
Пример #19
0
    def test_escaping(self):
        """ test if the necessary elements are escaped in the XML.
        (Actually this test is very incomplete)
        """
        form = ZMIForm('test', '<EncodingTest>')
        # XXX don't test escaping of name, as needs to be javascript
        # valid anyway?
        form.name = 'name'
        form.add_group('a & b')

        form.manage_addField('string_field', '<string> Field', 'StringField')
        form.manage_addField('int_field', '<int> Field', 'IntegerField')
        form.manage_addField('float_field', '<Float> Field', 'FloatField')
        form.manage_addField('date_field', '<Date> Field', 'DateTimeField')
        form.manage_addField('list_field', '<List> Field', 'ListField')
        form.manage_addField('multi_field', '<Checkbox> Field', 'MultiCheckBoxField')

        form2 = ZMIForm('test2', 'ValueTest')

        xml = formToXML(form)
        XMLToForm(xml, form2)

        for field in form.get_fields():
            self.assert_(form2.has_field(field.getId()))
            field2 = getattr(form2, field.getId())
            # XXX test if values are the same
            self.assertEquals(field.values, field2.values)
            # test if default renderings are the same
            self.assertEquals(field.render(), field2.render())

        self.assertEquals(form.title, form2.title)
        self.assertEquals(form.name, form2.name)
        self.assertEquals(form.action, form2.action)
        self.assertEquals(form.enctype, form2.enctype)
        self.assertEquals(form.method, form2.method)

        # if we have forgotten something, this will usually remind us ;-)
        self.assertEquals(form.render(), form2.render())
Пример #20
0
    def test_escaping(self):
        """ test if the necessary elements are escaped in the XML.
        (Actually this test is very incomplete)
        """
        form = ZMIForm('test', '<EncodingTest>')
        # XXX don't test escaping of name, as needs to be javascript
        # valid anyway?
        form.name = 'name'
        form.add_group('a & b')

        form.manage_addField('string_field', '<string> Field', 'StringField')
        form.manage_addField('int_field', '<int> Field', 'IntegerField')
        form.manage_addField('float_field', '<Float> Field', 'FloatField')
        form.manage_addField('date_field', '<Date> Field', 'DateTimeField')
        form.manage_addField('list_field', '<List> Field', 'ListField')
        form.manage_addField('multi_field', '<Checkbox> Field', 'MultiCheckBoxField')

        form2 = ZMIForm('test2', 'ValueTest')

        xml = formToXML(form)
        XMLToForm(xml, form2)

        self.assertEqualForms(form, form2)
Пример #21
0
    def test_escaping(self):
        """ test if the necessary elements are escaped in the XML.
        (Actually this test is very incomplete)
        """
        form = ZMIForm('test', '<EncodingTest>')
        # XXX don't test escaping of name, as needs to be javascript
        # valid anyway?
        form.name = 'name'
        form.add_group('a & b')

        form.manage_addField('string_field', '<string> Field', 'StringField')
        form.manage_addField('int_field', '<int> Field', 'IntegerField')
        form.manage_addField('float_field', '<Float> Field', 'FloatField')
        form.manage_addField('date_field', '<Date> Field', 'DateTimeField')
        form.manage_addField('list_field', '<List> Field', 'ListField')
        form.manage_addField('multi_field', '<Checkbox> Field',
                             'MultiCheckBoxField')

        form2 = ZMIForm('test2', 'ValueTest')

        xml = formToXML(form)
        XMLToForm(xml, form2)

        self.assertEqualForms(form, form2)
Пример #22
0
    def test_simpleSerialize(self):
        form = ZMIForm('test', 'My test')
        xml = '''\
<?xml version="1.0" encoding="iso-8859-1" ?>

<form>
  <title></title>
  <name>tab_status_form</name>
  <action></action>
  <enctype></enctype>
  <method></method>

  <groups>
    <group>
      <title>Default</title>
      <fields>

      <field><id>message</id> <type>RawTextAreaField</type>
        <values>
          <alternate_name></alternate_name>
          <hidden type="int">0</hidden>
          <max_length></max_length>
          <width type="int">65</width>
          <external_validator></external_validator>
          <height type="int">7</height>
          <required type="int">0</required>
          <css_class></css_class>
          <default></default>
          <title>Message</title>
          <truncate type="int">0</truncate>
          <description></description>
          <extra>wrap="soft"</extra>
        </values>
        <tales>
        </tales>
      </field>
      <field><id>publish_datetime</id> <type>DateTimeField</type>
        <values>
          <date_only type="int">0</date_only>
          <alternate_name></alternate_name>
          <input_style>list</input_style>
          <hidden type="int">0</hidden>
          <input_order>dmy</input_order>
          <time_separator>:</time_separator>
          <date_separator>/</date_separator>
          <external_validator></external_validator>
          <required type="int">0</required>
          <default_now type="int">0</default_now>
          <css_class></css_class>
          <title>Publish time</title>
          <description></description>
        </values>
        <tales>
          <time_separator>python:form.time_punctuation</time_separator>
          <date_separator>python:form.date_punctuation</date_separator>
        </tales>
      </field>
      <field><id>expiration_datetime</id> <type>DateTimeField</type>
        <values>
          <date_only type="int">0</date_only>
          <alternate_name></alternate_name>
          <input_style>list</input_style>
          <css_class></css_class>
          <hidden type="int">0</hidden>
          <input_order>dmy</input_order>
          <time_separator>:</time_separator>
          <date_separator>/</date_separator>
          <external_validator></external_validator>
          <required type="int">0</required>
          <default_now type="int">0</default_now>
          <title>Expiration time</title>
          <description>If this document should expire, set the time.</description>
        </values>
        <tales>
          <time_separator>python:form.time_punctuation</time_separator>
          <date_separator>python:form.date_punctuation</date_separator>
        </tales>
      </field>
      <field><id>expires_flag</id> <type>CheckBoxField</type>
        <values>
          <alternate_name></alternate_name>
          <hidden type="int">0</hidden>
          <css_class></css_class>
          <default type="int">0</default>
          <title>Expire flag</title>
          <description>Turn on expiration time?</description>
          <external_validator></external_validator>
          <extra></extra>
        </values>
        <tales>
        </tales>
      </field>
      </fields>
    </group>
  </groups>
</form>'''
        XMLToForm(xml, form)
        s = formToXML(form)
        f = open('output1.txt', 'w')
        f.write(s)
        f.close()
        form2 = ZMIForm('another', 'Something')
        XMLToForm(xml, form2)
        f = open('output2.txt', 'w')
        f.write(formToXML(form2))
        f.close()
 def __call__(self, path):
     with open(path, 'w') as target:
         target.write(formToXML(self.content))
Пример #24
0
 def get_xml(self):
     """Get this form in XML serialization.
     """
     return formToXML(self)
Пример #25
0
    def test_serializeDeserializeEncodedMessages(self):
        # test for serializing and deserializing XML with non-ascii text in
        # the message tags
        xml1 = """\
<?xml version="1.0"?>

<form>
  <title></title>
  <row_length>4</row_length>
  <name>testform_bugs</name>
  <action></action>
  <method>POST</method>
  <enctype></enctype>
  <encoding>UTF-8</encoding>
  <stored_encoding>UTF-8</stored_encoding>
  <unicode_mode>false</unicode_mode>
  <i18n_domain></i18n_domain>
  <groups>
    <group>
      <title>Default</title>
      <fields>

      <field><id>string</id> <type>StringField</type>
        <values>
          <alternate_name></alternate_name>
          <css_class></css_class>
          <default></default>
          <description>मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</description>
          <display_maxwidth></display_maxwidth>
          <display_width type="int">20</display_width>
          <enabled type="int">1</enabled>
          <external_validator></external_validator>
          <extra></extra>
          <hidden type="int">0</hidden>
          <max_length></max_length>
          <required type="int">1</required>
          <title>मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</title>
          <truncate type="int">0</truncate>
          <unicode type="int">0</unicode>
          <whitespace_preserve type="int">0</whitespace_preserve>
        </values>
        <tales>
        </tales>
        <messages>
          <message name="external_validator_failed">मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</message>
          <message name="required_not_found">मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</message>
          <message name="too_long">मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</message>
        </messages>
      </field>
      </fields>
    </group>
  </groups>
</form>
"""

        # we're not expecting exceptions, and don't really care about anything
        # else, so no asserts here...
        form = ZMIForm('foo', 'Foo')
        XMLToForm(xml1, form)
        xml_roundtrip = formToXML(form)

        xml1 = """\
<?xml version="1.0"?>

<form>
  <title></title>
  <row_length>4</row_length>
  <name>testform_bugs</name>
  <action></action>
  <method>POST</method>
  <enctype></enctype>
  <encoding>UTF-8</encoding>
  <stored_encoding>UTF-8</stored_encoding>
  <unicode_mode>true</unicode_mode>
  <i18n_domain></i18n_domain>
  <groups>
    <group>
      <title>Default</title>
      <fields>

      <field><id>string</id> <type>StringField</type>
        <values>
          <alternate_name></alternate_name>
          <css_class></css_class>
          <default></default>
          <description>मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</description>
          <display_maxwidth></display_maxwidth>
          <display_width type="int">20</display_width>
          <enabled type="int">1</enabled>
          <external_validator></external_validator>
          <extra></extra>
          <hidden type="int">0</hidden>
          <max_length></max_length>
          <required type="int">1</required>
          <title>मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</title>
          <truncate type="int">0</truncate>
          <unicode type="int">0</unicode>
          <whitespace_preserve type="int">0</whitespace_preserve>
        </values>
        <tales>
        </tales>
        <messages>
          <message name="external_validator_failed">मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</message>
          <message name="required_not_found">मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</message>
          <message name="too_long">मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</message>
        </messages>
      </field>
      </fields>
    </group>
  </groups>
</form>
"""

        # we're not expecting exceptions, and don't really care about anything
        # else, so no asserts here...
        form = ZMIForm('foo', 'Foo')
        XMLToForm(xml1, form)
        xml_roundtrip = formToXML(form)
Пример #26
0
    def export(self, source, directory):
        assert ICodeSource.providedBy(source)

        # Step 1, export configuration.
        if not self._config.has_section('source'):
            self._config.add_section('source')

        def set_value(key, value):
            if value:
                self._config.set('source', key, value)
            elif self._config.has_option('source', key):
                self._config.remove_option('source', key)

        set_value('id', source.getId())
        set_value('title', source.get_title())
        set_value('description', source.get_description())
        set_value('render_id', source.get_script_id())
        set_value('alternate_render_ids', source.get_script_layers())
        set_value('usuable', source.is_usable() and "yes" or "no")
        set_value('previewable', source.is_previewable() and "yes" or "no")
        set_value('cacheable', source.is_cacheable() and "yes" or "no")

        configuration_filename = os.path.join(directory, CONFIGURATION_FILE)
        files_to_keep = [CONFIGURATION_FILE]
        with open(configuration_filename, 'wb') as config_file:
            self._config.write(config_file)

        # Step 2, export parameters if any or delete the file.
        parameters = source.get_parameters_form()
        if parameters is not None:
            parameters_filename = os.path.join(directory, PARAMETERS_FILE)
            files_to_keep.append(PARAMETERS_FILE)
            with open(parameters_filename, 'w') as parameters_file:
                try:
                    parameters_file.write(formToXML(parameters) + os.linesep)
                except:
                    logger.error(
                        "failed to export parameters for code source %s",
                        source.getId())

        existing_mapping = {}
        for identifier, filename, installer in self._get_installables():
            existing_mapping[identifier] = filename

        # Step 2, export files.
        for identifier, content in source.objectItems():
            factory = EXPORTERS.get(content.meta_type, None)
            if factory is None:
                logger.info(u"don't know how to export %s for code source %s",
                            content.meta_type, source.getId())
                continue
            exporter = factory(content)
            if identifier in existing_mapping:
                filename = existing_mapping[identifier]
            else:
                filename = exporter.get_path(identifier)
            try:
                exporter(os.path.join(directory, filename))
            except:
                logger.error("failed to export %s for code source %s",
                             content.meta_type, source.getId())
            files_to_keep.append(filename)

        # Step 3, purge files that were not recreated.
        for filename in os.listdir(directory):
            if filename not in files_to_keep:
                fullname = os.path.join(directory, filename)
                if os.path.isdir(fullname):
                    shutil.rmtree(fullname)
                else:
                    os.unlink(fullname)

        # Return the list of files
        return files_to_keep
Пример #27
0
            request.clear()
            for key, sub_field in empty_field.form.fields.iteritems():
              request['field_%s' % key] = sub_field.render_pdf()
            request.update(default_values)
            request.update( {'field_default':'None',
                             'field_required':'',
                             })
            empty_field.manage_edit(REQUEST=request)

        except ValidationError, e:
            self.fail('error when editing field %s; error message: %s' %
                       (e.field_id, e.error_text) )

        form2 = ZMIForm('test2', 'ValueTest')

        xml = formToXML(form)
        XMLToForm(xml, form2)

        for field in form.get_fields():
            self.assert_(form2.has_field(field.getId()))
            field2 = getattr(form2, field.getId())

            # XXX In Formulator, None and '' are treated as nearly
            # being identical, and validators often turn '' to None.
            # So there may be false positive, if we compare the values
            # naively.
            message = 'the values of %r and %r are different: %r != %r' \
                    % (field, field2, field.values, field2.values)
            self.assertEquals(sorted(field.values.iterkeys()),
                    sorted(field2.values.keys()),
                    message)
Пример #28
0
 def __call__(self, path):
     with open(path, 'w') as target:
         target.write(formToXML(self.content))
Пример #29
0
    def test_serializeDeserializeEncodedMessages(self):
        # test for serializing and deserializing XML with non-ascii text in
        # the message tags
        xml1 = """\
<?xml version="1.0"?>

<form>
  <title></title>
  <row_length>4</row_length>
  <name>testform_bugs</name>
  <action></action>
  <method>POST</method>
  <enctype></enctype>
  <encoding>UTF-8</encoding>
  <stored_encoding>UTF-8</stored_encoding>
  <unicode_mode>false</unicode_mode>
  <i18n_domain></i18n_domain>
  <groups>
    <group>
      <title>Default</title>
      <fields>

      <field><id>string</id> <type>StringField</type>
        <values>
          <alternate_name></alternate_name>
          <css_class></css_class>
          <default></default>
          <description>मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</description>
          <display_maxwidth></display_maxwidth>
          <display_width type="int">20</display_width>
          <enabled type="int">1</enabled>
          <external_validator></external_validator>
          <extra></extra>
          <hidden type="int">0</hidden>
          <max_length></max_length>
          <required type="int">1</required>
          <title>मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</title>
          <truncate type="int">0</truncate>
          <unicode type="int">0</unicode>
          <whitespace_preserve type="int">0</whitespace_preserve>
        </values>
        <tales>
        </tales>
        <messages>
          <message name="external_validator_failed">मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</message>
          <message name="required_not_found">मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</message>
          <message name="too_long">मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</message>
        </messages>
      </field>
      </fields>
    </group>
  </groups>
</form>
"""

        # we're not expecting exceptions, and don't really care about anything
        # else, so no asserts here...
        form = ZMIForm('foo', 'Foo')
        XMLToForm(xml1, form)
        xml_roundtrip = formToXML(form)

        xml1 = """\
<?xml version="1.0"?>

<form>
  <title></title>
  <row_length>4</row_length>
  <name>testform_bugs</name>
  <action></action>
  <method>POST</method>
  <enctype></enctype>
  <encoding>UTF-8</encoding>
  <stored_encoding>UTF-8</stored_encoding>
  <unicode_mode>true</unicode_mode>
  <i18n_domain></i18n_domain>
  <groups>
    <group>
      <title>Default</title>
      <fields>

      <field><id>string</id> <type>StringField</type>
        <values>
          <alternate_name></alternate_name>
          <css_class></css_class>
          <default></default>
          <description>मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</description>
          <display_maxwidth></display_maxwidth>
          <display_width type="int">20</display_width>
          <enabled type="int">1</enabled>
          <external_validator></external_validator>
          <extra></extra>
          <hidden type="int">0</hidden>
          <max_length></max_length>
          <required type="int">1</required>
          <title>मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</title>
          <truncate type="int">0</truncate>
          <unicode type="int">0</unicode>
          <whitespace_preserve type="int">0</whitespace_preserve>
        </values>
        <tales>
        </tales>
        <messages>
          <message name="external_validator_failed">मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</message>
          <message name="required_not_found">मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</message>
          <message name="too_long">मैं काँच खा सकता हूँ, मुझे उस से कोई पीडा</message>
        </messages>
      </field>
      </fields>
    </group>
  </groups>
</form>
"""

        # we're not expecting exceptions, and don't really care about anything
        # else, so no asserts here...
        form = ZMIForm('foo', 'Foo')
        XMLToForm(xml1, form)
        xml_roundtrip = formToXML(form)
Пример #30
0
            for key, sub_field in empty_field.form.fields.iteritems():
                request['field_%s' % key] = sub_field.render_pdf()
            request.update(default_values)
            request.update({
                'field_default': 'None',
                'field_required': '',
            })
            empty_field.manage_edit(REQUEST=request)

        except ValidationError, e:
            self.fail('error when editing field %s; error message: %s' %
                      (e.field_id, e.error_text))

        form2 = ZMIForm('test2', 'ValueTest')

        xml = formToXML(form)
        XMLToForm(xml, form2)

        for field in form.get_fields():
            self.assert_(form2.has_field(field.getId()))
            field2 = getattr(form2, field.getId())

            # XXX In Formulator, None and '' are treated as nearly
            # being identical, and validators often turn '' to None.
            # So there may be false positive, if we compare the values
            # naively.
            message = 'the values of %r and %r are different: %r != %r' \
                    % (field, field2, field.values, field2.values)
            self.assertEqual(sorted(field.values.iterkeys()),
                             sorted(field2.values.keys()), message)
Пример #31
0
    def test_simpleSerialize(self):
        form = ZMIForm('test', 'My test')
        xml = '''\
<?xml version="1.0" encoding="iso-8859-1" ?>

<form>
  <title></title>
  <name>tab_status_form</name>
  <action></action>
  <enctype></enctype>
  <method></method>

  <groups>
    <group>
      <title>Default</title>
      <fields>

      <field><id>message</id> <type>RawTextAreaField</type>
        <values>
          <alternate_name></alternate_name>
          <hidden type="int">0</hidden>
          <max_length></max_length>
          <width type="int">65</width>
          <external_validator></external_validator>
          <height type="int">7</height>
          <required type="int">0</required>
          <css_class></css_class>
          <default></default>
          <title>Message</title>
          <truncate type="int">0</truncate>
          <description></description>
          <extra>wrap="soft"</extra>
        </values>
        <tales>
        </tales>
      </field>
      <field><id>publish_datetime</id> <type>DateTimeField</type>
        <values>
          <date_only type="int">0</date_only>
          <alternate_name></alternate_name>
          <input_style>list</input_style>
          <hidden type="int">0</hidden>
          <input_order>dmy</input_order>
          <time_separator>:</time_separator>
          <date_separator>/</date_separator>
          <external_validator></external_validator>
          <required type="int">0</required>
          <default_now type="int">0</default_now>
          <css_class></css_class>
          <title>Publish time</title>
          <description></description>
        </values>
        <tales>
          <time_separator>python:form.time_punctuation</time_separator>
          <date_separator>python:form.date_punctuation</date_separator>
        </tales>
      </field>
      <field><id>expiration_datetime</id> <type>DateTimeField</type>
        <values>
          <date_only type="int">0</date_only>
          <alternate_name></alternate_name>
          <input_style>list</input_style>
          <css_class></css_class>
          <hidden type="int">0</hidden>
          <input_order>dmy</input_order>
          <time_separator>:</time_separator>
          <date_separator>/</date_separator>
          <external_validator></external_validator>
          <required type="int">0</required>
          <default_now type="int">0</default_now>
          <title>Expiration time</title>
          <description>If this document should expire, set the time.</description>
        </values>
        <tales>
          <time_separator>python:form.time_punctuation</time_separator>
          <date_separator>python:form.date_punctuation</date_separator>
        </tales>
      </field>
      <field><id>expires_flag</id> <type>CheckBoxField</type>
        <values>
          <alternate_name></alternate_name>
          <hidden type="int">0</hidden>
          <css_class></css_class>
          <default type="int">0</default>
          <title>Expire flag</title>
          <description>Turn on expiration time?</description>
          <external_validator></external_validator>
          <extra></extra>
        </values>
        <tales>
        </tales>
      </field>
      </fields>
    </group>
  </groups>
</form>'''
        XMLToForm(xml, form)
        s = formToXML(form)
        f = open('output1.txt', 'w')
        f.write(s)
        f.close()
        form2 = ZMIForm('another', 'Something')
        XMLToForm(xml, form2)
        f = open('output2.txt', 'w')
        f.write(formToXML(form2))
        f.close()
    def export(self, source, directory):
        assert ICodeSource.providedBy(source)

        # Step 1, export configuration.
        if not self._config.has_section('source'):
            self._config.add_section('source')

        def set_value(key, value):
            if value:
                self._config.set('source', key, value)
            elif self._config.has_option('source', key):
                self._config.remove_option('source', key)

        set_value('id', source.getId())
        set_value('title', source.get_title())
        set_value('description', source.get_description())
        set_value('render_id', source.get_script_id())
        set_value('alternate_render_ids', source.get_script_layers())
        set_value('usuable', source.is_usable() and "yes" or "no")
        set_value('previewable', source.is_previewable() and "yes" or "no")
        set_value('cacheable', source.is_cacheable() and "yes" or "no")

        configuration_filename = os.path.join(directory, CONFIGURATION_FILE)
        files_to_keep = [CONFIGURATION_FILE]
        with open(configuration_filename, 'wb') as config_file:
            self._config.write(config_file)

        # Step 2, export parameters if any or delete the file.
        parameters = source.get_parameters_form()
        if parameters is not None:
            parameters_filename = os.path.join(directory, PARAMETERS_FILE)
            files_to_keep.append(PARAMETERS_FILE)
            with open(parameters_filename, 'w') as parameters_file:
                try:
                    parameters_file.write(formToXML(parameters) + os.linesep)
                except:
                    logger.error(
                        "failed to export parameters for code source %s",
                        source.getId())

        existing_mapping = {}
        for identifier, filename, installer in self._get_installables():
            existing_mapping[identifier] = filename

        # Step 2, export files.
        for identifier, content in source.objectItems():
            factory = EXPORTERS.get(content.meta_type, None)
            if factory is None:
                logger.info(
                    u"don't know how to export %s for code source %s",
                    content.meta_type, source.getId())
                continue
            exporter = factory(content)
            if identifier in existing_mapping:
                filename = existing_mapping[identifier]
            else:
                filename = exporter.get_path(identifier)
            try:
                exporter(os.path.join(directory, filename))
            except:
                logger.error(
                    "failed to export %s for code source %s",
                    content.meta_type, source.getId())
            files_to_keep.append(filename)

        # Step 3, purge files that were not recreated.
        for filename in os.listdir(directory):
            if filename not in files_to_keep:
                fullname = os.path.join(directory, filename)
                if os.path.isdir(fullname):
                    shutil.rmtree(fullname)
                else:
                    os.unlink(fullname)

        # Return the list of files
        return files_to_keep