Skip to content

Commit 8f0837d

Browse files
authored
Merge pull request #67 from controlm/behavior-of-events
Events behavior - #29
2 parents c18222c + be0387c commit 8f0837d

File tree

8 files changed

+62
-13
lines changed

8 files changed

+62
-13
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.2.0",
11+
version="2.2.1",
1212
description="Python Workflows for Control-M",
1313
long_description=long_description,
1414
long_description_content_type='text/markdown',

src/aapi/addevents.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ class AddEvents(AAPIObject):
2020

2121
def __attrs_post_init__(self):
2222
if self.object_name == attrs.fields_dict(self.__class__)['object_name'].default:
23-
self.object_name = f'{self.object_name}_{random.choices(string.ascii_letters + string.digits, k=8)}'
23+
random_attr = ''.join(random.choices(string.ascii_letters + string.digits, k=8))
24+
self.object_name = f'{self.object_name}_{random_attr}'

src/aapi/deleteevents.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ class DeleteEvents(AAPIObject):
2020

2121
def __attrs_post_init__(self):
2222
if self.object_name == attrs.fields_dict(self.__class__)['object_name'].default:
23-
self.object_name = f'{self.object_name}_{random.choices(string.ascii_letters + string.digits, k=8)}'
23+
random_attr = ''.join(random.choices(string.ascii_letters + string.digits, k=8))
24+
self.object_name = f'{self.object_name}_{random_attr}'

src/aapi/waitforevents.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ class WaitForEvents(AAPIObject):
2020

2121
def __attrs_post_init__(self):
2222
if self.object_name == attrs.fields_dict(self.__class__)['object_name'].default:
23-
self.object_name = f'{self.object_name}_{random.choices(string.ascii_letters + string.digits, k=8)}'
23+
random_attr = ''.join(random.choices(string.ascii_letters + string.digits, k=8))
24+
self.object_name = f'{self.object_name}_{random_attr}'

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.2.0'
1+
__version__ = '2.2.1'
22
__author__ = 'BMC Software'

src/ctm_python_client/core/workflow.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -208,19 +208,19 @@ def connect(self, srcpath: str, destpath: str, *, inpath: str = None):
208208
# support backward compatibility
209209
if not obj_src.add_events_list:
210210
obj_src.add_events_list.append(
211-
AddEvents('events_to_add', events=[]))
211+
AddEvents(events=[]))
212212
obj_src.add_events_list[-1].events.append(
213213
ConditionOutAdd(event=event_name))
214214

215215
if not obj_dest.wait_for_events_list:
216216
obj_dest.wait_for_events_list.append(
217-
WaitForEvents('events_to_wait', events=[]))
217+
WaitForEvents(events=[]))
218218
obj_dest.wait_for_events_list[-1].events.append(
219219
ConditionIn(event=event_name))
220220

221221
if not obj_dest.delete_events_list:
222222
obj_dest.delete_events_list.append(
223-
DeleteEvents('events_to_delete', events=[]))
223+
DeleteEvents(events=[]))
224224
obj_dest.delete_events_list[-1].events.append(
225225
ConditionOutDelete(event=event_name))
226226

tests/test_aapi.py

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,58 @@ def test_json_generation():
3535

3636
def test_copy_workflow():
3737
workflow = Workflow(Environment.create_workbench("refael"), WorkflowDefaults(run_as='workbench'), skip_initial_authentication=True)
38-
workflow.add(aapi.JobCommand('MyFirstJob', command='ls -lt', run_as='workbench'), inpath='MyFirstFolder')
38+
workflow.add(aapi.JobCommand('TestJob', command='ls -lt', run_as='workbench'), inpath='TestFolder')
3939

4040
newworkflow = BaseWorkflow()
4141
newworkflow.copy_from(workflow=workflow)
4242

43-
assert newworkflow.get("MyFirstFolder").dumps_aapi(indent=2) == workflow.get("MyFirstFolder").dumps_aapi(indent=2)
43+
assert newworkflow.get("TestFolder").dumps_aapi(indent=2) == workflow.get("TestFolder").dumps_aapi(indent=2)
4444

45-
o = json.loads('{\n "Type": "Folder",\n "MyFirstJob": {\n "Type": "Job:Command",\n "RunAs": "workbench",\n "Command": "ls -lt"\n },\n "RunAs": "workbench"\n}')
46-
assert newworkflow.get("MyFirstFolder").as_aapi_dict() == o
45+
o = json.loads('{\n "Type": "Folder",\n "TestJob": {\n "Type": "Job:Command",\n "RunAs": "workbench",\n "Command": "ls -lt"\n },\n "RunAs": "workbench"\n}')
46+
assert newworkflow.get("TestFolder").as_aapi_dict() == o
47+
48+
def test_connecting_jobs():
49+
workflow = Workflow(Environment.create_workbench("refael"), WorkflowDefaults(run_as='workbench'), skip_initial_authentication=True)
50+
firstjob = workflow.add(
51+
aapi.JobCommand('JobToConnect1', command="first"),
52+
inpath='TestFolder'
53+
)
54+
55+
secondjob = workflow.add(
56+
aapi.JobCommand('JobToConnect2', command="second"),
57+
inpath='TestFolder'
58+
)
59+
workflow.connect(firstjob, secondjob)
60+
61+
def test_chaining_jobs():
62+
workflow = Workflow(Environment.create_workbench("refael"), WorkflowDefaults(run_as='workbench'), skip_initial_authentication=True)
63+
workflow.chain(
64+
[
65+
aapi.JobCommand('FirstTestJob', "First"),
66+
aapi.JobCommand('SecondTestJob', "Second"),
67+
aapi.JobCommand('ThirdTestJob', "Third", run_as_dummy=True),
68+
],
69+
inpath='ChainedJobs'
70+
)
71+
72+
def test_events():
73+
job = aapi.JobCommand('Job1', command='echo Hello')
74+
75+
waitForEventList = aapi.WaitForEvents([aapi.Event(event="wait1"), aapi.Event(event="wait2", date=aapi.Event.Date.AnyDate)])
76+
job.event_list.append(waitForEventList)
77+
78+
deleteEventListObject = aapi.DeleteEvents([aapi.EventOutDelete(event="delete")])
79+
job.event_list.append(deleteEventListObject)
80+
81+
addEventListObject1 = aapi.AddEvents([aapi.EventOutAdd(event="add1")])
82+
job.event_list.append(addEventListObject1)
83+
84+
addEventListObject2 = aapi.AddEvents([aapi.EventOutAdd(event="add2",date=aapi.Event.Date.NoDate)])
85+
job.add_events_list.append(addEventListObject2)
86+
87+
assert any(isinstance(obj, aapi.WaitForEvents) and any(event.event == 'wait2' for event in obj.events) for obj in job.event_list)
88+
assert any(isinstance(obj, aapi.DeleteEvents) and any(event.event == 'delete' for event in obj.events) for obj in job.event_list)
89+
assert any(isinstance(obj, aapi.AddEvents) and any(event.event == 'add1' for event in obj.events) for obj in job.event_list)
90+
assert any(isinstance(obj, aapi.AddEvents) and any(event.event == 'add2' for event in obj.events) for obj in job.add_events_list)
91+
92+
assert json.loads(job.dumps_aapi())

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.2.0'
5+
assert ctm_python_client.__version__ == '2.2.1'
66

77

0 commit comments

Comments
 (0)