Skip to content

Commit

Permalink
Allow email to be a list instead of a string
Browse files Browse the repository at this point in the history
  • Loading branch information
aranke committed Jan 17, 2025
1 parent d38ee14 commit ccd1d65
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 3 deletions.
4 changes: 2 additions & 2 deletions core/dbt/artifacts/resources/v1/owner.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from dataclasses import dataclass
from typing import Optional
from typing import List, Optional, Union

from dbt_common.contracts.config.properties import AdditionalPropertiesAllowed


@dataclass
class Owner(AdditionalPropertiesAllowed):
email: Optional[str] = None
email: Union[str, List[str], None] = None
name: Optional[str] = None
2 changes: 1 addition & 1 deletion core/dbt/contracts/graph/nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -1531,7 +1531,7 @@ def to_logging_dict(self) -> Dict[str, Union[str, Dict[str, str]]]:
return {
"name": self.name,
"package_name": self.package_name,
"owner": self.owner.to_dict(omit_none=True),
"owner": {k: str(v) for k, v in self.owner.to_dict(omit_none=True).items()},
}


Expand Down
59 changes: 59 additions & 0 deletions tests/functional/logging/test_logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,27 @@ def test_invalid_event_value(project, logs_dir):
access: public
"""

groups_yml_with_multiple_emails = """
groups:
- name: my_group_with_owner_metadata
owner:
name: my_name
email:
- [email protected]
- [email protected]
slack: my_slack
other_property: something_else
models:
- name: my_model
group: my_group_with_owner_metadata
access: public
columns:
- name: my_column
tests:
- not_null
"""


class TestRunResultErrorNodeInfo:
@pytest.fixture(scope="class")
Expand Down Expand Up @@ -289,3 +310,41 @@ def models(self):
def test_node_info_on_results(self, project, logs_dir):
results = run_dbt(["--no-write-json", "run"])
assert len(results) == 1


class TestRunResultGroupWithMultipleEmails:
@pytest.fixture(scope="class")
def models(self):
return {
"my_model.sql": "select 1 as id, null as my_column",
"groups.yml": groups_yml_with_multiple_emails,
}

def test_node_info_on_results(self, project, logs_dir):
results = run_dbt(["--log-format=json", "build"], expect_pass=False)
assert len(results) == 2

log_file = read_file(logs_dir, "dbt.log")
run_result_error_count = 0

for log_line in log_file.split("\n"):
if not log_line:
continue

log_json = json.loads(log_line)
if log_json["info"]["level"] == EventLevel.DEBUG:
continue

if log_json["info"]["name"] == "RunResultError":
assert "group" in log_json["data"]
group_data = log_json["data"]["group"]
assert group_data["name"] == "my_group_with_owner_metadata"
assert group_data["owner"] == {
"name": "my_name",
"email": "['[email protected]', '[email protected]']",
"slack": "my_slack",
"other_property": "something_else",
}
run_result_error_count += 1

assert run_result_error_count == 1

0 comments on commit ccd1d65

Please sign in to comment.