From 4e6b4dff91c345d06138ef184ca6665590e0d878 Mon Sep 17 00:00:00 2001 From: Massimo Santini Date: Tue, 7 May 2013 10:48:46 +0200 Subject: [PATCH 1/2] Fixes (hopefully) #46 --- flask_mongoengine/wtf/fields.py | 10 ++++++++++ flask_mongoengine/wtf/orm.py | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/flask_mongoengine/wtf/fields.py b/flask_mongoengine/wtf/fields.py index f189a432..222db179 100644 --- a/flask_mongoengine/wtf/fields.py +++ b/flask_mongoengine/wtf/fields.py @@ -161,3 +161,13 @@ def process_formdata(self, valuelist): if self.data == "": self.data = None +class BinaryField(TextAreaField): + """ + Custom TextAreaField that returns str (instead of unicode) data. + """ + + def process_formdata(self, valuelist): + if valuelist: + self.data = str( valuelist[0] ) + if self.data == "": + self.data = None diff --git a/flask_mongoengine/wtf/orm.py b/flask_mongoengine/wtf/orm.py index 6e6051ae..88fb3a65 100644 --- a/flask_mongoengine/wtf/orm.py +++ b/flask_mongoengine/wtf/orm.py @@ -14,7 +14,7 @@ from wtforms import fields as f, validators from mongoengine import ReferenceField -from flask.ext.mongoengine.wtf.fields import ModelSelectField, ModelSelectMultipleField, DictField, NoneStringField +from flask.ext.mongoengine.wtf.fields import ModelSelectField, ModelSelectMultipleField, DictField, NoneStringField, BinaryField from flask.ext.mongoengine.wtf.models import ModelForm __all__ = ( @@ -143,7 +143,7 @@ def conv_Binary(self, model, field, kwargs): #TODO: may be set file field that will save file`s data to MongoDB if field.max_bytes: kwargs['validators'].append(validators.Length(max=field.max_bytes)) - return f.TextAreaField(**kwargs) + return BinaryField(**kwargs) @converts('DictField') def conv_Dict(self, model, field, kwargs): From c0fce85e528a742c4a0686e50d4725e8a1bea8a5 Mon Sep 17 00:00:00 2001 From: Massimo Santini Date: Tue, 7 May 2013 12:53:39 +0200 Subject: [PATCH 2/2] Now the BinaryField value is wrapepd in bin_type; added a test to avoid regression --- flask_mongoengine/wtf/fields.py | 8 +++----- tests/test_forms.py | 13 +++++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/flask_mongoengine/wtf/fields.py b/flask_mongoengine/wtf/fields.py index 222db179..57f43b51 100644 --- a/flask_mongoengine/wtf/fields.py +++ b/flask_mongoengine/wtf/fields.py @@ -9,7 +9,7 @@ from wtforms.validators import ValidationError from mongoengine.queryset import DoesNotExist -from mongoengine.python_support import txt_type +from mongoengine.python_support import txt_type, bin_type __all__ = ( 'ModelSelectField', 'QuerySetSelectField', @@ -163,11 +163,9 @@ def process_formdata(self, valuelist): class BinaryField(TextAreaField): """ - Custom TextAreaField that returns str (instead of unicode) data. + Custom TextAreaField that converts its value with bin_type. """ def process_formdata(self, valuelist): if valuelist: - self.data = str( valuelist[0] ) - if self.data == "": - self.data = None + self.data = bin_type( valuelist[0] ) diff --git a/tests/test_forms.py b/tests/test_forms.py index d0bd8b4a..9a21ac66 100644 --- a/tests/test_forms.py +++ b/tests/test_forms.py @@ -32,6 +32,19 @@ def setUp(self): def tearDown(self): self.db.connection.drop_database(self.db_name) + def test_binaryfield(self): + + with self.app.test_request_context('/'): + db = self.db + + class Binary(db.Document): + binary = db.BinaryField() + + BinaryForm = model_form(Binary) + form = BinaryForm(MultiDict({'binary': '1'})) + self.assertTrue(form.validate()) + form.save() + def test_choices_coerce(self): with self.app.test_request_context('/'):