Beispiel #1
0
def _GetEventTriggerEventParams(trigger_event, trigger_resource):
    """Get the args for creating an event trigger.

  Args:
    trigger_event: The trigger event
    trigger_resource: The trigger resource
  Returns:
    A dictionary containing trigger_provider, trigger_event, and
    trigger_resource.
  """
    trigger_provider = triggers.INPUT_TRIGGER_PROVIDER_REGISTRY.ProviderForEvent(
        trigger_event).label
    resource_type = triggers.INPUT_TRIGGER_PROVIDER_REGISTRY.Event(
        trigger_provider, trigger_event).resource_type
    if resource_type == triggers.Resources.TOPIC:
        trigger_resource = api_util.ValidatePubsubTopicNameOrRaise(
            trigger_resource)
    elif resource_type == triggers.Resources.BUCKET:
        trigger_resource = storage_util.BucketReference.FromBucketUrl(
            trigger_resource).bucket
    elif resource_type == triggers.Resources.PROJECT:
        if trigger_resource:
            properties.VALUES.core.project.Validate(trigger_resource)
    else:
        # Check if programmer allowed other methods in
        # api_util.PROVIDER_EVENT_RESOURCE but forgot to update code here
        raise core_exceptions.InternalError()
    # checked if provided resource and path have correct format
    return {
        'trigger_provider': trigger_provider,
        'trigger_event': trigger_event,
        'trigger_resource': trigger_resource,
    }
def _CheckTriggerProviderArgs(args):
    """Check --trigger-provider dependent arguments and deduce if possible.

  0. Check if --trigger-provider is correct.
  1. Check if --trigger-event is present, assign default if not.
  2. Check if --trigger-event is correct WRT to --trigger-provider.
  3. Check if --trigger-resource is present if necessary.
  4. Check if --trigger-resource is correct WRT to *-provider and *-event.
  5. Check if --trigger-path is present if necessary.
  6. Check if --trigger-path is not present if forbidden.
  7. Check if --trigger-path is correct if present.

  Args:
    args: The argument namespace.

  Returns:
    None, when using HTTPS trigger. Otherwise a dictionary containing
    trigger_provider, trigger_event, and trigger_resource.
  """
    if args.trigger_http:
        return None
    if args.trigger_bucket:
        return _BucketTrigger(args.trigger_bucket)
    if args.trigger_topic:
        return _TopicTrigger(args.trigger_topic)
    if args.trigger_provider is None:
        return None

    trigger_provider = args.trigger_provider
    trigger_event = args.trigger_event
    trigger_resource = args.trigger_resource
    # check and infer correct usage of flags accompanying --trigger-provider
    if trigger_event is None:
        trigger_event = util.input_trigger_provider_registry.Provider(
            trigger_provider).default_event.label

    resource_type = util.input_trigger_provider_registry.Event(
        trigger_provider, trigger_event).resource_type
    if resource_type == util.Resources.TOPIC:
        trigger_resource = util.ValidatePubsubTopicNameOrRaise(
            trigger_resource)
    elif resource_type == util.Resources.BUCKET:
        trigger_resource = storage_util.BucketReference.FromBucketUrl(
            trigger_resource).bucket
    elif resource_type == util.Resources.PROJECT:
        if trigger_resource:
            properties.VALUES.core.project.Validate(trigger_resource)
    else:
        # Check if programmer allowed other methods in
        # util.PROVIDER_EVENT_RESOURCE but forgot to update code here
        raise core_exceptions.InternalError()
    # checked if provided resource and path have correct format
    return {
        'trigger_provider': trigger_provider,
        'trigger_event': trigger_event,
        'trigger_resource': trigger_resource,
    }
