Пример #1
0
    def __call__(self, value, *args, **kwargs):
        if len(args) >= 1:
            minval = args[0]
        else:
            minval = self.minval

        if len(args) >= 2:
            maxval = args[1]
        else:
            maxval = self.maxval

        assert (minval <= maxval)
        try:
            nval = float(value)
        except ValueError:
            msg = _(
                u"Validation failed($name): could not convert '$value' to number",
                mapping={
                    'name': safe_unicode(self.name),
                    'value': safe_unicode(value)
                })
            return recursiveTranslate(msg, **kwargs)
        if minval <= nval < maxval:
            return 1

        msg = _(u"Validation failed($name): '$value' out of range($min, $max)",
                mapping={
                    'name': safe_unicode(self.name),
                    'value': safe_unicode(value),
                    'min': safe_unicode(minval),
                    'max': safe_unicode(maxval),
                })
        return recursiveTranslate(msg, **kwargs)
Пример #2
0
    def __call__(self, value, *args, **kwargs):
        if type(value) != StringType:
            msg = _(
                u"Validation failed($name): $value of type $type, expected 'string'",
                mapping={
                    'name': safe_unicode(self.name),
                    'value': safe_unicode(value),
                    'type': safe_unicode(type(value))
                })
            return recursiveTranslate(msg, **kwargs)

        ignore = kwargs.get('ignore', None)
        if ignore:
            value = ignoreRE(value, ignore)
        elif self.ignore:
            value = ignoreRE(value, self.ignore)

        for r in self.regex:
            m = r.match(value)
            if not m:
                msg = _(u"Validation failed($name): '$value' $errmsg",
                        mapping={
                            'name': safe_unicode(self.name),
                            'value': safe_unicode(value),
                            'errmsg': safe_unicode(self.errmsg)
                        })

                return recursiveTranslate(msg, **kwargs)
        return 1
Пример #3
0
    def __call__(self, id, instance, *args, **kwargs):
        try:
            # try to use the check_id script of CMFPlone
            check_id = aq_get(instance, 'check_id', None, 1)
            if check_id is None:
                raise AttributeError('check_id script not found')
            return check_id(id, required=kwargs.get('required', 0)) or 1
        except AttributeError:
            # space test
            if ' ' in id:
                msg =  _(u'Spaces are not allowed in ids')
                return recursiveTranslate(msg, **kwargs)

            # in parent test
            parent = aq_parent(aq_inner(instance))
            # If the id is given to a different object already
            if id in parent.objectIds() and getattr(aq_base(parent), id) is not aq_base(instance):
                msg = _(u'Id $id is already in use',
                        mapping = {'id': safe_unicode(id)})
                return recursiveTranslate(msg, **kwargs)

            # objet manager test
            # XXX: This is f***ed
            try:
                ObjectManager.checkValidId(self, id, allow_dup=1)
            except BadRequest, m:
                return str(m)
            return 1
Пример #4
0
    def __call__(self, id, instance, *args, **kwargs):
        try:
            # try to use the check_id script of CMFPlone
            check_id = aq_get(instance, 'check_id', None, 1)
            if check_id is None:
                raise AttributeError('check_id script not found')
            return check_id(id, required=kwargs.get('required', 0)) or 1
        except AttributeError:
            # space test
            if ' ' in id:
                msg = _(u'Spaces are not allowed in ids')
                return recursiveTranslate(msg, **kwargs)

            # in parent test
            parent = aq_parent(aq_inner(instance))
            # If the id is given to a different object already
            if id in parent.objectIds() and getattr(
                    aq_base(parent), id) is not aq_base(instance):
                msg = _(u'Id $id is already in use',
                        mapping={'id': safe_unicode(id)})
                return recursiveTranslate(msg, **kwargs)

            # object manager test
            # XXX: This is f***ed
            try:
                ObjectManager.checkValidId(self, id, allow_dup=1)
            except BadRequest as m:
                return str(m)
            return 1
