code: def validate(cls, mapper_spec):
      
      if mapper_spec.input_reader_class() != cls:
        raise BadReaderParamsError("Input reader class mismatch")
      params = _get_params(mapper_spec)
      if cls.ENTITY_KIND_PARAM not in params:
        raise BadReaderParamsError("Missing mapper parameter 'entity_kind'")
      if cls.BATCH_SIZE_PARAM in params:
        try:
          batch_size = int(params[cls.BATCH_SIZE_PARAM])
          if batch_size < 1:
            raise BadReaderParamsError("Bad batch size: %s" % batch_size)
        except ValueError, e:
          raise BadReaderParamsError("Bad batch size: %s" % e)
      if cls.NAMESPACE_PARAM in params:
        if not isinstance(params[cls.NAMESPACE_PARAM],
                          (str, unicode, type(None))):
          raise BadReaderParamsError(
              "Expected a single namespace string")
      if cls.NAMESPACES_PARAM in params:
        raise BadReaderParamsError("Multiple namespaces are no longer supported")
      if cls.FILTERS_PARAM in params:
        filters = params[cls.FILTERS_PARAM]
        if not isinstance(filters, list):
          raise BadReaderParamsError("Expected list for filters parameter")
        for f in filters:
          if not isinstance(f, (tuple, list)):
            raise BadReaderParamsError("Filter should be a tuple or list: %s", f)
          if len(f) != 3:
            raise BadReaderParamsError("Filter should be a 3-tuple: %s", f)
          if not isinstance(f[0], basestring):
            raise BadReaderParamsError("First element should be string: %s", f)
          if f[1] != "=":
            raise BadReaderParamsError(
                "Only equality filters are supported: %s", f)
docs: Validates mapper spec and all mapper parameters.
  
      Args:
        mapper_spec: The MapperSpec for this InputReader.
  
      Raises:
        BadReaderParamsError: required parameters are missing or invalid.