Skip to content

Commit c8650a4

Browse files
authored
Merge pull request #165 from OpenDataAlex/process_tracker_python-160
process_tracker_python-160 Is process type required for Process Tracker?
2 parents ab16953 + 09af038 commit c8650a4

File tree

2 files changed

+42
-15
lines changed

2 files changed

+42
-15
lines changed

process_tracker/process_tracker.py

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ def __init__(
7979
ProcessTracker is the primary engine for tracking data integration processes.
8080
:param process_name: Name of the process being tracked.
8181
:param process_run_name: Optional name of the process run.
82+
:param process_type: Type of process the process_name is. Optional if process already exists.
8283
:param actor_name: Name of the person or environment runnning the process.
8384
:param tool_name: Name of the tool used to run the process.
8485
:param sources: A single source name or list of source names for the given process. If source_objects is set,
@@ -164,17 +165,15 @@ def __init__(
164165
self.logger.error(error_msg)
165166
raise Exception(error_msg)
166167
else:
167-
if process_name is None or process_type is None:
168-
error_msg = "process_name and process_type must be set."
168+
if process_name is None is None:
169+
error_msg = "process_name must be set."
169170
self.logger.error(error_msg)
170171
raise Exception(error_msg)
171172

172173
self.actor = self.data_store.get_or_create_item(
173174
model=Actor, actor_name=actor_name
174175
)
175-
self.process_type = self.data_store.get_or_create_item(
176-
model=ProcessType, process_type_name=process_type
177-
)
176+
178177
self.tool = self.data_store.get_or_create_item(
179178
model=Tool, tool_name=tool_name
180179
)
@@ -188,13 +187,27 @@ def __init__(
188187
model=ScheduleFrequency, schedule_frequency_name=schedule_frequency
189188
)
190189

191-
self.process = self.data_store.get_or_create_item(
192-
model=Process,
193-
process_name=process_name,
194-
process_type_id=self.process_type.process_type_id,
195-
process_tool_id=self.tool.tool_id,
196-
schedule_frequency_id=self.schedule_frequency.schedule_frequency_id,
197-
)
190+
if process_type is None:
191+
192+
self.process = self.data_store.get_or_create_item(
193+
model=Process, process_name=process_name, create=False
194+
)
195+
196+
self.process_type = self.process.process_type
197+
198+
else:
199+
200+
self.process_type = self.data_store.get_or_create_item(
201+
model=ProcessType, process_type_name=process_type
202+
)
203+
204+
self.process = self.data_store.get_or_create_item(
205+
model=Process,
206+
process_name=process_name,
207+
process_type_id=self.process_type.process_type_id,
208+
process_tool_id=self.tool.tool_id,
209+
schedule_frequency_id=self.schedule_frequency.schedule_frequency_id,
210+
)
198211

199212
# Dataset types should be loaded before source and target because they are also used there.
200213

tests/test_process_tracker.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2218,7 +2218,7 @@ def test_determine_process_targets(self):
22182218
def test_ensure_nulls_caught_on_instantiation(self):
22192219
"""
22202220
With the adding of the ability of have a process_tracking_id we have to allow for nulled values for process_name
2221-
and process_type. If ProcessTracker is instantiated with either (or both) being null, an exception should be
2221+
. If ProcessTracker is instantiated with process_name being null, an exception should be
22222222
raised.
22232223
:return:
22242224
"""
@@ -2227,6 +2227,20 @@ def test_ensure_nulls_caught_on_instantiation(self):
22272227

22282228
ProcessTracker()
22292229

2230-
return self.assertTrue(
2231-
"process_name and process_type must be set." in str(context.exception)
2230+
return self.assertTrue("process_name must be set." in str(context.exception))
2231+
2232+
def test_ensure_process_type_returned_with_given_process_name(self):
2233+
"""Ensuring that if just the process name is passed, the process type will be retrieved for that given process"""
2234+
2235+
self.process_tracker.change_run_status("completed")
2236+
2237+
test_process = ProcessTracker(
2238+
process_name="Testing Process Tracking Initialization",
2239+
actor_name="UnitTesting",
2240+
tool_name="Spark",
22322241
)
2242+
2243+
given_result = test_process.process_type.process_type_name
2244+
expected_result = "Extract"
2245+
2246+
return self.assertEqual(expected_result, given_result)

0 commit comments

Comments
 (0)