code: def construct_operation_validators(api_path, path_definition, operation_definition, context):
      
      validators = {}
  
      # sanity check
      assert 'context' not in operation_definition
      assert 'api_path' not in operation_definition
      assert 'path_definition' not in operation_definition
  
      for key in operation_definition.keys():
          if key not in validator_mapping:
              # TODO: is this the right thing to do?
              continue
          validators[key] = validator_mapping[key](
              context=context,
              api_path=api_path,
              path_definition=path_definition,
              **operation_definition
          )
  
      # Global defaults
      if 'consumes' in context and 'consumes' not in validators:
          validators['consumes'] = validator_mapping['consumes'](**context)
      if 'parameters' in path_definition and 'parameters' not in validators:
          validators['parameters'] = validator_mapping['parameters'](
              context=context,
              api_path=api_path,
              path_definition=path_definition,
              parameters=path_definition['parameters'],
              **operation_definition
          )
  
      return validators
docs: - consumes (did the request conform to the content types this api consumes)
      - produces (did the response conform to the content types this endpoint produces)
      - parameters (did the parameters of this request validate)
        TODO: move path parameter validation to here, because each operation
              can override any of the path level parameters.
      - schemes (was the request scheme correct)
      - security: TODO since security isn't yet implemented.