コード例 #1
0
 def checkToken(self):
     session = getSession()
     if session is None:
         raise CSRFTokenGenerationError("No session.")
     cookietoken = session.get('__csrftoken__')
     if cookietoken is None:
         raise InvalidCSRFToken(_('Invalid CSRF token'))
     if cookietoken != self.request.form.get('form.field.__csrftoken__', None):
         raise InvalidCSRFToken(_('Invalid CSRF token'))
コード例 #2
0
    def extractData(self, fields):
        # XXX to review this
        cached = self._extracted.get(fields)
        if cached is not None:
            return cached
        data = FieldsValues(self, fields)
        errors = Errors()
        self._extracted[fields] = (data, errors)

        for field in fields:
            if not field.available(self):
                continue

            # Widget extraction and validation
            extractor = self.widgetFactory.extractor(field)
            if extractor is not None:
                value, error = extractor.extract()
                if error is None:
                    error = field.validate(value, self)
                if error is not None:
                    if not IError.providedBy(error):
                        error = Error(error, extractor.identifier)
                    errors.append(error)
                data[field.identifier] = value

        # Generic form validation
        errors.extend(self.validateData(fields, data))
        if len(errors):
            # Add a form level error if not already present
            if self.prefix not in errors:
                errors.append(
                    Error(_(u"There were errors.", default=u"There were errors."),
                          self.prefix))
        self.errors = errors
        return (data, errors)
コード例 #3
0
    def process(self, form, request):
        assert interfaces.ITableFormCanvas.providedBy(form)
        one_selected = False
        ready = False

        for action in self:
            extractor = getMultiAdapter(
                (action, form, request), IWidgetExtractor)
            value, error = extractor.extract()
            if value is not NO_VALUE:
                if not verify_post(action, form, request):
                    return action, FAILURE
                if not ready:
                    form.updateLines(mark_selected=True)
                    ready = True
                # first validate
                got_error = False
                for line in form.lines:
                    if not line.selected:
                        continue
                    one_selected = True
                    try:
                        got_error |=  not action.validate(line)
                    except ActionError, e:
                        got_error = True
                        line.errors.append(
                            Error(unicode(e), identifier=line.prefix))
                    if line.errors:
                        merge_errors(line, form)

                if not one_selected:
                    form.errors.append(
                        Error(_(u"You didn't select any item!"), form.prefix))
                    got_error = True

                if got_error:
                    return action, FAILURE

                # then compute
                for line in form.lines:
                    if not line.selected:
                        continue
                    try:
                        status = action(line)
                        got_error |= status != SUCCESS
                    except ActionError, e:
                        got_error = True
                        line.errors.append(
                            Error(unicode(e), identifier=line.prefix))
                    if line.errors:
                        merge_errors(line, form)
                return action, SUCCESS if not got_error else FAILURE
コード例 #4
0
    def formErrors(self):
        error = self.errors.get(self.prefix, None)

        if self.errors and error is None:
            # If the form has errors but no form specific ones
            # we have to add it. This could be overridable.
            error = Error(_(u"There were errors."), self.prefix)

        if error is not None:
            # If there's a form error, we need to make sure it's iterable.
            # Doing this, we can handle both Error and Errors.
            # Some forms can trigger more than one error, on failure.
            if ICollection.providedBy(error):
                return error
            else:
                return [error]
        return []
コード例 #5
0
    def extract(self):
        value, error = super(SchemaWidgetExtractor, self).extract()
        if self.empty_is_None and hasattr(value, '__len__') and not len(value):
            value = None
        if error is not None:
            return value, error

        if value is not NO_VALUE:
            try:
                value = self.component.fromUnicode(value)
            except schema_interfaces.ValidationError as e:
                return None, e.doc()
            except Invalid as e:
                return None, e.args[0]
            except ValueError as e:
                return None, _(u"Invalid value.")

        return value, None
コード例 #6
0
ファイル: fields.py プロジェクト: Cromlech/dolmen.forms.ztk
    def extract(self):
        value, error = super(SchemaWidgetExtractor, self).extract()
        if self.empty_is_None and hasattr(value, '__len__') and not len(value):
            value = None
        if error is not None:
            return value, error

        if value is not NO_VALUE:
            try:
                value = self.component.fromUnicode(value)
            except schema_interfaces.ValidationError as e:
                return None, e.doc()
            except Invalid as e:
                return None, e.args[0]
            except ValueError as e:
                return None, _(u"Invalid value.")

        return value, None
コード例 #7
0
 def extract(self):
     value, errors = super(MultiChoiceWidgetExtractor, self).extract()
     if errors is None:
         is_present = self.request.form.get(
             self.identifier + '.present', NO_VALUE)
         if is_present is NO_VALUE:
             # Not in the request
             return (NO_VALUE, None)
         if value is NO_VALUE:
             # Nothing selected
             return (self.component.collectionType(), None)
         choices = self.source.getChoices(self.form.context)
         try:
             if not isinstance(value, list):
                 value = [value]
             value = self.component.collectionType(
                 [choices.getTermByToken(t).value for t in value])
         except LookupError:
             return (None, _(u'The selected value is not available.'))
     return (value, errors)
コード例 #8
0
ファイル: fields.py プロジェクト: Cromlech/dolmen.forms.base
 def validate(self, value, context=None):
     if self.required and self.isEmpty(value):
         return _(u"Missing required value.",
                  default=u"Missing required value.")
     return None
コード例 #9
0
ファイル: bool.py プロジェクト: PythonLinks/dolmen.forms.ztk
 def valueToUnicode(self, value):
     if bool(value):
         return _(u'Yes')
     return _(u'No')