43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
|
from typing import List, Optional, Type
|
||
|
|
||
|
from dbt.adapters.base import Credentials
|
||
|
from dbt.exceptions import CompilationException
|
||
|
from dbt.adapters.protocol import AdapterProtocol
|
||
|
|
||
|
|
||
|
def project_name_from_path(include_path: str) -> str:
|
||
|
# avoid an import cycle
|
||
|
from dbt.config.project import Project
|
||
|
partial = Project.partial_load(include_path)
|
||
|
if partial.project_name is None:
|
||
|
raise CompilationException(
|
||
|
f'Invalid project at {include_path}: name not set!'
|
||
|
)
|
||
|
return partial.project_name
|
||
|
|
||
|
|
||
|
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[AdapterProtocol],
|
||
|
credentials: Type[Credentials],
|
||
|
include_path: str,
|
||
|
dependencies: Optional[List[str]] = None
|
||
|
):
|
||
|
|
||
|
self.adapter: Type[AdapterProtocol] = adapter
|
||
|
self.credentials: Type[Credentials] = credentials
|
||
|
self.include_path: str = include_path
|
||
|
self.project_name: str = project_name_from_path(include_path)
|
||
|
self.dependencies: List[str]
|
||
|
if dependencies is None:
|
||
|
self.dependencies = []
|
||
|
else:
|
||
|
self.dependencies = dependencies
|