def validate_iterable(rule, param): try: [v for v in getattr(rule, param, []) if v] except TypeError: # TODO: I'm not sure it's possible to get here - all the # places we call validate_iterable convert single ints to # sequences, and other types raise TypeErrors earlier. raise exceptions.ValidationError('%s parameter must be iterable' % param)
def validate_iterable_ints(rule, param, min_value=None, max_value=None): for value in getattr(rule, param, []): try: value = int(value) if min_value is not None: if value < min_value: raise ValueError if max_value is not None: if value > max_value: raise ValueError except ValueError: raise exceptions.ValidationError( 'invalid %s parameter: %r' % param, value)
def validate_rule(rule): # validate freq try: Rule.frequencies[int(rule.freq)] except IndexError: raise exceptions.ValidationError('invalid freq parameter: %r' % rule.freq) except ValueError: raise exceptions.ValidationError('invalid freq parameter: %r' % rule.freq) # validate interval try: interval = int(rule.interval) if interval < 1: raise ValueError except ValueError: raise exceptions.ValidationError('invalid interval parameter: %r' % rule.interval) # validate wkst if rule.wkst: try: wkst = to_weekday(rule.wkst) except ValueError: raise exceptions.ValidationError( 'invalide wkst parameter: %r' % rule.wkst) # validate until if rule.until: try: validate_dt(rule.until) except ValueError: raise exceptions.ValidationError( 'invalid until parameter: %r' % rule.until) # validate count if rule.count: try: int(rule.count) except ValueError: raise exceptions.ValidationError( 'invalid count parameter: %r' % rule.count) # validate byparams for param in Rule.byparams: validate_iterable(rule, param) if param == 'byday': for value in getattr(rule, 'byday', []): try: to_weekday(value) except ValueError: raise exceptions.ValidationError( 'invalid byday parameter: %r' % value) elif param == 'bymonth': validate_iterable_ints(rule, param, 1, 12) elif param == 'bymonthday': validate_iterable_ints(rule, param, 1, 31) elif param == 'byhour': validate_iterable_ints(rule, param, 0, 23) elif param == 'byminute': validate_iterable_ints(rule, param, 0, 59) elif param == 'bysecond': validate_iterable_ints(rule, param, 0, 59) else: validate_iterable_ints(rule, param)
def validate_iterable(rule, param): try: [v for v in getattr(rule, param, []) if v] except TypeError: raise exceptions.ValidationError('%s parameter must be iterable' % param)
def validate_dt(dt): if not isinstance(dt, datetime.datetime): raise exceptions.ValidationError('invalid datetime: %r' % dt)
def validate(rule_or_recurrence): if isinstance(rule_or_recurrence, Rule): obj = Recurrence(rrules=[rule_or_recurrence]) else: obj = rule_or_recurrence try: if not isinstance(obj, Rule) and not isinstance(obj, Recurrence): raise exceptions.ValidationError('incompatible object') except TypeError: raise exceptions.ValidationError('incompatible object') def validate_dt(dt): if not isinstance(dt, datetime.datetime): raise exceptions.ValidationError('invalid datetime: %r' % dt) def validate_iterable(rule, param): try: [v for v in getattr(rule, param, []) if v] except TypeError: raise exceptions.ValidationError('%s parameter must be iterable' % param) def validate_iterable_ints(rule, param, min_value=None, max_value=None): for value in getattr(rule, param, []): try: value = int(value) if min_value is not None: if value < min_value: raise ValueError if max_value is not None: if value > max_value: raise ValueError except ValueError: raise exceptions.ValidationError( 'invalid %s parameter: %r' % param, value) def validate_rule(rule): # validate freq try: Rule.frequencies[int(rule.freq)] except IndexError: raise exceptions.ValidationError('invalid freq parameter: %r' % rule.freq) except ValueError: raise exceptions.ValidationError('invalid freq parameter: %r' % rule.freq) # validate interval try: interval = int(rule.interval) if interval < 1: raise ValueError except ValueError: raise exceptions.ValidationError('invalid interval parameter: %r' % rule.interval) # validate wkst if rule.wkst: try: wkst = to_weekday(rule.wkst) except ValueError: raise exceptions.ValidationError( 'invalide wkst parameter: %r' % rule.wkst) # validate until if rule.until: try: validate_dt(rule.until) except ValueError: raise exceptions.ValidationError( 'invalid until parameter: %r' % rule.until) # validate count if rule.count: try: int(rule.count) except ValueError: raise exceptions.ValidationError( 'invalid count parameter: %r' % rule.count) # validate byparams for param in Rule.byparams: validate_iterable(rule, param) if param == 'byday': for value in getattr(rule, 'byday', []): try: to_weekday(value) except ValueError: raise exceptions.ValidationError( 'invalid byday parameter: %r' % value) elif param == 'bymonth': validate_iterable_ints(rule, param, 1, 12) elif param == 'bymonthday': validate_iterable_ints(rule, param, 1, 31) elif param == 'byhour': validate_iterable_ints(rule, param, 0, 23) elif param == 'byminute': validate_iterable_ints(rule, param, 0, 59) elif param == 'bysecond': validate_iterable_ints(rule, param, 0, 59) else: validate_iterable_ints(rule, param) if obj.dtstart: validate_dt(obj.dtstart) if obj.dtend: validate_dt(obj.dtend) if obj.rrules: map(lambda rule: validate_rule(rule), obj.rrules) if obj.exrules: map(lambda rule: validate_rule(rule), obj.exrules) if obj.rdates: map(lambda dt: validate_dt(dt), obj.rdates) if obj.exdates: map(lambda dt: validate_dt(dt), obj.exdates)
def validate_rule(rule): # validate freq try: Rule.frequencies[int(rule.freq)] except IndexError: raise exceptions.ValidationError('invalid freq parameter: %r' % rule.freq) except ValueError: raise exceptions.ValidationError('invalid freq parameter: %r' % rule.freq) # validate interval try: interval = int(rule.interval) if interval < 1: raise ValueError except ValueError: raise exceptions.ValidationError('invalid interval parameter: %r' % rule.interval) # validate wkst if rule.wkst: try: to_weekday(rule.wkst) except ValueError: raise exceptions.ValidationError( 'invalide wkst parameter: %r' % rule.wkst) # validate until if rule.until: try: validate_dt(rule.until) except ValueError: # TODO: I'm not sure it's possible to get here # (validate_dt doesn't raise ValueError) raise exceptions.ValidationError( 'invalid until parameter: %r' % rule.until) # validate count if rule.count: try: int(rule.count) except ValueError: raise exceptions.ValidationError( 'invalid count parameter: %r' % rule.count) # TODO: Should we check that you haven't specified both # rule.count and rule.until? Note that we only serialize # rule.until if there's no rule.count. # validate byparams for param in Rule.byparams: validate_iterable(rule, param) if param == 'byday': for value in getattr(rule, 'byday', []): try: to_weekday(value) except ValueError: raise exceptions.ValidationError( 'invalid byday parameter: %r' % value) elif param == 'bymonth': validate_iterable_ints(rule, param, 1, 12) elif param == 'bymonthday': validate_iterable_ints(rule, param, -4, 31) elif param == 'byhour': validate_iterable_ints(rule, param, 0, 23) elif param == 'byminute': validate_iterable_ints(rule, param, 0, 59) elif param == 'bysecond': validate_iterable_ints(rule, param, 0, 59) else: validate_iterable_ints(rule, param)
def validate(rule_or_recurrence): if isinstance(rule_or_recurrence, Rule): obj = Recurrence(rrules=[rule_or_recurrence]) else: obj = rule_or_recurrence try: if not isinstance(obj, Rule) and not isinstance(obj, Recurrence): raise exceptions.ValidationError('incompatible object') except TypeError: raise exceptions.ValidationError('incompatible object') def validate_dt(dt): if not isinstance(dt, datetime.datetime): raise exceptions.ValidationError('invalid datetime: %r' % dt) def validate_iterable(rule, param): try: [v for v in getattr(rule, param, []) if v] except TypeError: # TODO: I'm not sure it's possible to get here - all the # places we call validate_iterable convert single ints to # sequences, and other types raise TypeErrors earlier. raise exceptions.ValidationError('%s parameter must be iterable' % param) def validate_iterable_ints(rule, param, min_value=None, max_value=None): for value in getattr(rule, param, []): try: value = int(value) if min_value is not None: if value < min_value: raise ValueError if max_value is not None: if value > max_value: raise ValueError except ValueError: raise exceptions.ValidationError('invalid %s parameter: %r' % (param, value)) def validate_rule(rule): # validate freq try: Rule.frequencies[int(rule.freq)] except IndexError: raise exceptions.ValidationError('invalid freq parameter: %r' % rule.freq) except ValueError: raise exceptions.ValidationError('invalid freq parameter: %r' % rule.freq) # validate interval try: interval = int(rule.interval) if interval < 1: raise ValueError except ValueError: raise exceptions.ValidationError('invalid interval parameter: %r' % rule.interval) # validate wkst if rule.wkst: try: to_weekday(rule.wkst) except ValueError: raise exceptions.ValidationError( 'invalide wkst parameter: %r' % rule.wkst) # validate until if rule.until: try: validate_dt(rule.until) except ValueError: # TODO: I'm not sure it's possible to get here # (validate_dt doesn't raise ValueError) raise exceptions.ValidationError( 'invalid until parameter: %r' % rule.until) # validate count if rule.count: try: int(rule.count) except ValueError: raise exceptions.ValidationError( 'invalid count parameter: %r' % rule.count) # TODO: Should we check that you haven't specified both # rule.count and rule.until? Note that we only serialize # rule.until if there's no rule.count. # validate byparams for param in Rule.byparams: validate_iterable(rule, param) if param == 'byday': for value in getattr(rule, 'byday', []): try: to_weekday(value) except ValueError: raise exceptions.ValidationError( 'invalid byday parameter: %r' % value) elif param == 'bymonth': validate_iterable_ints(rule, param, 1, 12) elif param == 'bymonthday': validate_iterable_ints(rule, param, -4, 31) elif param == 'byhour': validate_iterable_ints(rule, param, 0, 23) elif param == 'byminute': validate_iterable_ints(rule, param, 0, 59) elif param == 'bysecond': validate_iterable_ints(rule, param, 0, 59) else: validate_iterable_ints(rule, param) if obj.dtstart: validate_dt(obj.dtstart) if obj.dtend: validate_dt(obj.dtend) if obj.rrules: list(map(lambda rule: validate_rule(rule), obj.rrules)) if obj.exrules: list(map(lambda rule: validate_rule(rule), obj.exrules)) if obj.rdates: list(map(lambda dt: validate_dt(dt), obj.rdates)) if obj.exdates: list(map(lambda dt: validate_dt(dt), obj.exdates))