web/form.py
branchtls-sprint
changeset 1270 53f35db66f88
parent 1265 e5cdd5c0dce3
child 1271 0a5257f5d723
equal deleted inserted replaced
1269:94a5c30575c0 1270:53f35db66f88
   176             if not field.name:
   176             if not field.name:
   177                 field.set_name(fieldname)
   177                 field.set_name(fieldname)
   178             allfields.append(field)
   178             allfields.append(field)
   179         classdict['_fields_'] = allfields
   179         classdict['_fields_'] = allfields
   180         return super(metafieldsform, mcs).__new__(mcs, name, bases, classdict)
   180         return super(metafieldsform, mcs).__new__(mcs, name, bases, classdict)
   181     
   181 
   182 
   182     
       
   183 class FieldNotFound(Exception):
       
   184     """raised by field_by_name when a field with the given name has not been
       
   185     found
       
   186     """
       
   187     
   183 class FieldsForm(FormMixIn, AppRsetObject):
   188 class FieldsForm(FormMixIn, AppRsetObject):
   184     __metaclass__ = metafieldsform
   189     __metaclass__ = metafieldsform
   185     __registry__ = 'forms'
   190     __registry__ = 'forms'
   186     __select__ = yes()
   191     __select__ = yes()
   187     
   192     
   219                     self.form_add_hidden(param, initial=value)
   224                     self.form_add_hidden(param, initial=value)
   220         self.context = None
   225         self.context = None
   221 
   226 
   222     @iclassmethod
   227     @iclassmethod
   223     def field_by_name(cls_or_self, name, role='subject'):
   228     def field_by_name(cls_or_self, name, role='subject'):
       
   229         """return field with the given name and role"""
   224         if isinstance(cls_or_self, type):
   230         if isinstance(cls_or_self, type):
   225             fields = cls_or_self._fields_
   231             fields = cls_or_self._fields_
   226         else:
   232         else:
   227             fields = cls_or_self.fields
   233             fields = cls_or_self.fields
   228         for field in fields:
   234         for field in fields:
   229             if field.name == name and field.role == role:
   235             if field.name == name and field.role == role:
   230                 return field
   236                 return field
   231         raise Exception('field %s not found' % name)
   237         raise FieldNotFound(name)
   232     
   238     
   233     @iclassmethod
   239     @iclassmethod
   234     def remove_field(cls_or_self, field):
   240     def remove_field(cls_or_self, field):
   235         if isinstance(cls_or_self, type):
   241         if isinstance(cls_or_self, type):
   236             fields = cls_or_self._fields_
   242             fields = cls_or_self._fields_