parameters: (cls, mapper_spec)
docstring: Validates the mapper's specification and all necessary parameters.
  
      Args:
        mapper_spec: The MapperSpec to be used with this InputReader.
  
      Raises:
        BadReaderParamsError: If the user fails to specify both a starting time
          and an ending time, or if the starting time is later than the ending
          time.
docstring_summary: Validates the mapper's specification and all necessary parameters.
docstring_tokens: Validates the mapper s specification and all necessary parameters .
function: def validate(cls, mapper_spec):
      """Validates the mapper's specification and all necessary parameters.
  
      Args:
        mapper_spec: The MapperSpec to be used with this InputReader.
  
      Raises:
        BadReaderParamsError: If the user fails to specify both a starting time
          and an ending time, or if the starting time is later than the ending
          time.
      """
      if mapper_spec.input_reader_class() != cls:
        raise errors.BadReaderParamsError("Input reader class mismatch")
  
      params = _get_params(mapper_spec, allowed_keys=cls._PARAMS)
      if (cls.VERSION_IDS_PARAM not in params and
          cls.MODULE_VERSIONS_PARAM not in params):
        raise errors.BadReaderParamsError("Must specify a list of version ids or "
                                          "module/version ids for mapper input")
      if (cls.VERSION_IDS_PARAM in params and
          cls.MODULE_VERSIONS_PARAM in params):
        raise errors.BadReaderParamsError("Can not supply both version ids or "
                                          "module/version ids. Use only one.")
      if (cls.START_TIME_PARAM not in params or
          params[cls.START_TIME_PARAM] is None):
        raise errors.BadReaderParamsError("Must specify a starting time for "
                                          "mapper input")
      if cls.END_TIME_PARAM not in params or params[cls.END_TIME_PARAM] is None:
        params[cls.END_TIME_PARAM] = time.time()
  
      if params[cls.START_TIME_PARAM] >= params[cls.END_TIME_PARAM]:
        raise errors.BadReaderParamsError("The starting time cannot be later "
                                          "than or the same as the ending time.")
  
      if cls._PROTOTYPE_REQUEST_PARAM in params:
        try:
          params[cls._PROTOTYPE_REQUEST_PARAM] = log_service_pb.LogReadRequest(
              params[cls._PROTOTYPE_REQUEST_PARAM])
        except (TypeError, ProtocolBuffer.ProtocolBufferDecodeError):
          raise errors.BadReaderParamsError("The prototype request must be "
                                            "parseable as a LogReadRequest.")
  
      # Pass the parameters to logservice.fetch() to verify any underlying
      # constraints on types or values.  This only constructs an iterator, it
      # doesn't trigger any requests for actual log records.
      try:
        logservice.fetch(**params)
      except logservice.InvalidArgumentError, e:
        raise errors.BadReaderParamsError("One or more parameters are not valid "
                                          "inputs to logservice.fetch(): %s" % e)
function_tokens: def validate ( cls , mapper_spec ) : if mapper_spec . input_reader_class ( ) != cls : raise errors . BadReaderParamsError ( "Input reader class mismatch" ) params = _get_params ( mapper_spec , allowed_keys = cls . _PARAMS ) if ( cls . VERSION_IDS_PARAM not in params and cls . MODULE_VERSIONS_PARAM not in params ) : raise errors . BadReaderParamsError ( "Must specify a list of version ids or " "module/version ids for mapper input" ) if ( cls . VERSION_IDS_PARAM in params and cls . MODULE_VERSIONS_PARAM in params ) : raise errors . BadReaderParamsError ( "Can not supply both version ids or " "module/version ids. Use only one." ) if ( cls . START_TIME_PARAM not in params or params [ cls . START_TIME_PARAM ] is None ) : raise errors . BadReaderParamsError ( "Must specify a starting time for " "mapper input" ) if cls . END_TIME_PARAM not in params or params [ cls . END_TIME_PARAM ] is None : params [ cls . END_TIME_PARAM ] = time . time ( ) if params [ cls . START_TIME_PARAM ] >= params [ cls . END_TIME_PARAM ] : raise errors . BadReaderParamsError ( "The starting time cannot be later " "than or the same as the ending time." ) if cls . _PROTOTYPE_REQUEST_PARAM in params : try : params [ cls . _PROTOTYPE_REQUEST_PARAM ] = log_service_pb . LogReadRequest ( params [ cls . _PROTOTYPE_REQUEST_PARAM ] ) except ( TypeError , ProtocolBuffer . ProtocolBufferDecodeError ) : raise errors . BadReaderParamsError ( "The prototype request must be " "parseable as a LogReadRequest." ) # Pass the parameters to logservice.fetch() to verify any underlying # constraints on types or values.  This only constructs an iterator, it # doesn't trigger any requests for actual log records. try : logservice . fetch ( * * params ) except logservice . InvalidArgumentError , e : raise errors . BadReaderParamsError ( "One or more parameters are not valid " "inputs to logservice.fetch(): %s" % e )