Skip to content

Commit

Permalink
Add Command
Browse files Browse the repository at this point in the history
  • Loading branch information
jbh committed May 12, 2018
1 parent c80181a commit e43793c
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 6 deletions.
20 changes: 20 additions & 0 deletions pykit/Command.py
@@ -0,0 +1,20 @@
class Command:
"""
Object for calling an IBM i CL command.
"""
def __init__(self, command, screen_output=False):
self.command = command
self.screen_output = screen_output
self.payload = {
"cmd": {}
}

def get_payload(self):
if self.screen_output:
self.payload["cmd"]["qsh"] = self.command
elif any(x in self.command for x in ["&", "?"]):
self.payload["cmd"]["rexx"] = self.command
else:
self.payload["cmd"]["exec"] = self.command

return self.payload
25 changes: 19 additions & 6 deletions pykit/Toolkit.py
Expand Up @@ -13,17 +13,30 @@ def add(self, o):
:param o: Object to be added
:return: void
"""
if isinstance(o, dict):
self.payload.append(o)
else:
raise TypeError('Only dictionaries are supported right now.')
self.payload.append(o)

def execute(self):
"""
Execute the transport's payload.
:return: void
:return: object
"""
result = self.connection.execute(self.payload)
payload = []
for p in self.payload:
try:
payload.append(p.get_payload())
except AttributeError:
"""
p does not have get_payload
assume that the payload is raw json to be sent straight to the transport
"""
payload = self.payload

try:
result = self.connection.execute(payload)
except TypeError:
print("The payload was not structured properly.")
return {}

self.payload = []
return result
1 change: 1 addition & 0 deletions pykit/__init__.py
@@ -1 +1,2 @@
__version__ = "0.1.0"
from .Command import Command
38 changes: 38 additions & 0 deletions pykit/tests/test_command.py
@@ -0,0 +1,38 @@
import unittest
import os
from pykit.transport.http import connect
from pykit import Command


class TestCommand(unittest.TestCase):
def setUp(self):
self.connection = connect(
os.environ['PK_DB2SOCK_URL'],
db2sock_auth=(
os.environ['PK_DB2SOCK_USER'], os.environ['PK_DB2SOCK_PASS']))

def test_execute_qsh_command(self):
cmd = Command("ls -1 /QOpenSys", True)
toolkit = self.connection.toolkit()
toolkit.add(cmd)
response = toolkit.execute()
self.assertTrue(response)

def test_execute_rexx_command(self):
cmd = Command("RTVJOBA CCSID(?N) USRLIBL(?) SYSLIBL(?)")
toolkit = self.connection.toolkit()
toolkit.add(cmd)
response = toolkit.execute()
self.assertTrue(response)

def test_execute_exec_command(self):
cmd = Command("CHGLIBL LIBL(DB2JSON QTEMP) CURLIB(DB2JSON)")
toolkit = self.connection.toolkit()
toolkit.add(cmd)
response = toolkit.execute()
self.assertTrue(response)


self.assertTrue(response)
if __name__ == '__main__':
unittest.main()

0 comments on commit e43793c

Please sign in to comment.