Skip to content

Commit 26653b5

Browse files
committed
Added Extract Dependency Tracking
✨ Ability to have extract interdependency ExtractTracker now has dependency tracking. Working: #14
1 parent ba44898 commit 26653b5

File tree

4 files changed

+51
-4
lines changed

4 files changed

+51
-4
lines changed

Pipfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ url = "https://pypi.org/simple"
44
verify_ssl = true
55

66
[dev-packages]
7+
black = "*"
78
coverage="*"
9+
coveralls="*"
810
moto="*"
911
python-coveralls="*"
10-
coveralls="*"
1112

1213
[packages]
1314
boto3="*"
@@ -21,7 +22,6 @@ snowflake-sqlalchemy = "*"
2122
pymysql = "*"
2223
cx-oracle = "*"
2324
pymssql = "*"
24-
black = "*"
2525

2626
[requires]
2727
python_version = "3.7"

process_tracker/extract_tracker.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ def extract_dependency_check(self):
182182
"created, or are in the process of loading."
183183
)
184184

185+
else:
186+
return False
187+
185188
def get_extract_status_types(self):
186189
"""
187190
Get list of process status types and return dictionary.

tests/test_extract_tracker.py

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
)
1313

1414
from process_tracker.data_store import DataStore
15-
from process_tracker.extract_tracker import ExtractTracker
15+
from process_tracker.extract_tracker import ExtractDependency, ExtractTracker
1616
from process_tracker.process_tracker import ErrorTracking, ProcessTracker
1717

1818

@@ -64,6 +64,7 @@ def tearDown(self):
6464
Need to clean up tables to return them to pristine state for other tests.
6565
:return:
6666
"""
67+
self.session.query(ExtractDependency).delete()
6768
self.session.query(ExtractProcess).delete()
6869
self.session.query(Extract).delete()
6970
self.session.query(Location).delete()
@@ -192,13 +193,56 @@ def test_extract_dependency_check(self):
192193
is loaded.
193194
:return:
194195
"""
196+
dependent_extract = ExtractTracker(
197+
process_run=self.process_run,
198+
filename="Dependent File.csv",
199+
location_name="Test Location",
200+
location_path="/home/test/extract_dir",
201+
)
202+
dependency = ExtractDependency(
203+
child_extract_id=dependent_extract.extract.extract_id,
204+
parent_extract_id=self.extract.extract.extract_id,
205+
)
206+
207+
self.session.add(dependency)
208+
self.session.commit()
209+
self.extract.change_extract_status("loaded")
210+
211+
given_result = dependent_extract.extract_dependency_check()
212+
213+
expected_result = False
214+
215+
self.assertEqual(expected_result, given_result)
195216

196217
def test_extract_dependency_check_blocked(self):
197218
"""
198219
Testing that if a dependency is in a state that stops an extract from being loaded, then the extract triggers an
199220
error blocking the file from being processed.
200221
:return:
201222
"""
223+
dependent_extract = ExtractTracker(
224+
process_run=self.process_run,
225+
filename="Dependent File.csv",
226+
location_name="Test Location",
227+
location_path="/home/test/extract_dir",
228+
)
229+
dependency = ExtractDependency(
230+
child_extract_id=dependent_extract.extract.extract_id,
231+
parent_extract_id=self.extract.extract.extract_id,
232+
)
233+
234+
self.session.add(dependency)
235+
self.session.commit()
236+
237+
self.extract.change_extract_status("loading")
238+
239+
with self.assertRaises(Exception) as context:
240+
dependent_extract.extract_dependency_check()
241+
242+
return self.assertTrue(
243+
"Extract files that this extract file is dependent on have not been loaded, are being "
244+
"created, or are in the process of loading." in str(context.exception)
245+
)
202246

203247
def test_location_name_provided(self):
204248
"""

tests/test_process_tracker.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ def test_register_extracts_by_location_local(self):
473473
["test_local_dir_2.csv", "ready", "ready"],
474474
]
475475

476-
self.assertEqual(expected_result, given_result)
476+
self.assertCountEqual(expected_result, given_result)
477477

478478
# def test_register_extracts_by_location_s3(self):
479479
# """

0 commit comments

Comments
 (0)