Пример #5
0
    def __call__(self, value, *args, **kwargs):
        if len(args) >= 1:
            minval = args[0]
        else:
            minval = self.minval

        if len(args) >= 2:
            maxval = args[1]
        else:
            maxval = self.maxval

        assert minval <= maxval
        try:
            nval = float(value)
        except ValueError:
            msg = _(
                u"Validation failed($name): could not convert '$value' to number",
                mapping={"name": safe_unicode(self.name), "value": safe_unicode(value)},
            )
            return recursiveTranslate(msg, **kwargs)
        if minval <= nval < maxval:
            return 1

        msg = _(
            u"Validation failed($name): '$value' out of range($min, $max)",
            mapping={
                "name": safe_unicode(self.name),
                "value": safe_unicode(value),
                "min": safe_unicode(minval),
                "max": safe_unicode(maxval),
            },
        )
        return recursiveTranslate(msg, **kwargs)
Пример #6
0
    def __call__(self, value, *args, **kwargs):
        if type(value) != StringType:
            msg =  _(u"Validation failed($name): $value of type $type, expected 'string'",
                     mapping = {
                        'name' : safe_unicode(self.name),
                        'value': safe_unicode(value),
                        'type' : safe_unicode(type(value))
                        })
            return recursiveTranslate(msg, **kwargs)

        ignore = kwargs.get('ignore', None)
        if ignore:
            value = ignoreRE(value, ignore)
        elif self.ignore:
            value = ignoreRE(value, self.ignore)


        for r in self.regex:
            m = r.match(value)
            if not m:
                msg =  _(u"Validation failed($name): '$value' $errmsg",
                         mapping={
                            'name' : safe_unicode(self.name),
                            'value': safe_unicode(value),
                            'errmsg' : safe_unicode(self.errmsg)
                            })

                return recursiveTranslate(msg, **kwargs)
        return 1
Пример #7
0
 def __call__(self, value, *args, **kwargs):
     if not value:
         msg = _(u"Validation failed($name): value is empty ($value).",
                mapping = {'name': self.name, 'value': repr(value)})
         return recursiveTranslate(msg, **kwargs)
     if not isinstance(value, DateTime):
         try:
             value = DateTime(value)
         except:
             msg = _(u"Validation failed($name): could not convert $value to a date.",
                     mapping = {'name': safe_unicode(self.name), 'value': safe_unicode(value)})
             return recursiveTranslate(msg, **kwargs)
     return True
Пример #8
0
    def __call__(self, value, instance, *args, **kwargs):
        kw={
           'here':instance,
           'object':instance,
           'instance':instance,
           'value':value,
           'args':args,
           'kwargs':kwargs,
           }

        context=getEngine().getContext(kw)
        res=self.compiledExpression(context)

        if res:
            return True
        else:
            if self.errormsg and type(self.errormsg) == Message:
                #hack to support including values in i18n message, too. hopefully this works out
                #potentially it could unintentionally overwrite already present values
                self.errormsg.mapping = kw
                return recursiveTranslate(self.errormsg, **kwargs)
            elif self.errormsg:
                # support strings as errormsg for backward compatibility
                return self.errormsg % kw
            else:
                msg = _(u'validation failed, expr was:$expr',
                        mapping={'expr': safe_unicode(self.expression)})
                return recursiveTranslate(msg, **kwargs)
Пример #9
0
    def __call__(self, value, instance, *args, **kwargs):
        kw={
           'here':instance,
           'object':instance,
           'instance':instance,
           'value':value,
           'args':args,
           'kwargs':kwargs,
           }

        context=getEngine().getContext(kw)
        res=self.compiledExpression(context)

        if res:
            return True
        else:
            if self.errormsg and type(self.errormsg) == Message:
                #hack to support including values in i18n message, too. hopefully this works out
                #potentially it could unintentionally overwrite already present values
                self.errormsg.mapping = kw
                return recursiveTranslate(self.errormsg, **kwargs)
            elif self.errormsg:
                # support strings as errormsg for backward compatibility
                return self.errormsg % kw
            else:
                msg = _(u'validation failed, expr was:$expr',
                        mapping={'expr': safe_unicode(self.expression)})
                return recursiveTranslate(msg, **kwargs)
Пример #10
0
    def __call__(self, value, *args, **kwargs):
        isEmpty  = kwargs.get('isEmpty', False)
        instance = kwargs.get('instance', None)
        field    = kwargs.get('field', None)

        # XXX: This is a temporary fix. Need to be fixed right for AT 2.0
        #      content_edit / BaseObject.processForm() calls
        #      widget.process_form a second time!
        if instance and field:
            widget  = field.widget
            request = getattr(instance, 'REQUEST', None)
            if request and request.form:
                form   = request.form
                result = widget.process_form(instance, field, form,
                                             empty_marker=_marker,
                                             emptyReturnsMarker=True)
                if result is _marker or result is None:
                    isEmpty = True

        if isEmpty:
            return True
        elif value == '' or value is None:
            return True
        else:
            if getattr(self, 'showError', False):
                msg =  _(u"Validation failed($name): '$value' is not empty.",
                         mapping = { 'name' : safe_unicode(self.name), 'value': safe_unicode(value)})
                return recursiveTranslate(msg, **kwargs)
            else:
                return False
