class_docstr: Abstract Parser class to be inherited by all StreamAlert Parsers
class_docstr_tok: ["Abstract","Parser","class","to","be","inherited","by","all","StreamAlert","Parsers"]
docstr: Ensure the schema, including optional keys, etc, is defined properly
  
  All optional top level keys should also be defined within the schema itself,
  and just included in the optional top level keys list. The same applies to
  optional envelope keys and the envelope keys/schema.
  
  In the future, this function can be added to so that it also performs validation
  of types defined for values and so forth.
  
  Returns:
      bool: True if this schema is valid, False otherwise
docstr_tok: ["Ensure","the","schema",",","including","optional","keys",",","etc",",","is","defined","properly","All","optional","top","level","keys","should","also","be","defined","within","the","schema","itself",",","and","just","included","in","the","optional","top","level","keys","list",".","The","same","applies","to","optional","envelope","keys","and","the","envelope","keys\/schema",".","In","the","future",",","this","function","can","be","added","to","so","that","it","also","performs","validation","of","types","defined","for","values","and","so","forth",".","Returns",":","bool",":","True","if","this","schema","is","valid",",","False","otherwise"]
code: def _validate_schema(self):
      """Ensure the schema, including optional keys, etc, is defined properly
  
      All optional top level keys should also be defined within the schema itself,
      and just included in the optional top level keys list. The same applies to
      optional envelope keys and the envelope keys/schema.
  
      In the future, this function can be added to so that it also performs validation
      of types defined for values and so forth.
  
      Returns:
          bool: True if this schema is valid, False otherwise
      """
      # TODO (ryandeivert): check the value of types defined in the schema to ensure
      # they are valid before erroring out at the _convert_type stage
      values = [
          (self._schema, self._optional_top_level_keys),
          (self._envelope_schema, self._optional_envelope_keys),
      ]
  
      return all(
          optionals.issubset(schema) for schema, optionals in values
      )
  
imports: from abc import ABCMeta, abstractmethod
  from copy import deepcopy
  import csv
  from fnmatch import fnmatch
  import json
  import logging
  import re
  import io
  import jmespath
  from streamalert.shared.logger import get_logger
label_desc: Use image node_id 22 for calling the ParserBase obj's underlying member method code with example usage: obj._validate_schema() and returns: all