def extract(self): value = self.request.form.get(self.identifier, NO_VALUE) if value is not NO_VALUE: try: value = int(value) except ValueError: return (None, u"Invalid internal input") collectedValues = [] collectedErrors = Errors(identifier=self.identifier) for position in range(0, value): value_present = '%s.present.%d' % ( self.identifier, position) in self.request.form if not value_present: # This value have been removed continue field = self.valueField.clone(new_identifier=str(position)) form = cloneFormData(self.form, prefix=self.identifier) data, errors = form.extractData(Fields(field)) if errors: collectedErrors.extend(errors) else: collectedValues.append(data[field.identifier]) if collectedErrors: return (None, collectedErrors) value = self.component.collectionType(collectedValues) return (value, None)
def update(self): super(ObjectFieldWidget, self).update() value = self.component.dataManager(self.inputValue()) form = cloneFormData(self.form, value, self.identifier) self.objectWidgets = Widgets(form=form, request=self.request) self.objectWidgets.extend(self.component.objectFields) self.objectWidgets.update()
def createValueWidget(self, new_identifier, value): field = self.valueField.clone(new_identifier=str(new_identifier)) form = cloneFormData(self.form, prefix=self.identifier) if value is not None: form.ignoreContent = False form.setContentData(NoneDataManager(value)) else: form.ignoreRequest = False form.ignoreContent = True return form.widgetFactory.widget(field)
def extract(self): is_present = self.request.form.get(self.identifier, NO_VALUE) if is_present is NO_VALUE: return (NO_VALUE, None) value = None form = cloneFormData(self.form, None, self.identifier) data, errors = form.extractData(self.component.objectFields) if not errors: factory = self.component.getObjectFactory() # Create an object with values value = factory(**dict(filter( lambda (k, v): not isinstance(v, Marker), data.items()))) return (value, None) return (value, Errors(*errors, identifier=self.identifier))