Esempio n. 1
0
    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
Esempio n. 2
0
    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.")
Esempio n. 4
0
 def _getHiddenVars(self):
     data = {}
     if hasattr(self, 'hidden_widgets'):
         form.getWidgetsData(self.hidden_widgets, self.prefix, data)
     else:
         data = self.request.form
     return data
Esempio n. 5
0
 def _getHiddenVars(self):
     data = {}
     if hasattr(self, 'hidden_widgets'):
         form.getWidgetsData(self.hidden_widgets, self.prefix, data)
     else:
         data = self.request.form
     return data
Esempio n. 6
0
    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.")
Esempio n. 8
0
 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.")
Esempio n. 10
0
 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 _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)
Esempio n. 12
0
    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))
Esempio n. 13
0
    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))
Esempio n. 14
0
    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
Esempio n. 15
0
    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.")
Esempio n. 17
0
    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)
Esempio n. 18
0
    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)
Esempio n. 19
0
    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)
Esempio n. 20
0
    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
Esempio n. 21
0
    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
Esempio n. 22
0
 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.")]
Esempio n. 23
0
 def _getNavigationVars(self):
     data = {}
     form.getWidgetsData(self.hidden_widgets, self.prefix, data)
     return data
Esempio n. 24
0
 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)
Esempio n. 25
0
 def _getNavigationVars(self):
     data = {}
     form.getWidgetsData(self.hidden_widgets, self.prefix, data)
     return data
Esempio n. 26
0
 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))
Esempio n. 28
0
 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))
Esempio n. 30
0
 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.")]