def ValidateRoboDirectivesList(args): """Validates key-value pairs for 'robo_directives' flag.""" resource_names = set() duplicates = set() for key, value in six.iteritems((args.robo_directives or {})): (action_type, resource_name) = util.ParseRoboDirectiveKey(key) if action_type == 'click' and value: raise test_exceptions.InvalidArgException( 'robo_directives', 'Input value not allowed for click action: [{0}={1}]'.format( key, value)) # Validate resource_name validity if not resource_name: raise test_exceptions.InvalidArgException( 'robo_directives', 'Missing resource_name for key [{0}].'.format(key)) # Validate resource name uniqueness if resource_name in resource_names: duplicates.add(resource_name) else: resource_names.add(resource_name) if duplicates: raise test_exceptions.InvalidArgException( 'robo_directives', 'Duplicate resource names are not allowed: [{0}].'.format( ', '.join(duplicates)))
def _BuildRoboDirectives(self, robo_directives_dict): """Build a list of RoboDirectives from the dictionary input.""" robo_directives = [] action_types = self._messages.RoboDirective.ActionTypeValueValuesEnum action_type_mapping = { 'click': action_types.SINGLE_CLICK, 'text': action_types.ENTER_TEXT } for key, value in six.iteritems((robo_directives_dict or {})): (action_type, resource_name) = util.ParseRoboDirectiveKey(key) robo_directives.append( self._messages.RoboDirective( resourceName=resource_name, inputText=value, actionType=action_type_mapping.get(action_type))) return robo_directives