[Erp5-report] r41427 nicolas - in /erp5/trunk/products/Formulator: Field.py Widget.py

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Dec 14 17:22:28 CET 2010


Author: nicolas
Date: Tue Dec 14 17:22:28 2010
New Revision: 41427

URL: http://svn.erp5.org?rev=41427&view=rev
Log:
Implement render_odt_variable for TextWidget, FloatWidget, IntegerWidget and DateTimeWidget.

render_odt_variable is able to render text:variable-set nodes like:
 <text:variable-set text:name="my_title" 
                    office:value-type="string">Title</text:variable-set>
or 
 <text:variable-set text:name="my_float" 
                    office:value-type="float" 
                    office:value="0.23" 
                    style:data-style-name="N2">0.23</text:variable-set>



Modified:
    erp5/trunk/products/Formulator/Field.py
    erp5/trunk/products/Formulator/Widget.py

Modified: erp5/trunk/products/Formulator/Field.py
URL: http://svn.erp5.org/erp5/trunk/products/Formulator/Field.py?rev=41427&r1=41426&r2=41427&view=diff
==============================================================================
--- erp5/trunk/products/Formulator/Field.py [utf8] (original)
+++ erp5/trunk/products/Formulator/Field.py [utf8] Tue Dec 14 17:22:28 2010
@@ -221,6 +221,16 @@ class Field:
                                       REQUEST, render_prefix, attr_dict,
                                       local_name)
 
+    security.declarePrivate('_render_odt_variable_helper')
+    def _render_odt_variable_helper(self, key, value, as_string, ooo_builder,
+                           REQUEST, render_prefix, attr_dict, local_name):
+      value = self._get_default(key, value, REQUEST)
+      __traceback_info__ = ('key=%s value=%r' % (key, value))
+      return self.widget.render_odt_variable(self, value, as_string,
+                                             ooo_builder, REQUEST,
+                                             render_prefix, attr_dict,
+                                             local_name)
+
     security.declarePrivate('_get_default')
     def _get_default(self, key, value, REQUEST):
         if value is not None:
@@ -315,6 +325,15 @@ class Field:
                                      ooo_builder, REQUEST, render_prefix,
                                      attr_dict, local_name)
 
+    security.declareProtected('View', 'render_odt_variable')
+    def render_odt_variable(self, key=None, value=None, as_string=True,
+        ooo_builder=None, REQUEST=None, render_prefix=None, attr_dict=None,
+        local_name='variable-set', key_prefix=None):
+      field_key = self.generate_field_key(key=key, key_prefix=key_prefix)
+      return self._render_odt_variable_helper(field_key, value, as_string,
+                                     ooo_builder, REQUEST, render_prefix,
+                                     attr_dict, local_name)
+
     security.declareProtected('View', 'render_odt_view')
     def render_odt_view(self, value=None, as_string=True, ooo_builder=None,
         REQUEST=None, render_prefix=None, attr_dict=None, local_name='p'):

Modified: erp5/trunk/products/Formulator/Widget.py
URL: http://svn.erp5.org/erp5/trunk/products/Formulator/Widget.py?rev=41427&r1=41426&r2=41427&view=diff
==============================================================================
--- erp5/trunk/products/Formulator/Widget.py [utf8] (original)
+++ erp5/trunk/products/Formulator/Widget.py [utf8] Tue Dec 14 17:22:28 2010
@@ -224,6 +224,28 @@ class Widget:
       return etree.tostring(text_node)
     return text_node
 
