def _extractDataManagers(self): # we extract object values from the request for conveinent use by any # step. data_adapters = {} fields = form.Fields() for step in self.controller.getTraversedFormSteps(): # call processInputs to convert request.form to unicode processInputs(step.request) # Five only convert request.form to unicode, but (some) formlib # widgets use request so we need to get unicode values from # request.form and copy them to request for key in step.request.form.keys(): step.request[key] = step.request.form[key] if not interfaces.IWizardFormStep.providedBy(step): continue data_adapters.update(step.getSchemaAdapters()) widgets = form.setUpEditWidgets( step.form_fields, step.prefix, step.context, step.request, adapters=data_adapters, ignore_request=False ) fields += step.form_fields data = {} form.getWidgetsData(widgets, step.prefix, data) # extract the form data to the adapters actualize # their state. self._restoreAdapterValues(data, data_adapters) return data_adapters, fields
def validate_sync(self, action, data): """Validate selected differences.""" form.getWidgetsData(self.widgets, self.prefix, data) if len(data.get('selected_differences', [])) == 0: self.setFieldError( 'selected_differences', 'No differences selected.')
def validate_new_subscription(self, action, data): """Ensure the subscriber isn't already subscribed. Also ensures that the expiry date is in the future. """ form.getWidgetsData(self.widgets, 'field', data) subscriber = data.get('subscriber') date_expires = data.get('date_expires') if subscriber is not None: subscriber_set = getUtility(IArchiveSubscriberSet) current_subscription = subscriber_set.getBySubscriber( subscriber, archive=self.context) # XXX noodles 20090212 bug=246200: use bool() when it gets fixed # in storm. if current_subscription.any() is not None: self.setFieldError( 'subscriber', "%s is already subscribed." % subscriber.displayname) if date_expires: if date_expires < datetime.date.today(): self.setFieldError('date_expires', "The expiry date must be in the future.")
def _getHiddenVars(self): data = {} if hasattr(self, 'hidden_widgets'): form.getWidgetsData(self.hidden_widgets, self.prefix, data) else: data = self.request.form return data
def validate_sync(self, action, data): """Validate selected differences.""" form.getWidgetsData(self.widgets, self.prefix, data) if len(data.get('selected_differences', [])) == 0: self.setFieldError('selected_differences', 'No differences selected.')
def validate_update_subscription(self, action, data): """Ensure that the date of expiry is not in the past.""" form.getWidgetsData(self.widgets, "field", data) date_expires = data.get("date_expires") if date_expires: if date_expires < datetime.date.today(): self.setFieldError("date_expires", "The expiry date must be in the future.")
def _getNavigationVars(self): data = {} if hasattr(self, 'hidden_widgets'): form.getWidgetsData(self.hidden_widgets, self.prefix, data) if hasattr(self, '_query'): data.update(self._query) else: data = self.request.form return data
def validate_update_subscription(self, action, data): """Ensure that the date of expiry is not in the past.""" form.getWidgetsData(self.widgets, 'field', data) date_expires = data.get('date_expires') if date_expires: if date_expires < datetime.date.today(): self.setFieldError('date_expires', "The expiry date must be in the future.")
def _apply_properties(self, data, factory): request = utils.getRequest() fake = copy.copy(request) fake.form = data widgets = form.setUpWidgets(factory.form_fields, form_prefix=self.properties_prefix, request=fake, context=self) results = dict() form.getWidgetsData(widgets, self.properties_prefix, results) formlib.apply_data_event(self, factory.form_fields, results, adapters=None, update=False)
def __call__(self): widgets = form.setUpWidgets( self.form_fields, 'form', self.context, self.request) results = [] data ={} if 'submit' in self.request: # get input data errors = form.getWidgetsData(widgets, 'form', data) invariant_errors = form.checkInvariants(self.form_fields, data) if errors: results.append('<h4>there were errors</h4>') if invariant_errors: results.append('<h4>there were invariant errors</h4>') for error in invariant_errors: results.append( "<p style='color:red'>%s</p>" % error ) for w in widgets: results.append("<p>%s</p>" % w()) error = w.error() if error: results.append("<p style='color:red'>%s</p>" % error) results = '\n'.join(results) return """<html><body> <form>%s <input type="submit" name="submit" value="submit"></form> <p>updated: %s</p> </body></html> """ % (results, str(data))
def __call__(self): widgets = form.setUpWidgets(self.form_fields, 'form', self.context, self.request) results = [] data = {} if 'submit' in self.request: # get input data errors = form.getWidgetsData(widgets, 'form', data) invariant_errors = form.checkInvariants(self.form_fields, data) if errors: results.append('<h4>there were errors</h4>') if invariant_errors: results.append('<h4>there were invariant errors</h4>') for error in invariant_errors: results.append("<p style='color:red'>%s</p>" % error) for w in widgets: results.append("<p>%s</p>" % w()) error = w.error() if error: results.append("<p style='color:red'>%s</p>" % error) results = '\n'.join(results) return """<html><body> <form>%s <input type="submit" name="submit" value="submit"></form> <p>updated: %s</p> </body></html> """ % (results, str(data))
def validate(self, action, data): """Validation that require context must be called here, invariants may be defined in the descriptor.""" errors = (form.getWidgetsData(self.widgets, self.prefix, data) + form.checkInvariants(self.form_fields, data)) if not errors and self.CustomValidation is not None: return list(self.CustomValidation(self.context, data)) return errors
def validate(self, action, data): """Validation that require context must be called here, invariants may be defined in the descriptor.""" errors = ( form.getWidgetsData(self.widgets, self.prefix, data) + form.checkInvariants(self.form_fields, data)) if not errors and self.CustomValidation is not None: return list(self.CustomValidation(self.context, data)) return errors
def validate_new_subscription(self, action, data): """Ensure the subscriber isn't already subscribed. Also ensures that the expiry date is in the future. """ form.getWidgetsData(self.widgets, "field", data) subscriber = data.get("subscriber") date_expires = data.get("date_expires") if subscriber is not None: subscriber_set = getUtility(IArchiveSubscriberSet) current_subscription = subscriber_set.getBySubscriber(subscriber, archive=self.context) # XXX noodles 20090212 bug=246200: use bool() when it gets fixed # in storm. if current_subscription.any() is not None: self.setFieldError("subscriber", "%s is already subscribed." % subscriber.displayname) if date_expires: if date_expires < datetime.date.today(): self.setFieldError("date_expires", "The expiry date must be in the future.")
def validateUnique( self, action, data ): """ verification method for adding or editing against anything existing that conflicts with an existing row, as regards unique column constraints. this is somewhat costly as we basically reinvoke parsing form data twice, we need to extend zope.formlib to ignore existing values in the data dictionary to avoid this. its also costly because we're doing a query per unique column data we find, in order to unambigously identify the field thats problematic. but presumably those are very fast due to the unique constraint. TODO : assumes column == attribute """ errors = form.getWidgetsData( self.widgets, self.prefix, data ) + \ form.checkInvariants(self.form_fields, data) if errors: return errors domain_model = removeSecurityProxy( self.getDomainModel() ) # find unique columns in data model.. TODO do this statically mapper = orm.class_mapper( domain_model ) ucols = list( unique_columns( mapper ) ) errors = [] # query out any existing values with the same unique values, s = Session() # find data matching unique columns for key, col in ucols: if key in data: # on edit ignore new value if its the same as the previous value if isinstance( self.context, domain_model ) \ and data[key] == getattr( self.context, key, None): continue value = s.query( domain_model ).filter( col == data[key] ).count() if not value: continue widget = self.widgets[ key ] error = form.WidgetInputError( widget.name, widget.label, u"Duplicate Value for Unique Field" ) widget._error = error errors.append( error ) if errors: return tuple(errors)
def validateUnique(self, action, data): """ verification method for adding or editing against anything existing that conflicts with an existing row, as regards unique column constraints. this is somewhat costly as we basically reinvoke parsing form data twice, we need to extend zope.formlib to ignore existing values in the data dictionary to avoid this. its also costly because we're doing a query per unique column data we find, in order to unambigously identify the field thats problematic. but presumably those are very fast due to the unique constraint. TODO : assumes column == attribute """ errors = form.getWidgetsData(self.widgets, self.prefix, data) + \ form.checkInvariants(self.form_fields, data) if errors: return errors domain_model = removeSecurityProxy(self.getDomainModel()) # find unique columns in data model.. TODO do this statically mapper = orm.class_mapper(domain_model) ucols = list(unique_columns(mapper)) errors = [] # query out any existing values with the same unique values, s = bungeni.alchemist.Session() # find data matching unique columns for key, col in ucols: if key in data: # on edit ignore new value if its the same as the previous value if isinstance(self.context, domain_model) \ and data[key] == getattr(self.context, key, None): continue value = s.query(domain_model).filter(col == data[key]).count() if not value: continue widget = self.widgets[key] error = form.WidgetInputError( widget.name, widget.label, u"Duplicate Value for Unique Field") widget._error = error errors.append(error) if errors: return tuple(errors)
def handleApply(self, action, data): configuratorData = {} for subform in self.subforms: subform.update() formData = {} errors = form.getWidgetsData(subform.widgets, subform.prefix, formData) configuratorData[subform.prefix] = formData configurator.configure(self.context, configuratorData, names=self._pluginNames, useNameSpaces=True) self.status = u'Applied: %s' % u' '.join(self._pluginNames)
def validate_widgets(self, data, names=None): """Validate the named form widgets. :param names: Names of widgets to validate. If None, all widgets will be validated. """ if names is None: # Validate all widgets. widgets = self.widgets else: widgets = [] for input, widget in self.widgets.__iter_input_and_widget__(): if widget.context.__name__ in names: widgets.append((input, widget)) widgets = form.Widgets(widgets, len(self.prefix) + 1) for error in form.getWidgetsData(widgets, self.prefix, data): self.errors.append(error) for error in form.checkInvariants(self.form_fields, data): self.addError(error) return self.errors
def check_items(self, action, data): """Check whether any items have been selected for the requested action.""" errors = form.getWidgetsData(self.widgets, 'form', data) if len(self._get_ids(data)) == 0: return [_(u"Please select one or more items first.")]
def _getNavigationVars(self): data = {} form.getWidgetsData(self.hidden_widgets, self.prefix, data) return data
def process(self, data): self.update_form() results = dict() form.getWidgetsData(self.widgets, self.prefix, results) self.customer.set_ruleset_data(self.context.id, results)
def validate(self, action, data): return form.getWidgetsData(self.widgets, self.prefix, data)
def validate(self, action, data): return (form.getWidgetsData(self.widgets, self.prefix, data) + form.checkInvariants(self.form_fields, data))
def validate(self, action, data): return (form.getWidgetsData(self.widgets, self.prefix, data))