Changeset 310
- Timestamp:
- 03/17/08 17:12:05 (9 months ago)
- Files:
-
- trunk/src/dm/datetimeconvertor.py (modified) (1 diff)
- trunk/src/dm/dom/base.py (modified) (1 diff)
- trunk/src/dm/dom/meta.py (modified) (2 diffs)
- trunk/src/dm/dom/metatest.py (modified) (2 diffs)
- trunk/src/dm/view/manipulator.py (modified) (19 diffs)
- trunk/src/dm/webkit/__init__.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/dm/datetimeconvertor.py
r248 r310 57 57 ) 58 58 59 class RDateConvertor(object): 60 "Converts between HTML (string) and python (mx.DateTime.Date)." 61 62 def fromHTML(self, dateHtml): 63 day, month, year = None, None, None 64 if dateHtml in ['', None]: 65 return None 66 elif dateHtml.__class__ == "".__class__: 67 day, month, year = [int(i) for i in dateHtml.split('-')] 68 elif dateHtml.__class__ == datetime.date: 69 day, month, year = dateHtml.day, dateHtml.month, dateHtml.year 70 elif dateHtml.__class__ == datetime.datetime: 71 day, month, year = dateHtml.day, dateHtml.month, dateHtml.year 72 else: 73 msg = "Unsupported date input type: %s" % dateHtml.__class__ 74 raise Exception(msg) 75 return mx.DateTime.Date(year, month, day) 76 77 def toHTML(self, dateObject): 78 if dateObject in ['', None]: 79 return '' 80 return "%s-%s-%s" % ( 81 str(dateObject.day).zfill(2), 82 str(dateObject.month).zfill(2), 83 str(dateObject.year).zfill(4), 84 ) 85 trunk/src/dm/dom/base.py
r307 r310 174 174 "Supports: len(registry)" 175 175 return self.count() 176 #return self.database.countRecords(self.typeName)177 176 178 177 def __iter__(self, **kwds): trunk/src/dm/dom/meta.py
r308 r310 8 8 from dm.datetimeconvertor import DateTimeConvertor 9 9 from dm.datetimeconvertor import DateConvertor 10 from dm.datetimeconvertor import RDateConvertor 10 11 import Image 11 12 from dm.dictionarywords import IMAGES_DIR_PATH … … 394 395 395 396 397 class RDate(DateTime): 398 "Models a domain object date attribute, but with 'reverse' ANSI format." 399 400 convertor = RDateConvertor() 401 402 396 403 class Boolean(ValueObjectAttr): 397 404 "Models a domain object boolean attribute." trunk/src/dm/dom/metatest.py
r247 r310 16 16 unittest.makeSuite(TestDateTime), 17 17 unittest.makeSuite(TestDate), 18 unittest.makeSuite(TestRDate), 18 19 unittest.makeSuite(TestBoolean_True), 19 20 unittest.makeSuite(TestBoolean_False), … … 152 153 153 154 155 class TestRDate(MetaAttrTestCase): 156 157 fieldClass = dm.dom.meta.RDate 158 typeName = 'RDate' 159 isValueObject = True 160 htmlValue = '03-06-2007' 161 htmlRepr = '03-06-2007' 162 domValue = mx.DateTime.Date(2007, 6, 3) 163 dbValue = mx.DateTime.Date(2007, 6, 3) 164 165 def test_convertor(self): 166 self.failUnless(self.field.convertor) 167 168 154 169 class TestBoolean_True(MetaAttrTestCase): 155 170 trunk/src/dm/view/manipulator.py
r308 r310 1 1 from dm.ioc import * 2 2 from dm.exceptions import KforgeCommandError 3 from dm.webkit import *4 3 from dm.dictionarywords import WEBKIT_NAME 4 from dm.webkit import Manipulator 5 from dm.webkit import htmlescape 5 6 import re 7 import dm.webkit 6 8 7 9 class BaseManipulator(Manipulator): … … 12 14 commands = RequiredFeature('CommandSet') 13 15 logger = RequiredFeature('Logger') 16 webkit = dm.webkit 14 17 15 18 def getValidationErrors(self, data): … … 117 120 choices = metaAttr.getAllChoices(self.domainObject) 118 121 if webkitName == 'django': 119 field = SelectMultipleField(122 field = self.webkit.SelectMultipleField( 120 123 field_name=metaAttr.name, 121 124 is_required=isFieldRequired, … … 124 127 ) 125 128 elif webkitName == 'pylons': 126 field = SelectField(129 field = self.webkit.SelectField( 127 130 metaAttr.name, 128 131 multiple=True, … … 134 137 choices = [('', '-- select option --')] + choices 135 138 if webkitName == 'django': 136 field = SelectField(139 field = self.webkit.SelectField( 137 140 field_name=metaAttr.name, 138 141 is_required=isFieldRequired, … … 140 143 ) 141 144 elif webkitName == 'pylons': 142 field = SelectField(145 field = self.webkit.SelectField( 143 146 metaAttr.name, 144 147 ) 145 148 else: # need to find a way to only do this for string keys 146 149 if webkitName == 'django': 147 field = TextField(148 field_name=metaAttr.name, 149 is_required=isFieldRequired, 150 ) 151 elif webkitName == 'pylons': 152 field = TextField(150 field = self.webkit.TextField( 151 field_name=metaAttr.name, 152 is_required=isFieldRequired, 153 ) 154 elif webkitName == 'pylons': 155 field = self.webkit.TextField( 153 156 metaAttr.name, 154 157 size=40 … … 158 161 if metaAttr.name[0:5] == 'email': 159 162 if webkitName == 'django': 160 field = EmailField(163 field = self.webkit.EmailField( 161 164 field_name=metaAttr.name, 162 165 is_required=isFieldRequired, … … 164 167 ) 165 168 elif webkitName == 'pylons': 166 field = TextField(169 field = self.webkit.TextField( 167 170 metaAttr.name, 168 171 size=36 … … 170 173 else: 171 174 if webkitName == 'django': 172 field = TextField(175 field = self.webkit.TextField( 173 176 field_name=metaAttr.name, 174 177 is_required=isFieldRequired, 175 178 ) 176 179 elif webkitName == 'pylons': 177 field = TextField(180 field = self.webkit.TextField( 178 181 metaAttr.name, 179 182 size=40 … … 182 185 elif metaAttr.typeName == 'Text': 183 186 if webkitName == 'django': 184 field = LargeTextField(187 field = self.webkit.LargeTextField( 185 188 field_name=metaAttr.name, 186 189 is_required=isFieldRequired, … … 189 192 ) 190 193 elif webkitName == 'pylons': 191 field = TextField(194 field = self.webkit.TextField( 192 195 metaAttr.name, 193 196 size=40 … … 195 198 elif metaAttr.typeName == 'Password': 196 199 if webkitName == 'django': 197 field = PasswordField(198 field_name=metaAttr.name, 199 is_required=isFieldRequired, 200 ) 201 elif webkitName == 'pylons': 202 field = TextField(200 field = self.webkit.PasswordField( 201 field_name=metaAttr.name, 202 is_required=isFieldRequired, 203 ) 204 elif webkitName == 'pylons': 205 field = self.webkit.TextField( 203 206 metaAttr.name, 204 207 size=40 … … 206 209 elif metaAttr.typeName == 'Integer': 207 210 if webkitName == 'django': 208 field = IntegerField(209 field_name=metaAttr.name, 210 is_required=isFieldRequired, 211 ) 212 elif webkitName == 'pylons': 213 field = TextField(211 field = self.webkit.IntegerField( 212 field_name=metaAttr.name, 213 is_required=isFieldRequired, 214 ) 215 elif webkitName == 'pylons': 216 field = self.webkit.TextField( 214 217 metaAttr.name, 215 218 size=40 … … 217 220 elif metaAttr.typeName == 'Boolean': 218 221 if webkitName == 'django': 219 field = CheckboxField(222 field = self.webkit.CheckboxField( 220 223 field_name=metaAttr.name 221 224 # doesn't accept 'is_required' parameter 222 225 ) 223 226 elif webkitName == 'pylons': 224 field = TextField(227 field = self.webkit.TextField( 225 228 metaAttr.name, 226 229 size=40 … … 228 231 elif metaAttr.typeName == 'Url': 229 232 if webkitName == 'django': 230 field = URLField(231 field_name=metaAttr.name, 232 is_required=isFieldRequired, 233 ) 234 elif webkitName == 'pylons': 235 field = TextField(233 field = self.webkit.URLField( 234 field_name=metaAttr.name, 235 is_required=isFieldRequired, 236 ) 237 elif webkitName == 'pylons': 238 field = self.webkit.TextField( 236 239 metaAttr.name, 237 240 size=40 … … 239 242 elif metaAttr.typeName == 'DateTime': 240 243 if webkitName == 'django': 241 field = DatetimeField(242 field_name=metaAttr.name, 243 is_required=isFieldRequired, 244 ) 245 elif webkitName == 'pylons': 246 field = TextField(244 field = self.webkit.DatetimeField( 245 field_name=metaAttr.name, 246 is_required=isFieldRequired, 247 ) 248 elif webkitName == 'pylons': 249 field = self.webkit.TextField( 247 250 metaAttr.name, 248 251 size=40 … … 250 253 elif metaAttr.typeName == 'Date': 251 254 if webkitName == 'django': 252 field = DateField( 253 field_name=metaAttr.name, 254 is_required=isFieldRequired, 255 ) 256 elif webkitName == 'pylons': 257 field = TextField( 255 field = self.webkit.DateField( 256 field_name=metaAttr.name, 257 is_required=isFieldRequired, 258 ) 259 elif webkitName == 'pylons': 260 field = self.webkit.TextField( 261 metaAttr.name, 262 size=40 263 ) 264 elif metaAttr.typeName == 'RDate': 265 if webkitName == 'django': 266 field = self.webkit.RDateField( 267 field_name=metaAttr.name, 268 is_required=isFieldRequired, 269 ) 270 elif webkitName == 'pylons': 271 field = self.webkit.TextField( 258 272 metaAttr.name, 259 273 size=40 … … 261 275 else: 262 276 if webkitName == 'django': 263 field = TextField(264 field_name=metaAttr.name, 265 is_required=isFieldRequired, 266 ) 267 elif webkitName == 'pylons': 268 field = TextField(277 field = self.webkit.TextField( 278 field_name=metaAttr.name, 279 is_required=isFieldRequired, 280 ) 281 elif webkitName == 'pylons': 282 field = self.webkit.TextField( 269 283 metaAttr.name, 270 284 size=40 … … 272 286 elif metaAttr.typeName == 'ImageFile': 273 287 if webkitName == 'django': 274 field = FileUploadField(288 field = self.webkit.FileUploadField( 275 289 field_name=metaAttr.name, 276 290 is_required=isFieldRequired, 277 291 ) 278 292 elif webkitName == 'pylons': 279 field = TextField(293 field = self.webkit.TextField( 280 294 metaAttr.name, 281 295 size=40 trunk/src/dm/webkit/__init__.py
r308 r310 12 12 import django 13 13 from django.utils.html import escape as htmlescape 14 from django.forms import validators 14 15 from django.forms import Manipulator 15 16 from django.forms import SelectField, SelectMultipleField, TextField … … 52 53 53 54 55 56 57 # Django extensions, without a home. 58 if webkitName == 'django': 59 60 import sre 61 _rdatere = r'((?:0?[1-9])|(?:[12][0-9])|(?:3[0-1]))-((?:0?[1-9])|(?:1[0-2]))-(19|2\d)\d{2}' 62 ransi_date_re = sre.compile('^%s$' % _rdatere) 63 64 class RDateField(TextField): 65 """A FormField that automatically converts its data to a datetime.date objec 66 t. 67 The data should be in the format DD-MM-YYYY""" 68 def __init__(self, field_name, is_required=False, validator_list=None): 69 if validator_list is None: validator_list = [] 70 validator_list = [self.isValidDate] + validator_list 71 TextField.__init__(self, field_name, length=10, maxlength=10, 72 is_required=is_required, validator_list=validator_list) 73 74 def isValidDate(self, field_data, all_data): 75 try: 76 if not ransi_date_re.search(field_data): 77 raise ValidationError( 78 'Enter a valid date in DD-MM-YYYY format.' 79 ) 80 except validators.ValidationError, e: 81 raise validators.CriticalValidationError, e.messages 82 83 def html2python(data): 84 "Converts the field into a datetime.date object" 85 import time, datetime 86 try: 87 time_tuple = time.strptime(data, '%d-%m-%Y') 88 return datetime.date(*time_tuple[0:3]) 89 except (ValueError, TypeError): 90 return None 91 html2python = staticmethod(html2python) 92 93 def render(self, data): 94 return super(RDateField, self).render(data) 95 96
