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)
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
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
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
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)
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
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
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)
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
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
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
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
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
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
# 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.')),
# 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.')),