Beispiel #3
0
def _CheckTriggerEventArgs(args):
    """Check --trigger-*  arguments and deduce if possible.

  0. if --trigger-http is return None.
  1. if --trigger-bucket return bucket trigger args (_BucketTrigger)
  2. if --trigger-topic return pub-sub trigger args (_TopicTrigger)
  3. if --trigger-event, deduce provider and resource from registry and return

  Args:
    args: The argument namespace.

  Returns:
    None, when using HTTPS trigger. Otherwise a dictionary containing
    trigger_provider, trigger_event, and trigger_resource.
  """
    if args.trigger_http:
        return None
    if args.trigger_bucket:
        return _BucketTrigger(args.trigger_bucket)
    if args.trigger_topic:
        return _TopicTrigger(args.trigger_topic)
    if not args.trigger_event:
        return None

    trigger_event = args.trigger_event
    trigger_provider = util.input_trigger_provider_registry.ProviderForEvent(
        trigger_event).label
    trigger_resource = args.trigger_resource
    resource_type = util.input_trigger_provider_registry.Event(
        trigger_provider, trigger_event).resource_type
    if resource_type == util.Resources.TOPIC:
        trigger_resource = util.ValidatePubsubTopicNameOrRaise(
            trigger_resource)
    elif resource_type == util.Resources.BUCKET:
        trigger_resource = storage_util.BucketReference.FromBucketUrl(
            trigger_resource).bucket
    elif resource_type == util.Resources.PROJECT:
        if trigger_resource:
            properties.VALUES.core.project.Validate(trigger_resource)
    else:
        # Check if programmer allowed other methods in
        # util.PROVIDER_EVENT_RESOURCE but forgot to update code here
        raise core_exceptions.InternalError()
    # checked if provided resource and path have correct format
    return {
        'trigger_provider': trigger_provider,
        'trigger_event': trigger_event,
        'trigger_resource': trigger_resource,
    }
Beispiel #4
0
def _CheckTriggerProviderArgs(args):
    """Check --trigger-provider dependent arguments and deduce if possible.

  0. Check if --trigger-provider is correct.
  1. Check if --trigger-event is present, assign default if not.
  2. Check if --trigger-event is correct WRT to --trigger-provider.
  3. Check if --trigger-resource is present if necessary.
  4. Check if --trigger-resource is correct WRT to *-provider and *-event.
  5. Check if --trigger-path is present if necessary.
  6. Check if --trigger-path is not present if forbidden.
  7. Check if --trigger-path is correct if present.

  Args:
    args: The argument namespace.

  Returns:
    args with all implicit information turned into explicit form.
  """

    # Create a copy of namespace (copy.copy doesn't work here)
    result = argparse.Namespace(**vars(args))
    # check and infer correct usage of flags accompanying --trigger-provider
    if result.trigger_event is None:
        result.trigger_event = util.trigger_provider_registry.Provider(
            result.trigger_provider).default_event.label
    elif result.trigger_event not in util.trigger_provider_registry.EventsLabels(
            result.trigger_provider):
        raise exceptions.FunctionsError('You can use only one of [' + ','.join(
            util.trigger_provider_registry.EventsLabels(
                result.trigger_provider)) + '] with --trigger-provider=' +
                                        result.trigger_provider)
    # checked if Event Type is correct

    if result.trigger_resource is None and util.trigger_provider_registry.Event(
            result.trigger_provider,
            result.trigger_event).resource_type != util.Resources.PROJECT:
        raise exceptions.FunctionsError(
            'You must provide --trigger-resource when using '
            '--trigger-provider={0} and --trigger-event={1}'.format(
                result.trigger_provider, result.trigger_event))
    path_allowance = util.trigger_provider_registry.Event(
        result.trigger_provider, result.trigger_event).path_obligatoriness
    if result.trigger_path is None and (path_allowance
                                        == util.Obligatoriness.REQUIRED):
        raise exceptions.FunctionsError(
            'You must provide --trigger-path when using '
            '--trigger-provider={0} and --trigger-event={1}'.format(
                result.trigger_provider, result.trigger_event))
    if result.trigger_path is not None and (path_allowance
                                            == util.Obligatoriness.FORBIDDEN):
        raise exceptions.FunctionsError(
            'You must not provide --trigger-path when using '
            '--trigger-provider={0} and --trigger-event={1}'.format(
                result.trigger_provider, result.trigger_event))
    # checked if Resource Type and Path were provided or not as required

    resource_type = util.trigger_provider_registry.Event(
        result.trigger_provider, result.trigger_event).resource_type
    if resource_type == util.Resources.TOPIC:
        result.trigger_resource = util.ValidatePubsubTopicNameOrRaise(
            result.trigger_resource)
    elif resource_type == util.Resources.BUCKET:
        result.trigger_resource = storage_util.BucketReference.FromBucketUrl(
            result.trigger_resource).bucket
    elif resource_type == util.Resources.PROJECT:
        if result.trigger_resource:
            properties.VALUES.core.project.Validate(result.trigger_resource)
    else:
        # Check if programmer allowed other methods in
        # util.PROVIDER_EVENT_RESOURCE but forgot to update code here
        raise core_exceptions.InternalError()
    if result.trigger_path is not None:
        util.ValidatePathOrRaise(result.trigger_path)
    # checked if provided resource and path have correct format
    return result