+  def render_odt_variable(self, field, value, as_string, ooo_builder, REQUEST,
+                      render_prefix, attr_dict, local_name):
+    """
+      Return a field value rendered in odt format as read-only mode.
+      - as_string return value as string or as xml object
+      - attr_dict can be used for additional attributes (like style).
+      - ooo_builder wrapper of ODF zipped archive usefull to insert images
+      - local_name local-name of the node returned by this render
+    """
+    if attr_dict is None:
+      attr_dict = {}
+    attr_dict['{%s}value-type' % OFFICE_URI] = 'string'
+    if isinstance(value, str):
+      #required by lxml
+      value = value.decode('utf-8')
+    text_node = Element('{%s}%s' % (TEXT_URI, local_name), nsmap=NSMAP)
+    text_node.text = value
+    text_node.attrib.update(attr_dict)
+    if as_string:
+      return etree.tostring(text_node)
+    return text_node
+
   def render_odg(self, field, value, as_string, ooo_builder, REQUEST,
                  render_prefix, attr_dict, local_name):
     """This render dedicated to render fields inside OOo document
@@ -1496,6 +1518,27 @@ class DateTimeWidget(Widget):
       return etree.tostring(text_node)
     return text_node
 
+  def render_odt_variable(self, field, value, as_string, ooo_builder, REQUEST,
+                      render_prefix, attr_dict, local_name):
+    """
+      Return a field value rendered in odt format as read-only mode.
+      - as_string return value as string or as xml object
+      - attr_dict can be used for additional attributes (like style).
+      - ooo_builder wrapper of ODF zipped archive usefull to insert images
+      - local_name local-name of the node returned by this render
+    """
+    if attr_dict is None:
+      attr_dict = {}
+    attr_dict['{%s}value-type' % OFFICE_URI] = 'date'
+    if not value and field.get_value('default_now'):
+      value = DateTime()
+    text_node = Element('{%s}%s' % (TEXT_URI, local_name), nsmap=NSMAP)
+    attr_dict['{%s}date-value' % OFFICE_URI] = value.strftime('%Y-%m-%d %H:%M:%S')
+    text_node.attrib.update(attr_dict)
+    if as_string:
+      return etree.tostring(text_node)
+    return text_node
+
   def render_odg_view(self, field, value, as_string, ooo_builder, REQUEST,
                       render_prefix, attr_dict, local_name):
     """Transform DateTime into string then call default renderer
@@ -1644,6 +1687,29 @@ class IntegerWidget(TextWidget) :
                                       ooo_builder, REQUEST, render_prefix, 
                                       attr_dict, local_name)
 
+  def render_odt_variable(self, field, value, as_string, ooo_builder, REQUEST,
+                      render_prefix, attr_dict, local_name):
+    """
+      Return a field value rendered in odt format as read-only mode.
+      - as_string return value as string or as xml object
+      - attr_dict can be used for additional attributes (like style).
+      - ooo_builder wrapper of ODF zipped archive usefull to insert images
+      - local_name local-name of the node returned by this render
+    """
+    if attr_dict is None:
+      attr_dict = {}
+    attr_dict['{%s}value-type' % OFFICE_URI] = 'float'
+    if isinstance(value, str):
+      #required by lxml
+      value = value.decode('utf-8')
+    text_node = Element('{%s}%s' % (TEXT_URI, local_name), nsmap=NSMAP)
+    text_node.text = str(value)
+    attr_dict['{%s}value' % OFFICE_URI] = str(value)
+    text_node.attrib.update(attr_dict)
+    if as_string:
+      return etree.tostring(text_node)
+    return text_node
+
 IntegerWidgetInstance = IntegerWidget()
 class FloatWidget(TextWidget):
 
@@ -1837,6 +1903,29 @@ class FloatWidget(TextWidget):
       return etree.tostring(text_node)
     return text_node
 
+  def render_odt_variable(self, field, value, as_string, ooo_builder, REQUEST,
+                      render_prefix, attr_dict, local_name):
+    """
+      Return a field value rendered in odt format as read-only mode.
+      - as_string return value as string or as xml object
+      - attr_dict can be used for additional attributes (like style).
+      - ooo_builder wrapper of ODF zipped archive usefull to insert images
+      - local_name local-name of the node returned by this render
+    """
+    if attr_dict is None:
+      attr_dict = {}
+    attr_dict['{%s}value-type' % OFFICE_URI] = 'float'
+    if isinstance(value, str):
+      #required by lxml
+      value = value.decode('utf-8')
+    text_node = Element('{%s}%s' % (TEXT_URI, local_name), nsmap=NSMAP)
+    text_node.text = str(value)
+    attr_dict['{%s}value' % OFFICE_URI] = str(value)
+    text_node.attrib.update(attr_dict)
+    if as_string:
+      return etree.tostring(text_node)
+    return text_node
+
   def render_odg(self, field, value, as_string, ooo_builder, REQUEST,
       render_prefix, attr_dict, local_name):
     if attr_dict is None:



More information about the Erp5-report mailing list