Skip to content

Commit 7f3a37c

Browse files
Jcohen0102705815
andauthored
[dagster-dataform] Import module objects into __init__.py (#228)
* [dagster-dataform] Initial README * [dagster-dataform] Root files * [dagster-dataform] Integration modules * [dagster-dataform] Integration unit tests * [dagster-dataform] Add prereq for freshness checks * [dagster-dataform] import module objects into __init__.py * [dagster-dataform] fix import names * [dagster-dataform] Resolve linting warnings. * [dagster-dataform] Add # noqa for stubborn type warnings --------- Co-authored-by: 2705815 <Justin.Cohen2@aetna.com>
1 parent 3a1063b commit 7f3a37c

7 files changed

Lines changed: 62 additions & 68 deletions

File tree

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
11
from dagster._core.libraries import DagsterLibraryRegistry
2+
from dagster_dataform.resources import (
3+
DataformRepositoryResource as DataformRepositoryResource,
4+
load_dataform_assets as load_dataform_assets,
5+
load_dataform_asset_check_specs as load_dataform_asset_check_specs,
6+
)
7+
from dagster_dataform.dataform_polling_sensor import (
8+
create_dataform_workflow_invocation_sensor as create_dataform_workflow_invocation_sensor,
9+
)
10+
from dagster_dataform.dataform_orchestration_schedule import (
11+
create_dataform_orchestration_schedule as create_dataform_orchestration_schedule,
12+
)
213

314
__version__ = "0.0.1"
415

516
DagsterLibraryRegistry.register(
6-
"example-integration", __version__, is_dagster_package=False
17+
"dagster-dataform", __version__, is_dagster_package=False
718
)

libraries/dagster-dataform/dagster_dataform/resources.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ def query_workflow_invocation(
148148

149149
if not name:
150150
self.logger.error("No workflow invocation name available")
151-
return []
151+
return [] # noqa
152152

153153
self.logger.info(f"Querying workflow invocation: {name}")
154154

@@ -163,7 +163,7 @@ def query_workflow_invocation(
163163
# self.logger.info(f"Found {len(response)} workflow invocation actions")
164164

165165
# Handle the response
166-
return response
166+
return response # noqa
167167

168168
def create_workflow_invocation(
169169
self, compilation_result_name: str
@@ -213,7 +213,7 @@ def load_dataform_assets(
213213
try:
214214
spec = AssetSpec(
215215
key=asset.target.name,
216-
kinds=["bigquery"],
216+
kinds=["bigquery"], # noqa
217217
metadata={
218218
"Project ID": asset.target.database,
219219
"Dataset": asset.target.schema,

libraries/dagster-dataform/dagster_dataform_tests/conftest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ def create_compilation_result(
8181
),
8282
)
8383

84+
8485
@pytest.fixture
8586
def mock_dataform_client(request):
8687
# This allows us to parametrize the test with different values for the git commitish, default database, default schema, default location, and assertion schema if necesessary (see test_dataform_repository_resource_get_latest_compilation_result_name_wrong_environment)

libraries/dagster-dataform/dagster_dataform_tests/test_dataform_orchestration_schedule.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
1-
from dagster_dataform.dataform_orchestration_schedule import create_dataform_orchestration_schedule
1+
from dagster_dataform.dataform_orchestration_schedule import (
2+
create_dataform_orchestration_schedule,
3+
)
24
from dagster_dataform.resources import DataformRepositoryResource
35
from dagster_dataform_tests.conftest import mock_dataform_client
46
import dagster as dg
57
from dagster import build_schedule_context
68
import pytest
7-
import json
8-
from google.cloud import dataform_v1
9+
910

1011
def test_dataform_orchestration_schedule_creates_schedule_and_job():
1112
resource = DataformRepositoryResource(
1213
project_id="test-project",
1314
repository_id="test-repo",
1415
location="us-central1",
1516
environment="dev",
16-
client=mock_dataform_client,
17+
client=mock_dataform_client, # noqa
1718
)
1819

1920
schedule = create_dataform_orchestration_schedule(
@@ -29,6 +30,7 @@ def test_dataform_orchestration_schedule_creates_schedule_and_job():
2930
assert schedule.job is not None
3031
assert schedule.job.name == "dataform_workflow_invocation_job"
3132

33+
3234
@pytest.mark.parametrize(
3335
"mock_dataform_client",
3436
[
@@ -63,6 +65,3 @@ def test_dataform_orchestration_schedule_tick_creates_run_request(mock_dataform_
6365
assert result is not None
6466
assert result.run_requests is not None
6567
assert len(result.run_requests) == 1
66-
67-
68-

libraries/dagster-dataform/dagster_dataform_tests/test_dataform_polling_sensor.py

Lines changed: 24 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
1-
from dagster_dataform.dataform_polling_sensor import create_dataform_workflow_invocation_sensor
1+
from dagster_dataform.dataform_polling_sensor import (
2+
create_dataform_workflow_invocation_sensor,
3+
)
24
from dagster_dataform.resources import DataformRepositoryResource
35
from dagster_dataform_tests.conftest import mock_dataform_client
46
import dagster as dg
57
from dagster import build_sensor_context
68
import pytest
79
import json
810

11+
912
def test_dataform_polling_sensor_creates_sensor_and_job():
1013
resource = DataformRepositoryResource(
1114
project_id="test-project",
1215
repository_id="test-repo",
1316
location="us-central1",
1417
environment="dev",
15-
client=mock_dataform_client,
18+
client=mock_dataform_client, # noqa
1619
)
1720

1821
sensor = create_dataform_workflow_invocation_sensor(
@@ -33,7 +36,7 @@ def test_dataform_polling_sensor_creates_sensor_and_job_when_passed_job():
3336
repository_id="test-repo",
3437
location="us-central1",
3538
environment="dev",
36-
client=mock_dataform_client,
39+
client=mock_dataform_client, # noqa
3740
)
3841

3942
@dg.job
@@ -66,7 +69,9 @@ def test_job():
6669
],
6770
indirect=True,
6871
)
69-
def test_dataform_polling_sensor_returns_sensor_result_cursor_updated(mock_dataform_client):
72+
def test_dataform_polling_sensor_returns_sensor_result_cursor_updated(
73+
mock_dataform_client,
74+
):
7075
resource = DataformRepositoryResource(
7176
project_id="test-project",
7277
repository_id="test-repo",
@@ -80,13 +85,9 @@ def test_dataform_polling_sensor_returns_sensor_result_cursor_updated(mock_dataf
8085
minutes_ago=10,
8186
)
8287

83-
cursor = json.dumps({
84-
"test-asset" : 1723957400
85-
})
88+
cursor = json.dumps({"test-asset": 1723957400})
8689

87-
expected_new_cursor = json.dumps({
88-
"test-asset" : 1723958400
89-
})
90+
expected_new_cursor = json.dumps({"test-asset": 1723958400})
9091

9192
context = build_sensor_context(cursor=cursor)
9293
result = sensor.evaluate_tick(context)
@@ -100,6 +101,7 @@ def test_dataform_polling_sensor_returns_sensor_result_cursor_updated(mock_dataf
100101
assert result.asset_events[0].metadata["Invocation SQL Query"] is not None
101102
assert result.asset_events[0].metadata["BigQuery JobID"] is not None
102103

104+
103105
@pytest.mark.parametrize(
104106
"mock_dataform_client",
105107
[
@@ -113,7 +115,9 @@ def test_dataform_polling_sensor_returns_sensor_result_cursor_updated(mock_dataf
113115
],
114116
indirect=True,
115117
)
116-
def test_dataform_polling_sensor_returns_sensor_result_cursor_not_updated(mock_dataform_client):
118+
def test_dataform_polling_sensor_returns_sensor_result_cursor_not_updated(
119+
mock_dataform_client,
120+
):
117121
resource = DataformRepositoryResource(
118122
project_id="test-project",
119123
repository_id="test-repo",
@@ -127,13 +131,9 @@ def test_dataform_polling_sensor_returns_sensor_result_cursor_not_updated(mock_d
127131
minutes_ago=10,
128132
)
129133

130-
cursor = json.dumps({
131-
"test-asset" : 1723958400
132-
})
134+
cursor = json.dumps({"test-asset": 1723958400})
133135

134-
expected_new_cursor = json.dumps({
135-
"test-asset" : 1723958400
136-
})
136+
expected_new_cursor = json.dumps({"test-asset": 1723958400})
137137

138138
context = build_sensor_context(cursor=cursor)
139139
result = sensor.evaluate_tick(context)
@@ -143,6 +143,7 @@ def test_dataform_polling_sensor_returns_sensor_result_cursor_not_updated(mock_d
143143
assert result.asset_events is not None
144144
assert len(result.asset_events) == 0
145145

146+
146147
@pytest.mark.parametrize(
147148
"mock_dataform_client",
148149
[
@@ -152,12 +153,14 @@ def test_dataform_polling_sensor_returns_sensor_result_cursor_not_updated(mock_d
152153
"default_schema": "test-schema",
153154
"default_location": "us-central1",
154155
"assertion_schema": "test-assertion-schema",
155-
"workflow_invocation_passed": False
156+
"workflow_invocation_passed": False,
156157
}
157158
],
158159
indirect=True,
159160
)
160-
def test_dataform_polling_sensor_returns_sensor_result_invocation_failed(mock_dataform_client):
161+
def test_dataform_polling_sensor_returns_sensor_result_invocation_failed(
162+
mock_dataform_client,
163+
):
161164
resource = DataformRepositoryResource(
162165
project_id="test-project",
163166
repository_id="test-repo",
@@ -171,13 +174,9 @@ def test_dataform_polling_sensor_returns_sensor_result_invocation_failed(mock_da
171174
minutes_ago=10,
172175
)
173176

174-
cursor = json.dumps({
175-
"test-asset" : 1723957400
176-
})
177+
cursor = json.dumps({"test-asset": 1723957400})
177178

178-
expected_new_cursor = json.dumps({
179-
"test-asset" : 1723958400
180-
})
179+
expected_new_cursor = json.dumps({"test-asset": 1723958400})
181180

182181
context = build_sensor_context(cursor=cursor)
183182
result = sensor.evaluate_tick(context)
@@ -192,13 +191,3 @@ def test_dataform_polling_sensor_returns_sensor_result_invocation_failed(mock_da
192191
assert result.asset_events[0].metadata["BigQuery JobID"] is not None
193192
assert result.run_requests is not None
194193
assert len(result.run_requests) == 1
195-
196-
197-
198-
199-
200-
201-
202-
203-
204-

libraries/dagster-dataform/dagster_dataform_tests/test_resources.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,9 @@
22
from dagster_dataform.utils import get_epoch_time_ago
33
import pytest
44
from google.cloud import dataform_v1
5-
from dagster_dataform_tests.conftest import (
6-
create_compilation_result,
7-
MOCK_COMPILATION_RESULT_ACTION,
8-
MOCK_WORKFLOW_INVOCATION,
9-
MOCK_WORKFLOW_INVOCATION_ACTION_FAILED,
10-
MOCK_WORKFLOW_INVOCATION_ACTION_PASSED,
11-
mock_dataform_client,
12-
)
135
from dagster import AssetSpec
146

7+
158
@pytest.mark.parametrize(
169
"mock_dataform_client",
1710
[
Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,47 @@
1-
import pytest
21
from unittest.mock import patch
32
from dagster_dataform.utils import get_epoch_time_ago
43

54

6-
@patch('dagster_dataform.utils.datetime')
5+
@patch("dagster_dataform.utils.datetime")
76
def test_get_epoch_time_ago_basic(mock_datetime):
87
"""Test basic functionality with 5 minutes."""
98
from datetime import datetime, timezone, timedelta
10-
9+
1110
# Mock current time
1211
mock_now = datetime(2024, 1, 15, 12, 0, 0, tzinfo=timezone.utc)
1312
mock_datetime.now.return_value = mock_now
14-
13+
1514
result = get_epoch_time_ago(5)
16-
15+
1716
# Should return timestamp 5 minutes ago
1817
expected = int((mock_now - timedelta(minutes=5)).timestamp())
1918
assert result == expected
2019

2120

22-
@patch('dagster_dataform.utils.datetime')
21+
@patch("dagster_dataform.utils.datetime")
2322
def test_get_epoch_time_ago_zero(mock_datetime):
2423
"""Test with 0 minutes."""
2524
from datetime import datetime, timezone
26-
25+
2726
mock_now = datetime(2024, 1, 15, 12, 0, 0, tzinfo=timezone.utc)
2827
mock_datetime.now.return_value = mock_now
29-
28+
3029
result = get_epoch_time_ago(0)
31-
30+
3231
# Should return current timestamp
3332
expected = int(mock_now.timestamp())
3433
assert result == expected
3534

3635

37-
@patch('dagster_dataform.utils.datetime')
36+
@patch("dagster_dataform.utils.datetime")
3837
def test_get_epoch_time_ago_returns_integer(mock_datetime):
3938
"""Test that function returns integer."""
4039
from datetime import datetime, timezone
41-
42-
mock_datetime.now.return_value = datetime(2024, 1, 15, 12, 0, 0, tzinfo=timezone.utc)
43-
40+
41+
mock_datetime.now.return_value = datetime(
42+
2024, 1, 15, 12, 0, 0, tzinfo=timezone.utc
43+
)
44+
4445
result = get_epoch_time_ago(10)
45-
46+
4647
assert isinstance(result, int)

0 commit comments

Comments
 (0)