Skip to content

Commit

Permalink
add adapter logging interface
Browse files Browse the repository at this point in the history
  • Loading branch information
Nathaniel May committed Oct 28, 2021
1 parent 080d756 commit 1d2ff5f
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 0 deletions.
13 changes: 13 additions & 0 deletions core/dbt/events/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,16 @@ The event module provides types that represent what is happening in dbt in `even

# Adding a New Event
In `events.types` add a new class that represents the new event. This may be a simple class with no values, or it may require some values to construct downstream messaging. Only include the data necessary to construct this message within this class. If it fits into one of the existing hierarchies, add it as a subclass of the base class, and add it as a member of the union type so that all of the mypy checks will include it. Finally, add the type to the body of the functions that compose the final messages.

# Adapter Maintainers
To integrate existing log messages from adapters, you likely have a line of code like this in your adapter already:
```python
from dbt.logger import GLOBAL_LOGGER as logger
```

Simply change it to these two lines with your adapter's database name, and all your existing call sites will now use the new system for v1.0:
```python
from dbt.events import AdapterLogger
logger = AdapterLogger("<database name>")
# e.g. AdapterLogger("Snowflake")
```
1 change: 1 addition & 0 deletions core/dbt/events/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .adapter_endpoint import AdapterLogger # noqa: F401
22 changes: 22 additions & 0 deletions core/dbt/events/adapter_endpoint.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from dataclasses import dataclass
from dbt.events.functions import fire_event
from dbt.events.types import (
AdapterEventDebug, AdapterEventInfo, AdapterEventWarning, AdapterEventError
)


@dataclass
class AdapterLogger():
name: str

def debug(self, msg: str):
fire_event(AdapterEventDebug(name=self.name, raw_msg=msg))

def info(self, msg: str):
fire_event(AdapterEventInfo(name=self.name, raw_msg=msg))

def warning(self, msg: str):
fire_event(AdapterEventWarning(name=self.name, raw_msg=msg))

def error(self, msg: str):
fire_event(AdapterEventError(name=self.name, raw_msg=msg))
25 changes: 25 additions & 0 deletions core/dbt/events/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,31 @@ def cli_msg(self) -> str:
raise Exception("cli_msg not implemented for cli event")


@dataclass
class AdapterEventBase():
name: str
raw_msg: str

def cli_msg(self) -> str:
return f"{self.name} adapter: {self.raw_msg}"


class AdapterEventDebug(DebugLevel, AdapterEventBase, CliEventABC):
pass


class AdapterEventInfo(InfoLevel, AdapterEventBase, CliEventABC):
pass


class AdapterEventWarning(WarnLevel, AdapterEventBase, CliEventABC):
pass


class AdapterEventError(ErrorLevel, AdapterEventBase, CliEventABC):
pass


class ParsingStart(InfoLevel, CliEventABC):
def cli_msg(self) -> str:
return "Start parsing."
Expand Down

0 comments on commit 1d2ff5f

Please sign in to comment.