text: from typing import List, Optional, Type
  
  from dbt.adapters.base import BaseAdapter, Credentials
  from dbt.exceptions import CompilationException
  
  
  class AdapterPlugin:
      """Defines the basic requirements for a dbt adapter plugin.
  
      :param include_path: The path to this adapter plugin's root
      :param dependencies: A list of adapter names that this adapter depends
          upon.
      """
      def __init__(
          self,
          adapter: Type[BaseAdapter],
          credentials: Type[Credentials],
          include_path: str,
          dependencies: Optional[List[str]] = None
      ):
          # avoid an import cycle
          from dbt.config.project import Project
  
          self.adapter: Type[BaseAdapter] = adapter
          self.credentials: Type[Credentials] = credentials
          self.include_path: str = include_path
          partial = Project.partial_load(include_path)
          if partial.project_name is None:
              raise CompilationException(
                  f'Invalid project at {include_path}: name not set!'
              )
          self.project_name: str = partial.project_name
          self.dependencies: List[str]
          if dependencies is None:
              self.dependencies = []
          else:
              self.dependencies = dependencies
  