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, }
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, }
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
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)