Beispiel #5
0
def _CheckTriggerProviderArgs(args):
    """Check --trigger-provider dependent arguments and deduce if possible.

  0. Check if --trigger-provider is correct.
  1. Check if --trigger-event is present, assign default if not.
  2. Check if --trigger-event is correct WRT to --trigger-provider.
  3. Check if --trigger-resource is present if necessary.
  4. Check if --trigger-resource is correct WRT to *-provider and *-event.
  5. Check if --trigger-path is present if necessary.
  6. Check if --trigger-path is not present if forbidden.
  7. Check if --trigger-path is correct if present.

  Args:
    args: The argument namespace.

  Returns:
    None, when using HTTPS trigger. Otherwise a dictionary containing
    trigger_provider, trigger_event, and trigger_resource.
  """
    if args.trigger_http:
        return None
    if args.trigger_bucket:
        return _BucketTrigger(args.trigger_bucket)
    if args.trigger_topic:
        return _TopicTrigger(args.trigger_topic)

    # TODO(b/36020181): move validation to a separate function.
    trigger_provider = args.trigger_provider
    trigger_event = args.trigger_event
    trigger_resource = args.trigger_resource
    # check and infer correct usage of flags accompanying --trigger-provider
    if trigger_event is None:
        trigger_event = util.input_trigger_provider_registry.Provider(
            trigger_provider).default_event.label
    elif trigger_event not in util.input_trigger_provider_registry.EventsLabels(
            trigger_provider):
        raise exceptions.FunctionsError('You can use only one of [' + ','.join(
            util.input_trigger_provider_registry.EventsLabels(
                trigger_provider)) + '] with --trigger-provider=' +
                                        trigger_provider)
    # checked if Event Type is correct

    if trigger_resource is None and util.input_trigger_provider_registry.Event(
            trigger_provider,
            trigger_event).resource_type != util.Resources.PROJECT:
        raise exceptions.FunctionsError(
            'You must provide --trigger-resource when using '
            '--trigger-provider={0} and --trigger-event={1}'.format(
                trigger_provider, trigger_event))
    # checked if Resource Type and Path were provided or not as required

    resource_type = util.input_trigger_provider_registry.Event(
        trigger_provider, trigger_event).resource_type
    if resource_type == util.Resources.TOPIC:
        trigger_resource = util.ValidatePubsubTopicNameOrRaise(
            trigger_resource)
    elif resource_type == util.Resources.BUCKET:
        trigger_resource = storage_util.BucketReference.FromBucketUrl(
            trigger_resource).bucket
    elif resource_type == util.Resources.PROJECT:
        if trigger_resource:
            properties.VALUES.core.project.Validate(trigger_resource)
    else:
        # Check if programmer allowed other methods in
        # util.PROVIDER_EVENT_RESOURCE but forgot to update code here
        raise core_exceptions.InternalError()
    # checked if provided resource and path have correct format
    return {
        'trigger_provider': trigger_provider,
        'trigger_event': trigger_event,
        'trigger_resource': trigger_resource,
    }
 def __badTopic(self, name):
   properties.VALUES.core.project.Set('myproject')
   error_pattern = self.__formatError(name, util._TOPIC_NAME_ERROR)
   with self.assertRaisesRegex(arg_parsers.ArgumentTypeError, error_pattern):
     util.ValidatePubsubTopicNameOrRaise(name)
 def __goodTopic(self, name):
   properties.VALUES.core.project.Set('myproject')
   self.assertEqual(util.ValidatePubsubTopicNameOrRaise(name), name)