dbt-selly/dbt-env/lib/python3.8/site-packages/dbt/task/run_operation.py

80 lines
2.4 KiB
Python
Raw Normal View History

2022-03-22 15:13:27 +00:00
from datetime import datetime
from typing import Dict, Any
import agate
from .runnable import ManifestTask
import dbt.exceptions
from dbt.adapters.factory import get_adapter
from dbt.config.utils import parse_cli_vars
from dbt.contracts.results import RunOperationResultsArtifact
from dbt.exceptions import InternalException
from dbt.logger import GLOBAL_LOGGER as logger
class RunOperationTask(ManifestTask):
def _get_macro_parts(self):
macro_name = self.args.macro
if '.' in macro_name:
package_name, macro_name = macro_name.split(".", 1)
else:
package_name = None
return package_name, macro_name
def _get_kwargs(self) -> Dict[str, Any]:
return parse_cli_vars(self.args.args)
def compile_manifest(self) -> None:
if self.manifest is None:
raise InternalException('manifest was None in compile_manifest')
def _run_unsafe(self) -> agate.Table:
adapter = get_adapter(self.config)
package_name, macro_name = self._get_macro_parts()
macro_kwargs = self._get_kwargs()
with adapter.connection_named('macro_{}'.format(macro_name)):
adapter.clear_transaction()
res = adapter.execute_macro(
macro_name,
project=package_name,
kwargs=macro_kwargs,
manifest=self.manifest
)
return res
def run(self) -> RunOperationResultsArtifact:
start = datetime.utcnow()
self._runtime_initialize()
try:
self._run_unsafe()
except dbt.exceptions.Exception as exc:
logger.error(
'Encountered an error while running operation: {}'
.format(exc)
)
logger.debug('', exc_info=True)
success = False
except Exception as exc:
logger.error(
'Encountered an uncaught exception while running operation: {}'
.format(exc)
)
logger.debug('', exc_info=True)
success = False
else:
success = True
end = datetime.utcnow()
return RunOperationResultsArtifact.from_success(
generated_at=end,
elapsed_time=(end - start).total_seconds(),
success=success,
)
def interpret_results(self, results):
return results.success