Skip to content

Commit

Permalink
add support for new struct logging (#42)
Browse files Browse the repository at this point in the history
* add support for new struct logging

* add changelog

* Update integration tests

Co-authored-by: Jeremy Cohen <jeremy@dbtlabs.com>
  • Loading branch information
emmyoop and jtcohen6 authored Nov 10, 2021
1 parent b298dab commit 1438072
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 20 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ N/A
- Add optional profile parameters for atypical local connection setups ([#21](https://github.com/dbt-labs/dbt-snowflake/issues/21), [#36](https://github.com/dbt-labs/dbt-snowflake/pull/36))
- Bump upper bound on `snowflake-connector-python` to `<2.8.0` ([#44](https://github.com/dbt-labs/dbt-snowflake/pull/44))
- Remove official support for python 3.6, which is reaching end of life on December 23, 2021 ([dbt-core#4134](https://github.com/dbt-labs/dbt-core/issues/4134), [#38](https://github.com/dbt-labs/dbt-snowflake/pull/45))
- Add support for structured logging [#42](https://github.com/dbt-labs/dbt-snowflake/pull/42)

### Contributors
- [@laxjesse](https://github.com/laxjesse) ([#36](https://github.com/dbt-labs/dbt-snowflake/pull/36))
Expand Down
3 changes: 2 additions & 1 deletion dbt/adapters/snowflake/connections.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@
from dbt.adapters.base import Credentials
from dbt.contracts.connection import AdapterResponse
from dbt.adapters.sql import SQLConnectionManager
from dbt.logger import GLOBAL_LOGGER as logger
from dbt.events import AdapterLogger


logger = AdapterLogger("Snowflake")
_TOKEN_REQUEST_URL = 'https://{}.snowflakecomputing.com/oauth/token-request'


Expand Down
18 changes: 11 additions & 7 deletions tests/integration/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,15 @@
from dbt.clients.jinja import template_cache
from dbt.config import RuntimeConfig
from dbt.context import providers
from dbt.logger import GLOBAL_LOGGER as logger, log_manager
from dbt.logger import log_manager
from dbt.events.functions import (
capture_stdout_logs, fire_event, setup_event_logger, stop_capture_stdout_logs
)
from dbt.events import AdapterLogger
from dbt.contracts.graph.manifest import Manifest


logger = AdapterLogger("Snowflake")
INITIAL_ROOT = os.getcwd()


Expand Down Expand Up @@ -252,6 +257,7 @@ def setUp(self):
os.chdir(self.initial_dir)
# before we go anywhere, collect the initial path info
self._logs_dir = os.path.join(self.initial_dir, 'logs', self.prefix)
setup_event_logger(self._logs_dir)
_really_makedirs(self._logs_dir)
self.test_original_source_path = _pytest_get_test_root()
self.test_root_dir = self._generate_test_root_dir()
Expand Down Expand Up @@ -446,16 +452,14 @@ def run_dbt(self, args=None, expect_pass=True, profiles_dir=True):

def run_dbt_and_capture(self, *args, **kwargs):
try:
initial_stdout = log_manager.stdout
initial_stderr = log_manager.stderr
stringbuf = io.StringIO()
log_manager.set_output_stream(stringbuf)

stringbuf = capture_stdout_logs()
res = self.run_dbt(*args, **kwargs)
stdout = stringbuf.getvalue()

finally:
log_manager.set_output_stream(initial_stdout, initial_stderr)
stop_capture_stdout_logs()

return res, stdout

return res, stdout

Expand Down
24 changes: 13 additions & 11 deletions tests/integration/query_comments_test/test_query_comments.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import io
import json
import os
import re

import dbt.exceptions
from dbt.version import __version__ as dbt_version
Expand Down Expand Up @@ -52,28 +53,29 @@ def tearDown(self):
super().tearDown()

def run_get_json(self, expect_pass=True):
self.run_dbt(
res, raw_logs = self.run_dbt_and_capture(
['--debug', '--log-format=json', 'run'],
expect_pass=expect_pass
)
logs = []
for line in self.stringbuf.getvalue().split('\n'):
parsed_logs = []
for line in raw_logs.split('\n'):
try:
log = json.loads(line)
except ValueError:
continue

if log['extra'].get('run_state') != 'running':
continue
logs.append(log)
self.assertGreater(len(logs), 0)
return logs
parsed_logs.append(log)

# empty lists evaluate as False
self.assertTrue(parsed_logs)
return parsed_logs

def query_comment(self, model_name, log):
log_msg = re.sub("(?:[01]\d|2[0123]):(?:[012345]\d):(?:[012345]\d \| )", "", log['msg'])
prefix = 'On {}: '.format(model_name)

if log['message'].startswith(prefix):
msg = log['message'][len(prefix):]
if log_msg.startswith(prefix):
msg = log_msg[len(prefix):]
if msg in {'COMMIT', 'BEGIN', 'ROLLBACK'}:
return None
return msg
Expand All @@ -88,7 +90,7 @@ def run_assert_comments(self):
if msg is not None and self.matches_comment(msg):
seen = True

self.assertTrue(seen, 'Never saw a matching log message! Logs:\n{}'.format('\n'.join(l['message'] for l in logs)))
self.assertTrue(seen, 'Never saw a matching log message! Logs:\n{}'.format('\n'.join(l['msg'] for l in logs)))

@use_profile('snowflake')
def test_snowflake_comments(self):
Expand Down
1 change: 0 additions & 1 deletion tests/unit/test_snowflake_adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
from dbt.contracts.files import FileHash
from dbt.contracts.graph.manifest import ManifestStateCheck
from dbt.clients import agate_helper
from dbt.logger import GLOBAL_LOGGER as logger # noqa
from snowflake import connector as snowflake_connector

from .utils import config_from_parts_or_dicts, inject_adapter, mock_connection, TestAdapterConversions, load_internal_manifest_macros
Expand Down

0 comments on commit 1438072

Please sign in to comment.