Пример #11
0
 def __call__(self, value, *args, **kwargs):
     if not value:
         msg = _(u"Validation failed($name): value is empty ($value).",
                 mapping={
                     'name': self.name,
                     'value': repr(value)
                 })
         return recursiveTranslate(msg, **kwargs)
     if not isinstance(value, DateTime):
         try:
             value = DateTime(value)
         except:
             msg = _(
                 u"Validation failed($name): could not convert $value to a date.",
                 mapping={
                     'name': safe_unicode(self.name),
                     'value': safe_unicode(value)
                 })
             return recursiveTranslate(msg, **kwargs)
     return True
Пример #12
0
def fallback_check_id(instance, id, **kwargs):
    # space test
    if ' ' in id:
        msg =  _(u'Spaces are not allowed in ids')
        return recursiveTranslate(msg, **kwargs)

    # in parent test
    parent = aq_parent(aq_inner(instance))
    # If the id is given to a different object already
    if (id in parent.objectIds() and
            getattr(aq_base(parent), id) is not aq_base(instance)):
        msg = _(u'Id $id is already in use',
                mapping = {'id': safe_unicode(id)})
        return recursiveTranslate(msg, **kwargs)

    # object manager test
    try:
        # Note: we used to pass 'self' (the validator) instead of 'instance',
        # which makes no sense.
        ObjectManager.checkValidId(instance, id, allow_dup=1)
    except BadRequest as m:
        return str(m)
    return 1
Пример #13
0
 def __call__(self, value, *args, **kwargs):
     if not value:
         return True
     if value.startswith('http'):
         return True
     try:
         url = str(value)
         url = url.lstrip('/')
         portal = api.portal.get()
         portal.restrictedTraverse(url)
     except:
         msg = _(u"Validation failed($name): $value is not a proper link.",
             mapping={'name': safe_unicode(self.name),
                     'value': safe_unicode(value)})
         return recursiveTranslate(msg, **kwargs)
     return True
Пример #14
0
    def __call__(self, value, *args, **kwargs):
        instance = kwargs.get('instance', None)
        field = kwargs.get('field', None)

        # get max size
        if kwargs.has_key('maxsize'):
            maxsize = kwargs.get('maxsize')
        elif hasattr(aq_base(instance), 'getMaxSizeFor'):
            maxsize = instance.getMaxSizeFor(field.getName())
        elif hasattr(field, 'maxsize'):
            maxsize = field.maxsize
        else:
            # set to given default value (default defaults to 0)
            maxsize = self.maxsize

        if not maxsize:
            return True

        # calculate size
        elif (isinstance(value, FileUpload) or isinstance(value, file)
              or hasattr(aq_base(value), 'tell')):
            value.seek(0, 2)  # eof
            size = value.tell()
            value.seek(0)
        else:
            try:
                size = len(value)
            except TypeError:
                size = 0
        size = float(size)
        sizeMB = (size / (1024 * 1024))

        if sizeMB > maxsize:
            msg = _(
                "Validation failed($name: Uploaded data is too large: ${size}MB (max ${max}MB)",
                mapping={
                    'name': safe_unicode(self.name),
                    'size': safe_unicode("%.3f" % sizeMB),
                    'max': safe_unicode("%.3f" % maxsize)
                })
            return recursiveTranslate(msg, **kwargs)
        else:
            return True
