Skip to content

Commit 65b84d8

Browse files
committed
Extract Dependency - Add Ability To Add Dependencies
Dependencies can now be added to Extracts via the add_dependency() method. Working: #14
1 parent 8884435 commit 65b84d8

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed

process_tracker/extract_tracker.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,36 @@ def __init__(
110110

111111
self.session.commit()
112112

113+
def add_dependency(self, dependency_type, dependency):
114+
"""
115+
Add a parent or child dependency on the given extract file.
116+
:param dependency_type: dependency type. Valid values: parent, child
117+
:type dependency_type: string
118+
:param dependency: dependent extract
119+
:type dependency: SQLAlchemy Extract object
120+
:return:
121+
"""
122+
123+
if dependency_type == "parent":
124+
dependency = ExtractDependency(
125+
child_extract_id=self.extract.extract_id,
126+
parent_extract_id=dependency.extract.extract_id,
127+
)
128+
129+
elif dependency_type == "child":
130+
dependency = ExtractDependency(
131+
child_extract_id=dependency.extract.extract_id,
132+
parent_extract_id=self.extract.extract_id,
133+
)
134+
else:
135+
self.logger.error("Invalid dependency type.")
136+
raise Exception("Invalid extract dependency type.")
137+
138+
self.session.add(dependency)
139+
self.session.commit()
140+
141+
self.logger.info("Extract %s dependency added." % dependency_type)
142+
113143
def change_extract_status(self, new_status):
114144
"""
115145
Change an extract record status.

tests/test_extract_tracker.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,60 @@ def tearDown(self):
7070
self.session.query(Location).delete()
7171
self.session.commit()
7272

73+
def test_add_dependency_parent(self):
74+
"""
75+
Testing that a parent extract dependency is created when adding dependency to extract.
76+
:return:
77+
"""
78+
dependent_extract = ExtractTracker(
79+
process_run=self.process_run,
80+
filename="Dependent File.csv",
81+
location_name="Test Location",
82+
location_path="/home/test/extract_dir",
83+
)
84+
self.extract.add_dependency(
85+
dependency_type="parent", dependency=dependent_extract
86+
)
87+
88+
given_result = (
89+
self.session.query(ExtractDependency)
90+
.filter(
91+
ExtractDependency.child_extract_id == self.extract.extract.extract_id
92+
)
93+
.count()
94+
)
95+
96+
expected_result = 1
97+
98+
self.assertEqual(expected_result, given_result)
99+
100+
def test_add_dependency_child(self):
101+
"""
102+
Testing that a child extract dependency is created when adding dependency to extract.
103+
:return:
104+
"""
105+
dependent_extract = ExtractTracker(
106+
process_run=self.process_run,
107+
filename="Dependent File.csv",
108+
location_name="Test Location",
109+
location_path="/home/test/extract_dir",
110+
)
111+
self.extract.add_dependency(
112+
dependency_type="child", dependency=dependent_extract
113+
)
114+
115+
given_result = (
116+
self.session.query(ExtractDependency)
117+
.filter(
118+
ExtractDependency.parent_extract_id == self.extract.extract.extract_id
119+
)
120+
.count()
121+
)
122+
123+
expected_result = 1
124+
125+
self.assertEqual(expected_result, given_result)
126+
73127
def test_initialization_no_location_no_location_path(self):
74128
"""
75129
Testing that if no location or location path is set, an error is thrown.

0 commit comments

Comments
 (0)