Changeset 193
- Timestamp:
- 03/15/06 15:39:47 (3 years ago)
- Files:
-
- trunk/forms/__init__.py (modified) (2 diffs)
- trunk/forms/converters.py (modified) (3 diffs)
- trunk/forms/examples/types.py (modified) (2 diffs)
- trunk/forms/forms.css (modified) (1 diff)
- trunk/forms/test/test_converters.py (modified) (2 diffs)
- trunk/forms/test/test_types.py (modified) (2 diffs)
- trunk/forms/test/test_widget.py (modified) (1 diff)
- trunk/forms/types.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/forms/__init__.py
r192 r193 4 4 5 5 6 version_info = (0, 7, 2)6 version_info = (0, 8, 0) 7 7 version = '.'.join([str(i) for i in version_info]) 8 8 … … 56 56 registerAdapter(converters.NullConverter, File, iforms.IFileConvertible) 57 57 registerAdapter(converters.NullConverter, Sequence, iforms.ISequenceConvertible) 58 try: 59 Decimal 60 except NameError: 61 pass 62 else: 63 registerAdapter(TextInput, Decimal, iforms.IWidget) 64 registerAdapter(converters.DecimalToStringConverter, Decimal, iforms.IStringConvertible) 58 65 del SequenceKeyLabelAdapter 59 66 del registerAdapter trunk/forms/converters.py
r63 r193 4 4 5 5 from datetime import date, time 6 try: 7 import decimal 8 haveDecimal = True 9 except ImportError: 10 haveDecimal = False 6 11 from nevow.compy import Adapter 7 12 from forms import iforms, validation … … 37 42 if not value: 38 43 return None 44 # "Cast" the value to the correct type. For some strange reason, 45 # Python's decimal.Decimal type raises an ArithmeticError when it's 46 # given a dodgy value. 39 47 try: 40 48 value = self.cast(value) 41 except ValueError:49 except (ValueError, ArithmeticError): 42 50 raise validation.FieldValidationError("Not a valid number") 43 51 return value … … 50 58 class FloatToStringConverter(NumberToStringConverter): 51 59 cast = float 60 61 62 if haveDecimal: 63 class DecimalToStringConverter(NumberToStringConverter): 64 cast = decimal.Decimal 52 65 53 66 trunk/forms/examples/types.py
r134 r193 1 try: 2 import decimal 3 haveDecimal = True 4 except ImportError: 5 haveDecimal = False 1 6 import forms 2 7 from forms.examples import main … … 12 17 form.addField('aInteger', forms.Integer()) 13 18 form.addField('aFloat', forms.Float()) 19 if haveDecimal: 20 form.addField('aDecimal', forms.Decimal()) 14 21 form.addField('aBoolean', forms.Boolean()) 15 22 form.addField('aDate', forms.Date()) trunk/forms/forms.css
r175 r193 49 49 .nevow-form .field.date .inputs input { 50 50 width: auto; 51 } 52 53 .nevow-form .field.decimal .inputs input { 54 width: 8em; 51 55 } 52 56 trunk/forms/test/test_converters.py
r63 r193 1 1 from datetime import date, time 2 try: 3 import decimal 4 haveDecimal = True 5 except ImportError: 6 haveDecimal = False 2 7 from twisted.trial import unittest 3 8 from forms import converters, validation … … 39 44 self.assertEquals(c.toType('-1.5'), -1.5) 40 45 self.assertRaises(validation.FieldValidationError, c.toType, 'foo') 46 47 if haveDecimal: 48 def test_decimalToString(self): 49 from decimal import Decimal 50 c = converters.DecimalToStringConverter(None) 51 self.assertEquals(c.fromType(None), None) 52 self.assertEquals(c.fromType(Decimal("1")), '1') 53 self.assertEquals(c.fromType(Decimal("0")), '0') 54 self.assertEquals(c.fromType(Decimal("-1")), '-1') 55 self.assertEquals(c.fromType(Decimal("1.5")), '1.5') 56 self.assertEquals(c.toType(''), None) 57 self.assertEquals(c.toType(' '), None) 58 self.assertEquals(c.toType('1'), Decimal("1")) 59 self.assertEquals(c.toType('0'), Decimal("0")) 60 self.assertEquals(c.toType('-1'), Decimal("-1")) 61 self.assertEquals(c.toType('-1.5'), Decimal("-1.5")) 62 self.assertEquals(c.toType('-1.863496'), Decimal("-1.863496")) 63 self.assertRaises(validation.FieldValidationError, c.toType, 'foo') 41 64 42 65 def test_booleanToString(self): trunk/forms/test/test_types.py
r179 r193 1 1 from datetime import date, time 2 try: 3 import decimal 4 haveDecimal = True 5 except ImportError: 6 haveDecimal = False 2 7 from twisted.trial import unittest 3 8 import forms … … 70 75 self.assertRaises(forms.FieldValidationError, forms.Float(required=True).validate, None) 71 76 77 if haveDecimal: 78 def testDecimal(self): 79 from decimal import Decimal 80 self.assertEquals(forms.Decimal().validate(None), None) 81 self.assertEquals(forms.Decimal().validate(Decimal('0')), Decimal('0')) 82 self.assertEquals(forms.Decimal().validate(Decimal('0.0')), Decimal('0.0')) 83 self.assertEquals(forms.Decimal().validate(Decimal('.1')), Decimal('0.1')) 84 self.assertEquals(forms.Decimal().validate(Decimal('1')), Decimal('1')) 85 self.assertEquals(forms.Decimal().validate(Decimal('-1')), Decimal('-1')) 86 self.assertEquals(forms.Decimal().validate(Decimal('-1.86')), 87 Decimal('-1.86')) 88 self.assertEquals(forms.Decimal(missing=Decimal("1.0")).validate(None), 89 Decimal("1.0")) 90 self.assertEquals(forms.Decimal(missing=Decimal("1.0")).validate(Decimal("2.0")), 91 Decimal("2.0")) 92 self.assertRaises(forms.FieldValidationError, forms.Decimal(required=True).validate, None) 93 72 94 def testBoolean(self): 73 95 self.assertEquals(forms.Boolean().validate(None), None) trunk/forms/test/test_widget.py
r58 r193 72 72 r = processInput(type(forms.String()), 'foo', ['\xc2\xa3']) 73 73 self.assert_(r == u'\xa3') 74 test.func_name = 'test_%s'%type.__name__75 74 return test 76 75 trunk/forms/types.py
r181 r193 3 3 """ 4 4 5 try: 6 import decimal 7 haveDecimal = True 8 except ImportError: 9 haveDecimal = False 10 from zope.interface import implements 11 5 12 from forms import iforms, validation 6 from zope.interface import implements7 13 8 14 … … 98 104 99 105 106 if haveDecimal: 107 class Decimal(Type): 108 """ 109 Forms type for Python 2.4's decimal.Decimal type. 110 """ 111 112 100 113 class Sequence(Type): 101 114 … … 123 136 ] 124 137 138 if haveDecimal: 139 __all__.append('Decimal')