Пример #15
0
    def __call__(self, value, *args, **kwargs):
        instance = kwargs.get('instance', None)
        field    = kwargs.get('field', None)

        # get max size
        if kwargs.has_key('maxsize'):
            maxsize = kwargs.get('maxsize')
        elif hasattr(aq_base(instance), 'getMaxSizeFor'):
            maxsize = instance.getMaxSizeFor(field.getName())
        elif hasattr(field, 'maxsize'):
            maxsize = field.maxsize
        else:
            # set to given default value (default defaults to 0)
            maxsize = self.maxsize

        if not maxsize:
            return True

        # calculate size
        elif (isinstance(value, FileUpload) or isinstance(value, file) or
              hasattr(aq_base(value), 'tell')):
            value.seek(0, 2) # eof
            size = value.tell()
            value.seek(0)
        else:
            try:
                size = len(value)
            except TypeError:
                size = 0
        size = float(size)
        sizeMB = (size / (1024 * 1024))

        if sizeMB > maxsize:
            msg = _("Validation failed($name: Uploaded data is too large: ${size}MB (max ${max}MB)",
                    mapping = {
                        'name' : safe_unicode(self.name),
                        'size' : safe_unicode("%.3f" % sizeMB),
                        'max' : safe_unicode("%.3f" % maxsize)
                        })
            return recursiveTranslate(msg, **kwargs)
        else:
            return True
Пример #16
0
# added
protocols = ('http', 'ftp', 'irc', 'news', 'imap', 'gopher', 'jabber',
             'webdav', 'smb', 'fish', 'ldap', 'pop3', 'smtp', 'sftp', 'ssh',
             'feed')

# email re w/o leading '^'
EMAIL_RE = "([0-9a-zA-Z_&.'+-]+!)*[0-9a-zA-Z_&.'+-]+@(([0-9a-zA-Z]([0-9a-zA-Z-]*[0-9a-z-A-Z])?\.)+[a-zA-Z]{2,6}|([0-9]{1,3}\.){3}[0-9]{1,3})$"

baseValidators = [
    RangeValidator('inNumericRange', title='', description=''),
    RegexValidator(
        'isDecimal',
        r'^([+-]?)(?=\d|(\.|\,)\d)\d*((\,|\.)\d*)?([Ee]([+-]?\d+))?$',
        title='',
        description='',
        errmsg=_(u'is not a decimal number.')),
    RegexValidator('isInt',
                   r'^([+-])?\d+$',
                   title='',
                   description='',
                   errmsg=_(u'is not an integer.')),
    RegexValidator('isPrintable',
                   r'[a-zA-Z0-9\s]+$',
                   title='',
                   description='',
                   errmsg=_(u'contains unprintable characters')),
    RegexValidator('isSSN',
                   r'^\d{9}$',
                   title='',
                   description='',
                   errmsg=_(u'is not a well formed SSN.')),
Пример #17
0
# protocols for isURL validator, the secure (*s) variants are automagically
# added
protocols = ('http', 'ftp', 'irc', 'news', 'imap', 'gopher', 'jabber',
    'webdav', 'smb', 'fish', 'ldap', 'pop3', 'smtp', 'sftp', 'ssh', 'feed'
    )

# email re w/o leading '^'
EMAIL_RE = "([0-9a-zA-Z_&.'+-]+!)*[0-9a-zA-Z_&.'+-]+@(([0-9a-zA-Z]([0-9a-zA-Z-]*[0-9a-z-A-Z])?\.)+[a-zA-Z]{2,6}|([0-9]{1,3}\.){3}[0-9]{1,3})$"

baseValidators = [
    RangeValidator('inNumericRange', title='', description=''),
    RegexValidator('isDecimal',
                   r'^([+-]?)(?=\d|(\.|\,)\d)\d*((\,|\.)\d*)?([Ee]([+-]?\d+))?$',
                   title='', description='',
                   errmsg=_(u'is not a decimal number.')),
    RegexValidator('isInt', r'^([+-])?\d+$', title='', description='',
                   errmsg=_(u'is not an integer.')),
    RegexValidator('isPrintable', r'[a-zA-Z0-9\s]+$', title='', description='',
                   errmsg=_(u'contains unprintable characters')),
    RegexValidator('isSSN', r'^\d{9}$', title='', description='',
                   errmsg=_(u'is not a well formed SSN.')),
    RegexValidator('isUSPhoneNumber', r'^\d{10}$', ignore='[\(\)\-\s]',
                   title='', description='',
                   errmsg=_(u'is not a valid us phone number.')),
    RegexValidator('isInternationalPhoneNumber', r'^\d+$', ignore='[\(\)\-\s\+]',
                   title='', description='',
                   errmsg=_(u'is not a valid international phone number.')),
    RegexValidator('isZipCode', r'^(\d{5}|\d{9})$',
                   title='', description='',
                   errmsg=_(u'is not a valid zip code.')),