예제 #1
0
파일: rest.py 프로젝트: cshamis/scale
def parse_duration(request, name, default_value=None, required=True):
    '''Parses a time duration parameter from the given request.

    :param request: The context of an active HTTP request.
    :type request: :class:`rest_framework.request.Request`
    :param name: The name of the parameter to parse.
    :type name: str
    :param default_value: The name of the parameter to parse.
    :type default_value: datetime.timedelta
    :param required: Indicates whether or not the parameter is required. An exception will be raised if the parameter
        does not exist, there is no default value, and required is True.
    :type required: bool
    :returns: The value of the named parameter or the default value if provided.
    :rtype: datetime.timedelta

    :raises :class:`util.rest.BadParameter`: If the value cannot be parsed.
    '''
    value = _get_param(request, name, default_value, required)
    if not isinstance(value, basestring):
        return value

    try:
        result = parse_util.parse_duration(value)
        if result:
            return result
        raise
    except:
        raise BadParameter('Invalid duration format for parameter: %s' % name)
예제 #2
0
def parse_duration(request, name, default_value=None, required=True):
    """Parses a time duration parameter from the given request.

    :param request: The context of an active HTTP request.
    :type request: :class:`rest_framework.request.Request`
    :param name: The name of the parameter to parse.
    :type name: string
    :param default_value: The name of the parameter to parse.
    :type default_value: datetime.timedelta or string
    :param required: Indicates whether or not the parameter is required. An exception will be raised if the parameter
        does not exist, there is no default value, and required is True.
    :type required: bool
    :returns: The value of the named parameter or the default value if provided.
    :rtype: datetime.timedelta

    :raises :class:`util.rest.BadParameter`: If the value cannot be parsed.
    """
    value = _get_param(request, name, default_value, required)
    if not isinstance(value, basestring):
        return value

    try:
        result = parse_util.parse_duration(value)
        if result:
            return result
        raise
    except:
        raise BadParameter('Invalid duration format for parameter: %s' % name)
예제 #3
0
파일: clock.py 프로젝트: cshamis/scale
def _check_rule(rule):
    '''Checks the given rule for validation errors and then triggers an event for processing if the schedule requires.

    :param rule: The system name of the processor, which is used in trigger rule configurations.
    :type rule: :class:`trigger.models.TriggerRule`

    :raises :class:`job.clock.ClockEventError`: If there is a configuration problem with the rule.
    '''

    # Validate the processor name attribute
    if rule.name not in _PROCESSORS:
        raise ClockEventError('Clock trigger rule references unknown processor name: %s -> %s' % (rule.id, rule.name))

    # Validate the event type attribute
    if 'event_type' not in rule.configuration or not rule.configuration['event_type']:
        raise ClockEventError('Clock trigger rule missing "event_type" attribute: ' % rule.id)

    # Validate the clock schedule
    if 'schedule' not in rule.configuration or not rule.configuration['schedule']:
        raise ClockEventError('Clock trigger rule missing "schedule" attribute: ' % rule.id)
    schedule = rule.configuration['schedule']
    duration = parse.parse_duration(schedule)
    if not duration:
        raise ClockEventError('Invalid format for clock trigger "schedule" attribute: %s -> %s' % (rule.id, schedule))

    # Trigger a new event when the schedule is surpassed
    last_event = TriggerEvent.objects.filter(rule=rule).order_by('-occurred').first()
    logger.debug('Checking rule schedule: %s -> %s since %s', rule.type, duration, last_event)
    if _check_schedule(duration, last_event):
        _trigger_event(rule, last_event)
예제 #4
0
파일: clock.py 프로젝트: sau29/scale
def _check_rule(rule):
    """Checks the given rule for validation errors and then triggers an event for processing if the schedule requires.

    :param rule: The system name of the processor, which is used in trigger rule configurations.
    :type rule: :class:`trigger.models.TriggerRule`

    :raises :class:`job.clock.ClockEventError`: If there is a configuration problem with the rule.
    """

    # Validate the processor name attribute
    if rule.name not in _PROCESSORS:
        raise ClockEventError('Clock trigger rule references unknown processor name: %s -> %s' % (rule.id, rule.name))

    # Validate the event type attribute
    if 'event_type' not in rule.configuration or not rule.configuration['event_type']:
        raise ClockEventError('Clock trigger rule missing "event_type" attribute: ' % rule.id)

    # Validate the clock schedule
    if 'schedule' not in rule.configuration or not rule.configuration['schedule']:
        raise ClockEventError('Clock trigger rule missing "schedule" attribute: ' % rule.id)
    schedule = rule.configuration['schedule']
    duration = parse.parse_duration(schedule)
    if not duration:
        raise ClockEventError('Invalid format for clock trigger "schedule" attribute: %s -> %s' % (rule.id, schedule))

    # Trigger a new event when the schedule is surpassed
    last_event = TriggerEvent.objects.filter(rule=rule).order_by('-occurred').first()
    logger.debug('Checking rule schedule: %s -> %s since %s', rule.type, duration, last_event)
    if _check_schedule(duration, last_event):
        _trigger_event(rule, last_event)
예제 #5
0
 def test_parse_duration_invalid(self):
     """Tests parsing an invalid ISO duration."""
     self.assertIsNone(parse_util.parse_duration('BAD'))
예제 #6
0
 def test_parse_duration(self):
     """Tests parsing a valid ISO duration."""
     self.assertEqual(parse_util.parse_duration('PT3H0M0S'),
                      datetime.timedelta(0, 10800))
예제 #7
0
 def test_parse_duration_invalid(self):
     """Tests parsing an invalid ISO duration."""
     self.assertIsNone(parse_util.parse_duration('BAD'))
예제 #8
0
 def test_parse_duration(self):
     """Tests parsing a valid ISO duration."""
     self.assertEqual(parse_util.parse_duration('PT3H0M0S'), datetime.timedelta(0, 10800))