# HG changeset patch # User Thierry Florac # Date 1545312036 -3600 # Node ID e25ea6a1f7a1f655285ae6c6dcf3f17404528332 # Parent 672f168d13d3c088faad68ae0fc9cd19fc6b700b Added Bytes to TextAreaWidget data converter diff -r 672f168d13d3 -r e25ea6a1f7a1 src/pyams_form/widget/__init__.py --- a/src/pyams_form/widget/__init__.py Tue Oct 30 12:27:16 2018 +0100 +++ b/src/pyams_form/widget/__init__.py Thu Dec 20 14:20:36 2018 +0100 @@ -29,18 +29,18 @@ from z3c.form.button import ButtonAction from z3c.form.converter import BaseDataConverter, DatetimeDataConverter as BaseDatetimeDataConverter, \ FormatterValidationError -from z3c.form.interfaces import DISPLAY_MODE, IButtonAction, IDataConverter, IFieldWidget, INPUT_MODE, ITextWidget, \ +from z3c.form.interfaces import DISPLAY_MODE, IButtonAction, IDataConverter, IFieldWidget, INPUT_MODE, ITextAreaWidget, \ IWidgetLayoutTemplate, NO_VALUE from z3c.form.widget import FieldWidget, WidgetLayoutFactory, WidgetTemplateFactory from zope.component import getGlobalSiteManager from zope.interface import Interface, directlyProvides, implementer, implementer_only from zope.pagetemplate.interfaces import IPageTemplate from zope.schema.fieldproperty import FieldProperty -from zope.schema.interfaces import IChoice, IDate, IDatetime, IFloat, IInt, IList, ISet, ITime, ITuple +from zope.schema.interfaces import IBytes, IChoice, IDate, IDatetime, IFloat, IInt, IList, ISet, ITime, ITuple from pyams_form.interfaces.form import IActionWidget, ICloseWidget, IColorWidget, IDateWidget, IDatetimeWidget, \ - IFormLayer, IHTMLWidget, IResetWidget, ISEOTextLineWidget, ISelect2Widget, ITextLineListWidget, ITimeWidget, \ - IIntegerWidget, IFloatWidget + IFloatWidget, IFormLayer, IHTMLWidget, IIntegerWidget, IResetWidget, ISEOTextLineWidget, ISelect2Widget, \ + ITextLineListWidget, ITimeWidget from pyams_form.schema import IActionButton, ICloseButton, IResetButton from pyams_skin.interfaces.tinymce import ITinyMCEConfiguration from pyams_utils.adapter import adapter_config @@ -303,6 +303,23 @@ # +# Bytes field widget +# + +@adapter_config(context=(IBytes, ITextAreaWidget), provides=IDataConverter) +class BytesFieldDataConverter(BaseDataConverter): + """Bytes field data converter""" + + error_message = _("Invalid UTF-8 encoded data") + + def toWidgetValue(self, value): + return value.decode('utf-8') if isinstance(value, bytes) else value + + def toFieldValue(self, value): + return value.encode('utf-8') if isinstance(value, str) else value + + +# # Integer field widget #