diff --git a/memphis/form/__init__.py b/memphis/form/__init__.py index f181707..33f3933 100644 --- a/memphis/form/__init__.py +++ b/memphis/form/__init__.py @@ -37,13 +37,13 @@ from memphis.form.fields import TextField from memphis.form.fields import IntegerField from memphis.form.fields import FloatField -from memphis.form.fields import Decimal +from memphis.form.fields import DecimalField from memphis.form.fields import TextAreaField from memphis.form.fields import FileField from memphis.form.fields import LinesField from memphis.form.fields import PasswordField -from memphis.form.fields import CheckBoxField -from memphis.form.fields import SingleCheckBoxField +from memphis.form.fields import CheckboxField +from memphis.form.fields import CheckboxsField from memphis.form.fields import DateField from memphis.form.fields import DateTimeField from memphis.form.fields import JSDateField diff --git a/memphis/form/field.py b/memphis/form/field.py index ae9b5fb..dea98f0 100644 --- a/memphis/form/field.py +++ b/memphis/form/field.py @@ -2,7 +2,8 @@ from collections import OrderedDict from validator import All -from interfaces import _, null, required, Invalid, FORM_INPUT, FORM_DISPLAY +from interfaces import _, null, required +from interfaces import Invalid, FORM_INPUT, FORM_DISPLAY fields = {} @@ -311,8 +312,7 @@ def updateTerms(self, context): if self.terms is None: self.terms = self.vocabulary if self.terms is None: - self.terms = config.registry.getMultiAdapter( - (context, self), IVocabulary) + raise ValueError("Vocabulary is not specified") return self.terms diff --git a/memphis/form/fields.py b/memphis/form/fields.py index 1a05f5f..0eb3b9d 100644 --- a/memphis/form/fields.py +++ b/memphis/form/fields.py @@ -1,5 +1,5 @@ """ Basic fields """ -import datetime, iso8601 +import datetime, iso8601, decimal from memphis import view from memphis.view import formatter from memphis.form import vocabulary @@ -90,7 +90,7 @@ class FloatField(Number, TextField): num = float -class Decimal(Number): +class DecimalField(Number, TextField): __doc__ = _(u'Decimal input widget') field('decimal') @@ -148,20 +148,31 @@ class LinesField(TextAreaField): 'sequence element.') field('lines') + klass = u'textlines-widget' def serialize(self, value): - return u'\n'.join(value) + if value is null or not value: + return null - def extract(self, default = null): - value = self.params.get(self.name, default) - if value is not default: - return value.split(u'\n') - return value + try: + return u'\n'.join(value) + except Exception: + raise Invalid(self, + _('"${val}" is not a list', + mapping={'val': value}), + ) - tmpl_input = view.template( - "memphis.form:templates/fields/textlines_input.pt") - tmpl_display = view.template( - "memphis.form:templates/fields/textlines_display.pt") + def deserialize(self, value): + if not value: + return null + + try: + return [s.strip() for s in value.split()] + except Exception: + raise Invalid(self, + _('"${val}" is not a list', + mapping={'val': value}), + ) class PasswordField(TextField): @@ -177,15 +188,13 @@ class PasswordField(TextField): "memphis.form:templates/fields/password_display.pt") -class CheckBoxField(SequenceField): - """Input type checkbox widget implementation.""" +class CheckboxsField(SequenceField): + __doc__ = _('HTML Checkboxs input based widget.') - klass = u'checkbox-widget' - items = () + field('checkboxs') - __fname__ = 'checkbox' - __title__ = _('Checkbox widget') - __description__ = _('HTML Checkbox input based widget.') + klass = u'checkboxs-widget' + items = () tmpl_input = view.template( "memphis.form:templates/fields/checkbox_input.pt") @@ -196,8 +205,7 @@ def isChecked(self, term): return term.token in self.value def update(self, request): - """See z3c.form.interfaces.IWidget.""" - super(CheckBoxWidget, self).update(request) + super(CheckboxsField, self).update(request) self.items = [] for count, term in enumerate(self.terms): @@ -211,15 +219,12 @@ def update(self, request): 'label':label, 'checked':checked}) -class SingleCheckBoxField(CheckBoxField): - """Single Input type checkbox widget implementation.""" +class CheckboxField(CheckboxsField): + __doc__ = _('Single checkbox widget.') + field('checkbox') klass = u'single-checkbox-widget' - __fname__ = 'singlecheckbox' - __title__ = _('Single checkbox') - __description__ = _('Single checkbox widget.') - def updateTerms(self): if self.terms is None: self.terms = vocabulary.Vocabulary() diff --git a/memphis/form/templates/fields/date_input.pt b/memphis/form/templates/fields/date_input.pt index 9c4ac8c..152eaf8 100644 --- a/memphis/form/templates/fields/date_input.pt +++ b/memphis/form/templates/fields/date_input.pt @@ -5,9 +5,9 @@ ${view.include('jquery-ui')} }); - - + + + ***** + diff --git a/memphis/form/templates/fields/radiohoriz_input.pt b/memphis/form/templates/fields/radiohoriz_input.pt index 84b3a17..0b112ee 100644 --- a/memphis/form/templates/fields/radiohoriz_input.pt +++ b/memphis/form/templates/fields/radiohoriz_input.pt @@ -13,9 +13,7 @@ readonly context.readonly; alt context.alt; accesskey context.accesskey; - checked python: checked and 'checked' or None" /> + checked checked and 'checked' or None" /> ${item['label']} - diff --git a/memphis/form/templates/fields/text_display.pt b/memphis/form/templates/fields/text_display.pt index f9b5223..dbb91c0 100644 --- a/memphis/form/templates/fields/text_display.pt +++ b/memphis/form/templates/fields/text_display.pt @@ -1,6 +1,5 @@ - diff --git a/memphis/form/templates/fields/text_input.pt b/memphis/form/templates/fields/text_input.pt index 23e96af..e478520 100644 --- a/memphis/form/templates/fields/text_input.pt +++ b/memphis/form/templates/fields/text_input.pt @@ -1,6 +1,4 @@ - diff --git a/memphis/form/templates/fields/textlines_input.pt b/memphis/form/templates/fields/textlines_input.pt deleted file mode 100644 index 2625add..0000000 --- a/memphis/form/templates/fields/textlines_input.pt +++ /dev/null @@ -1,15 +0,0 @@ -') + + +class TestCheckboxsField(Base): + + def _makeOne(self, name, **kw): + return form.CheckboxsField(name, **kw) + + def test_fields_decimal(self): + request = DummyRequest() + + field = self._makeOne('test') + field = field.bind('', [1,2,3], {}) + #field.update(request) + + #self.assertIs(field.serialize(form.null), form.null) + #self.assertEqual(field.serialize([1,2,3]), ['1','2','3']) + #self.assertRaises(form.Invalid, field.serialize, 1) + + #self.assertIs(field.deserialize(''), form.null) + #self.assertEqual(field.deserialize(['1','2','3']), [1,2,3]) + #self.assertRaises(form.Invalid, field.deserialize, 5) + + #self.assertEqual( + # strip(field.render(request)), + # '') +