Skip to content

Commit 156f739

Browse files
authored
Merge pull request #79 from controlm/fix-run-as
fix run as job and subfolder in folder objects
2 parents 9e94d1e + 286592a commit 156f739

File tree

5 files changed

+74
-9
lines changed

5 files changed

+74
-9
lines changed

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
name="ctm-python-client",
99
packages=find_packages(where="src"),
1010
package_dir={"": "src"},
11-
version="2.3.0",
11+
version="2.3.1",
1212
description="Python Workflows for Control-M",
1313
long_description=long_description,
1414
long_description_content_type='text/markdown',

src/ctm_python_client/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
__version__ = '2.3.0'
1+
__version__ = '2.3.1'
22
__author__ = 'BMC Software'

src/ctm_python_client/core/workflow.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,21 +89,27 @@ def clear_all(self):
8989
self._connections = {}
9090

9191
def _apply_defaults_for_type(self, obj: typing.Any, type_: str):
92-
for field in attrs.fields(WorkflowDefaults):
93-
if type_ in field.metadata.get('applyon') \
94-
and self.defaults.__getattribute__(field.name):
95-
if obj.__getattribute__(field.name) is None:
96-
obj.__setattr__(
97-
field.name, self.defaults.__getattribute__(field.name))
92+
if not obj:
93+
return
94+
else:
95+
for field in attrs.fields(WorkflowDefaults):
96+
if type_ in field.metadata.get('applyon') \
97+
and self.defaults.__getattribute__(field.name):
98+
if obj.__getattribute__(field.name) is None:
99+
obj.__setattr__(
100+
field.name, self.defaults.__getattribute__(field.name))
98101

99102
def _apply_defaults_for_job(self, obj: Job):
100103
self._apply_defaults_for_type(obj, 'Job')
101104

102105
def _apply_defaults_for_folder(self, obj: Folder):
103106
self._apply_defaults_for_type(obj, 'Folder')
107+
list(map(self._apply_defaults_for_SubFolder, obj.sub_folder_list))
108+
list(map(self._apply_defaults_for_job, obj.job_list))
104109

105110
def _apply_defaults_for_SimpleFolder(self, obj: SimpleFolder):
106111
self._apply_defaults_for_type(obj, 'SimpleFolder')
112+
list(map(self._apply_defaults_for_job, obj.job_list))
107113

108114
def _apply_defaults_for_SubFolder(self, obj: SubFolder):
109115
self._apply_defaults_for_type(obj, 'SubFolder')

tests/test_aapi.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,62 @@ def test_events():
9090
assert any(isinstance(obj, aapi.AddEvents) and any(event.event == 'add2' for event in obj.events) for obj in job.add_events_list)
9191

9292
assert json.loads(job.dumps_aapi())
93+
94+
def test_job_in_folder_run_as():
95+
workflow = Workflow(Environment.create_workbench("refael"), WorkflowDefaults(run_as='workbench'), skip_initial_authentication=True)
96+
job_command = aapi.JobCommand('TestJob', command='echo Hello')
97+
98+
sla_job = aapi.JobSLAManagement('ForecastSLA',
99+
service_name='ForecastSLA',
100+
service_priority='1',
101+
job_runs_deviations_tolerance='1',
102+
complete_in=aapi.JobSLAManagement.CompleteIn(time='00:15'),
103+
complete_by=aapi.JobSLAManagement.CompleteBy(
104+
time='21:40', days='3'),
105+
average_run_time_tolerance=aapi.JobSLAManagement.AverageRunTimeTolerance(
106+
average_run_time='15',
107+
units=aapi.JobSLAManagement.AverageRunTimeTolerance.Units.Minutes
108+
))
109+
110+
subfolder = aapi.SubFolder('SubFolder')
111+
folder = aapi.Folder("TestFolder",
112+
sub_folder_list=[subfolder],
113+
job_list=[sla_job, job_command]
114+
)
115+
workflow.add(folder)
116+
# {"TestFolder": {"Type": "Folder", "ForecastSLA": {"Type": "Job:SLAManagement", "RunAs": "workbench", "ServiceName": "ForecastSLA", "ServicePriority": "1", "JobRunsDeviationsTolerance": "1", "AverageRunTimeTolerance": {"AverageRunTime": "15", "Units": "Minutes"}, "CompleteBy": {"Time": "21:40", "Days": "3"}, "CompleteIn": {"Time": "00:15"}}, "TestJob": {"Type": "Job:Command", "RunAs": "workbench", "Command": "echo Hello"}, "RunAs": "workbench", "SubFolder": {"Type": "SubFolder", "RunAs": "workbench"}}}
117+
o = json.loads('''
118+
{
119+
"Type": "Folder",
120+
"ForecastSLA": {
121+
"Type": "Job:SLAManagement",
122+
"RunAs": "workbench",
123+
"ServiceName": "ForecastSLA",
124+
"ServicePriority": "1",
125+
"JobRunsDeviationsTolerance": "1",
126+
"AverageRunTimeTolerance": {
127+
"AverageRunTime": "15",
128+
"Units": "Minutes"
129+
},
130+
"CompleteBy": {
131+
"Time": "21:40",
132+
"Days": "3"
133+
},
134+
"CompleteIn": {
135+
"Time": "00:15"
136+
}
137+
},
138+
"TestJob": {
139+
"Type": "Job:Command",
140+
"RunAs": "workbench",
141+
"Command": "echo Hello"
142+
},
143+
"RunAs": "workbench",
144+
"SubFolder": {
145+
"Type": "SubFolder",
146+
"RunAs": "workbench"
147+
}
148+
}
149+
''')
150+
assert workflow.get("TestFolder").as_aapi_dict() == o
151+

tests/test_sanity.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ def test_version_author():
22
import ctm_python_client
33

44
assert ctm_python_client.__author__ == 'BMC Software'
5-
assert ctm_python_client.__version__ == '2.3.0'
5+
assert ctm_python_client.__version__ == '2.3.1'
66

77

0 commit comments

Comments
 (0)