def remove_pending_joblog(conn, job_name, user_name, job_number): itransport = DatabaseTransport(conn) itool = iToolKit() itool.add( iPgm('qwtrmvjl', 'QWTRMVJL').addParm( iDS('RJLS0100_t', { 'len': 'rhrlen' }).addData(iData('length', '10i0', '44')).addData( iData('day_since', '10i0', '0')).addData( iData('job_name', '10A', job_name)).addData( iData('user_name', '10A', user_name)).addData( iData('job_number', '6A', job_number)).addData( iData('job_log_output', '10A', '*ALL'))). addParm(iData('fmtnam', '8A', 'RJLS0100')).addParm( iDS('ERRC0100_t', { 'len': 'errlen' }).addData(iData('errRet', '10i0', '')).addData( iData('errAvl', '10i0', '')).addData( iData('errExp', '7A', '', {'setlen': 'errlen'})).addData( iData('errRsv', '1A', '')))) itool.call(itransport) qwtrmvjl = itool.dict_out('qwtrmvjl') if 'success' in qwtrmvjl: return 0, qwtrmvjl['success'] else: return -1, qwtrmvjl['error']
def getNonconfigureDisk(imodule, time): conn = imodule.get_connection() itransport = DatabaseTransport(conn) itool = iToolKit() itool.add(iPgm('qyasrdi', 'QYASRDI') .addParm(iDS('DMIN0100_t', {'len': 'dmilen'}) .addData(iData('dniRet', '10i0', '')) .addData(iData('dmiAvl', '10i0', '')) .addData(iData('dmiOfset', '10i0', '')) .addData(iData('dmiNbr', '10i0', '', {'enddo': 'mycnt'})) .addData(iData('dmiLen', '10i0', '')) .addData(iData('dmiRes', '10i0', '')) .addData(iDS('res_t', {'dim': '999', 'dou': 'mycnt'}) .addData(iData('resDurn', '10a', '')) .addData(iData('resDuff', '1a', '')) .addData(iData('resTrnaswdu', '10a', '')) .addData(iData('resTnawdu', '4a', '')) .addData(iData('resDuaindpsf', '1a', '')) .addData(iData('resDuaiedpsf', '1a', '')) .addData(iData('resRes', '5a', '')) .addData(iData('resDpsn', '10i0', '')) .addData(iData('resCaadps', '10i0', '')) ) ) .addParm(iData('rcvlen', '10i0', '', {'setlen': 'dmilen'})) .addParm(iData('fmtnam', '10a', 'DMIN0100')) .addParm(iData('dmiDurna', '10a', '*UNCONFIG')) .addParm(iData('dmiNbr', '10i0', '1')) .addParm(iDS('ERRC0100_t', {'len': 'errlen'}) .addData(iData('errRet', '10i0', '')) .addData(iData('errAvl', '10i0', '')) .addData(iData('errExp', '7A', '', {'setlen': 'errlen'})) .addData(iData('errRsv', '1A', '')) ) ) itool.call(itransport) qyasrdi = itool.dict_out('qyasrdi') diskList = '' if 'success' in qyasrdi: DMIN0100_t = qyasrdi['DMIN0100_t'] if int(DMIN0100_t['dmiNbr']) > 0: res_t = DMIN0100_t['res_t'] if int(DMIN0100_t['dmiNbr']) == 1: diskList = res_t['resDurn'] else: for rec in res_t: diskList += rec['resDurn'] + ' ' if diskList.endswith(' '): diskList = diskList[:-1] job_log = imodule.itoolkit_get_job_log(time) return diskList, job_log
def qsygetph(self): special_value = False if self.pwd in ['*NOPWD', '*NOPWDCHK', '*NOPWDSTS']: self.pwd = ibmi_util.fmtTo10(self.pwd) special_value = True len_of_password = len(self.pwd) # Chang Le: the user name should be converted to upper case input_user = self.name.ljust(10).upper() input_password_len = str(len_of_password) + 'A' itransport = DatabaseTransport(self.conn) itool = iToolKit() if not special_value: itool.add( iPgm('qsygetph', 'qsygetph') .addParm(iData('userId', '10A', input_user)) .addParm(iData('pwd', input_password_len, self.pwd)) .addParm(iData('handle', '12A', '', {'hex': 'on'})) .addParm( iDS('ERRC0100_t', {'len': 'errlen'}) .addData(iData('errRet', '10i0', '')) .addData(iData('errAvl', '10i0', '')) .addData(iData('errExp', '7A', '', {'setlen': 'errlen'})) .addData(iData('errRsv', '1A', '')) ) .addParm(iData('len', '10i0', str(len_of_password))) .addParm(iData('ccsid', '10i0', '37')) ) else: itool.add( iPgm('qsygetph', 'qsygetph') .addParm(iData('userId', '10A', input_user)) .addParm(iData('pwd', '10A', self.pwd)) .addParm(iData('handle', '12A', '', {'hex': 'on'})) .addParm( iDS('ERRC0100_t', {'len': 'errlen'}) .addData(iData('errRet', '10i0', '')) .addData(iData('errAvl', '10i0', '')) .addData(iData('errExp', '7A', '', {'setlen': 'errlen'})) .addData(iData('errRsv', '1A', '')) ) ) itool.call(itransport) qsygetph = itool.dict_out('qsygetph') if 'success' in qsygetph: return qsygetph['handle'] else: return None
def test_pgm(transport): """Test calling ZZCALL https://bitbucket.org/inext/xmlservice-rpg/src/master/test.rpg/zzcall.rpgle """ transport.set_out("""<?xml version="1.0" ?> <xmlservice> <pgm error="fast" lib="XMLSERVICE" name="ZZCALL" var="zzcall"> <parm io="both" var="p1"> <data type="1a" var="INCHARA">C</data> </parm> <parm io="both" var="p2"> <data type="1a" var="INCHARB">D</data> </parm> <parm io="both" var="p3"> <data type="7p4" var="INDEC1">321.1234</data> </parm> <parm io="both" var="p4"> <data type="12p2" var="INDEC2">1234567890.12</data> </parm> <parm io="both" var="p5"> <ds var="INDS1"> <data type="1a" var="DSCHARA">E</data> <data type="1a" var="DSCHARB">F</data> <data type="7p4" var="DSDEC1">333.3330</data> <data type="12p2" var="DSDEC2">4444444444.44</data> </ds> </parm> <success>+++ success XMLSERVICE ZZCALL </success> </pgm> </xmlservice> """) tk = iToolKit() tk.add( iPgm('zzcall', 'ZZCALL', { 'lib': 'XMLSERVICE' }).addParm(iData('INCHARA', '1a', 'a')).addParm( iData('INCHARB', '1a', 'b')).addParm( iData('INDEC1', '7p4', '32.1234')).addParm( iData('INDEC2', '12p2', '33.33')).addParm( iDS('INDS1').addData(iData( 'DSCHARA', '1a', 'a')).addData(iData('DSCHARB', '1a', 'b')).addData( iData('DSDEC1', '7p4', '32.1234')).addData( iData('DSDEC2', '12p2', '33.33')))) tk.call(transport) zzcall = tk.dict_out('zzcall') assert ('success' in zzcall) assert (zzcall['INCHARA'] == 'C') assert (zzcall['INCHARB'] == 'D') assert (zzcall['INDEC1'] == '321.1234') assert (zzcall['INDEC2'] == '1234567890.12') assert (zzcall['INDS1']['DSCHARA'] == 'E') assert (zzcall['INDS1']['DSCHARB'] == 'F') assert (zzcall['INDS1']['DSDEC1'] == '333.3330') assert (zzcall['INDS1']['DSDEC2'] == '4444444444.44')
def qwtsetp(self): itransport = DatabaseTransport(self.conn) itool = iToolKit() itool.add( iPgm('qwtsetp', 'QWTSETP') .addParm(iData('handle', '12A', self.handle, {'hex': 'on'})) .addParm( iDS('ERRC0100_t', {'len': 'errlen'}) .addData(iData('errRet', '10i0', '')) .addData(iData('errAvl', '10i0', '')) .addData(iData('errExp', '7A', '', {'setlen': 'errlen'})) .addData(iData('errRsv', '1A', '')) ) ) itool.call(itransport) qwtsetp = itool.dict_out('qwtsetp') ibmi_util.log_info(str(qwtsetp), 'qwtsetp') if 'success' in qwtsetp: return True else: return False
def release_profile_handle(self): if not self.handle: return True itransport = DatabaseTransport(self.conn) itool = iToolKit() itool.add( iPgm('qsyrlsph', 'QSYRLSPH') .addParm(iData('handle', '12A', self.handle, {'hex': 'on'})) .addParm( iDS('ERRC0100_t', {'len': 'errlen'}) .addData(iData('errRet', '10i0', '')) .addData(iData('errAvl', '10i0', '')) .addData(iData('errExp', '7A', '', {'setlen': 'errlen'})) .addData(iData('errRsv', '1A', '')) ) ) itool.call(itransport) qsyrlsph = itool.dict_out('qsyrlsph') ibmi_util.log_info(str(qsyrlsph), 'qsyrlsph') if 'success' in qsyrlsph: return True else: return False
def get_ptf_info(imodule, ptf_id, product_id, release_level): conn = imodule.get_connection() itransport = DatabaseTransport(conn) itool = iToolKit() system_release_info, err = imodule.get_ibmi_release() ibmi_util.log_debug( "get_ibmi_release() return release_info: " + str(system_release_info), sys._getframe().f_code.co_name) ibmi_util.log_debug("get_ibmi_release() return err: " + str(err), sys._getframe().f_code.co_name) # Example output for system_release_info: {'version': 7, 'release': 2, 'version_release': 7.2} # Note, version_release is float but not string if system_release_info['version_release'] == 7.2: itool.add( iPgm('qpzrtvfx', 'QPZRTVFX').addParm( iDS('PTFR0300_t', { 'len': 'rhrlen' }).addData(iData('rhrRet', '10i0', '')).addData( iData('rhrAvl', '10i0', '')).addData( iData('rhrOftAddIn', '10i0', '')).addData( iData('rhrPid', '7A', '')).addData( iData('rhrPtfId', '7A', '')).addData( iData('rhrRlsLvl', '6A', '')).addData( iData('rhrPrdOpt', '4A', '')).addData( iData('rhrLodId', '4A', '')). addData(iData('rhrLdSts', '1A', '')).addData( iData('rhrCvrLtrSts', '1A', '')).addData(iData('rhrOnOrdSts', '1A', '')).addData( iData('rhrSavfSts', '1A', '')).addData( iData('rhrFilNam', '10A', '')).addData( iData('rhrFilLibNam', '10A', '')).addData( iData('rhrPtfTyp', '1A', '')).addData( iData( 'rhrIplAct', '1A', '')). addData(iData( 'rhrActPnd', '1A', '')).addData(iData( 'rhrActReq', '1A', '')).addData(iData('rhrPtfRls', '1A', '')).addData( iData('rhrTgtRls', '6A', '')).addData( iData('rhrSpsPtf', '7A', '')).addData( iData('rhrIplSid', '1A', '')).addData( iData('rhrMinLvl', '2A', '')).addData( iData('rhrMaxLvl', '2A', '')). addData(iData('rhrFmtInfAvl', '1A', '')).addData( iData('rhrStsDtaTim', '13A', '')).addData(iData('rhrLicGrp', '7A', '')).addData( iData('rhrSpsByPtf', '7A', '')).addData( iData('rhrSvrIplSrc', '1A', '')).addData( iData('rhrSvrIplRad', '1A', '')).addData( iData('rhrCrtDtaTim', '13A', '')).addData( iData( 'rhrTecRfsPtf', '1A', '')) # .addData(iData('rhrTmpApyDtaTim', '13A', '')) # V7R2M0 does not has this field .addData(iData('rhrOftPreReqRec', '10i0', '')).addData( iData('rhrNbrPreReq', '10i0', '', {'enddo': 'mycnt'})).addData( iData('rhrLenPreReq', '10i0', '')). addData( iDS('rhrReqs', { 'dim': '999', 'dou': 'mycnt' }).addData(iData( 'REQUISITE_PRODUCT_ID', '7A', '')).addData(iData( 'REQUISITE_PTF_ID', '7A', '')).addData( iData('RELEASE_OF_REQUISITE', '6A', '')).addData( iData('REQUISITE_MIN_LEVLE', '2A', '')). addData(iData('REQUISITE_MAX_LEVLE', '2A', '')).addData( iData('TYPE_OF_REQUISITE', '1A', '')).addData( iData( 'REQUISITE_IS_CONDITIONAL', '1A', '')).addData( iData('REQUISITE_IS_REQUIRED', '1A', '')).addData( iData( 'REQUISITE_OPTION', '4A', '')).addData( iData( 'REQUISITE_LOAD_ID', '4A', '')))). addParm(iData('rcvlen', '10i0', '', { 'setlen': 'rhrlen' })).addParm( iDS('Qpz_Rtv_PTF_Info_t').addData(iData( 'PTF_ID', '7A', ptf_id)).addData(iData( 'PID', '7A', product_id)).addData( iData('Rls_Lvl', '6A', release_level)).addData( iData('CCSID', '10i0', '')).addData( iData('Close_Files', '1A', '')).addData( iData('Reserved', '25A', '')) ).addParm(iData('fmtnam', '8A', 'PTFR0300')).addParm( iDS('ERRC0100_t', { 'len': 'errlen' }).addData(iData('errRet', '10i0', '')).addData( iData('errAvl', '10i0', '')).addData( iData('errExp', '7A', '', {'setlen': 'errlen'})).addData( iData('errRsv', '1A', '')))) else: itool.add( iPgm('qpzrtvfx', 'QPZRTVFX').addParm( iDS('PTFR0300_t', { 'len': 'rhrlen' }).addData(iData('rhrRet', '10i0', '')).addData( iData('rhrAvl', '10i0', '')).addData( iData('rhrOftAddIn', '10i0', '')).addData( iData('rhrPid', '7A', '')).addData( iData('rhrPtfId', '7A', '')).addData( iData('rhrRlsLvl', '6A', '')).addData( iData('rhrPrdOpt', '4A', '')).addData( iData('rhrLodId', '4A', '')). addData(iData('rhrLdSts', '1A', '')).addData( iData('rhrCvrLtrSts', '1A', '')).addData(iData('rhrOnOrdSts', '1A', '')).addData( iData('rhrSavfSts', '1A', '')).addData( iData('rhrFilNam', '10A', '')).addData( iData('rhrFilLibNam', '10A', '')).addData( iData('rhrPtfTyp', '1A', '')).addData( iData( 'rhrIplAct', '1A', '')). addData(iData( 'rhrActPnd', '1A', '')).addData(iData( 'rhrActReq', '1A', '')).addData(iData('rhrPtfRls', '1A', '')).addData( iData('rhrTgtRls', '6A', '')).addData( iData('rhrSpsPtf', '7A', '')).addData( iData('rhrIplSid', '1A', '')).addData( iData('rhrMinLvl', '2A', '')).addData( iData('rhrMaxLvl', '2A', '')). addData(iData('rhrFmtInfAvl', '1A', '')).addData( iData('rhrStsDtaTim', '13A', '')).addData(iData('rhrLicGrp', '7A', '')).addData( iData('rhrSpsByPtf', '7A', '')).addData( iData('rhrSvrIplSrc', '1A', '')).addData( iData('rhrSvrIplRad', '1A', '')).addData( iData('rhrCrtDtaTim', '13A', '')). addData(iData( 'rhrTecRfsPtf', '1A', '')).addData(iData( 'rhrTmpApyDtaTim', '13A', '')).addData( iData('rhrOftPreReqRec', '10i0', '')).addData( iData('rhrNbrPreReq', '10i0', '', {'enddo': 'mycnt'})).addData( iData('rhrLenPreReq', '10i0', '')). addData( iDS('rhrReqs', { 'dim': '999', 'dou': 'mycnt' }).addData(iData( 'REQUISITE_PRODUCT_ID', '7A', '')).addData(iData( 'REQUISITE_PTF_ID', '7A', '')).addData( iData('RELEASE_OF_REQUISITE', '6A', '')).addData( iData('REQUISITE_MIN_LEVLE', '2A', '')).addData( iData( 'REQUISITE_MAX_LEVLE', '2A', '')). addData(iData( 'TYPE_OF_REQUISITE', '1A', '')).addData( iData( 'REQUISITE_IS_CONDITIONAL', '1A', '')).addData( iData('REQUISITE_IS_REQUIRED', '1A', '')).addData( iData( 'REQUISITE_OPTION', '4A', '')).addData( iData( 'REQUISITE_LOAD_ID', '4A', '')))). addParm(iData('rcvlen', '10i0', '', { 'setlen': 'rhrlen' })).addParm( iDS('Qpz_Rtv_PTF_Info_t').addData(iData( 'PTF_ID', '7A', ptf_id)).addData(iData( 'PID', '7A', product_id)).addData( iData('Rls_Lvl', '6A', release_level)).addData( iData('CCSID', '10i0', '')).addData( iData('Close_Files', '1A', '')).addData( iData('Reserved', '25A', '')) ).addParm(iData('fmtnam', '8A', 'PTFR0300')).addParm( iDS('ERRC0100_t', { 'len': 'errlen' }).addData(iData('errRet', '10i0', '')).addData( iData('errAvl', '10i0', '')).addData( iData('errExp', '7A', '', {'setlen': 'errlen'})).addData( iData('errRsv', '1A', '')))) itool.call(itransport) qpzrtvfx = itool.dict_out('qpzrtvfx') ibmi_util.log_debug(str(qpzrtvfx), sys._getframe().f_code.co_name) res_list = [] if 'success' in qpzrtvfx: ptfr0300_t = qpzrtvfx['PTFR0300_t'] ibmi_util.log_debug(str(ptfr0300_t), sys._getframe().f_code.co_name) if int(ptfr0300_t['rhrNbrPreReq']) > 0: res = ptfr0300_t['rhrReqs'] if isinstance(res, dict): res_list.append(res) elif isinstance(res, list): res_list = res ibmi_util.log_debug(str(res_list), sys._getframe().f_code.co_name) return 0, res_list, qpzrtvfx['success'] else: return -1, res_list, qpzrtvfx['error']
def list_ethernet_ports_info(imodule): conn = imodule.get_connection() itransport = DatabaseTransport(conn) itool = iToolKit() itool.add( iSrvPgm('qgyrhr', 'QGYRHR', 'QgyRtvHdwRscList').addParm( iDS('RHRL0100_t', { 'len': 'rhrlen' }).addData(iData('rhrRet', '10i0', '')).addData( iData('rhrAvl', '10i0', '')).addData( iData('rhrNbr', '10i0', '', {'enddo': 'mycnt'})).addData( iData('rhrLen', '10i0', '')).addData( iDS('res_t', { 'dim': '999', 'dou': 'mycnt' }).addData(iData('resCat', '10i0', '')).addData( iData('resLvl', '10i0', '')).addData( iData('resLin', '10i0', '')).addData( iData('resNam', '10a', '')).addData( iData('resTyp', '4a', '')).addData( iData('resMod', '3a', '')). addData(iData('resSts', '1a', '')).addData( iData('resSys', '8a', '')).addData( iData('resAdp', '12a', '')).addData( iData('resDsc', '50h', '')).addData( iData('resKnd', '24b', '')))). addParm(iData( 'rcvlen', '10i0', '', {'setlen': 'rhrlen'})).addParm(iData( 'fmtnam', '10a', 'RHRL0100')).addParm(iData('rescat', '10i0', '2')).addParm( iDS('ERRC0100_t', { 'len': 'errlen' }).addData(iData( 'errRet', '10i0', '')).addData(iData( 'errAvl', '10i0', '')).addData( iData('errExp', '7A', '', {'setlen': 'errlen'})).addData( iData('errRsv', '1A', '')))) itool.call(itransport) qgyrhr = itool.dict_out('qgyrhr') ibmi_util.log_debug("qgyrhr output: " + str(qgyrhr), sys._getframe().f_code.co_name) res_list = [] if 'success' in qgyrhr: rhrl0100_t = qgyrhr['RHRL0100_t'] if int(rhrl0100_t['rhrNbr']) > 0: res_t = rhrl0100_t['res_t'] res_info = dict() for rec in res_t: if rec['resKnd'] == kKindVirtEthernet or rec[ 'resKnd'] == kKindPhysEthernet: ibmi_util.log_debug("resource name is " + rec['resNam'], sys._getframe().f_code.co_name) rc, res_info, result = get_info_from_resource_name( imodule, rec['resNam']) ibmi_util.log_debug("resource info is " + str(res_info), sys._getframe().f_code.co_name) ibmi_util.log_debug( "get resource info result is " + result, sys._getframe().f_code.co_name) if rc == SUCCESS: res_list.append(res_info) return SUCCESS, res_list, qgyrhr['success'] else: return ERROR, res_list, qgyrhr['error']
def get_info_from_resource_name(imodule, resource_name): conn = imodule.get_connection() itransport = DatabaseTransport(conn) itool = iToolKit() itool.add( iSrvPgm('qgyrhr', 'QGYRHR', 'QgyRtvHdwRscInfo').addParm( iDS('RHRI0100_t', { 'len': 'rhrlen' }).addData(iData('rhrRet', '10i0', '')).addData( iData('rhrAvl', '10i0', '')).addData(iData('sysBusNum', '10i0', '')).addData( iData('sysBdNum', '10i0', '')).addData( iData('sysCdNum', '10i0', '')).addData( iData('IOBusAdd', '10i0', '')).addData( iData('AdaptAdd', '10i0', '')).addData( iData('PortNum', '10i0', '')). addData(iData('srNum', '10a', '')).addData( iData('partNum', '12a', '')).addData(iData('frmID', '4a', '')).addData( iData('cdPst', '5a', '')).addData( iData('locCd', '79a', '')).addData( iData('expSrNum', '15a', '')).addData( iData('LANSpeed', '8a', '', {'hex': 'on'})).addData( iData('LinkAgg', '1a', '', {'hex': 'on'})).addData( iData( 'MAC', '6a', '', {'hex': 'on'}))). addParm(iData('rcvlen', '10i0', '', {'setlen': 'rhrlen'})).addParm( iData('fmtnam', '8a', 'RHRI0100')).addParm( iData('resnam', '10a', resource_name)).addParm( iDS('ERRC0100_t', { 'len': 'errlen' }).addData(iData('errRet', '10i0', '')).addData( iData('errAvl', '10i0', '')).addData( iData('errExp', '7A', '', {'setlen': 'errlen'})).addData( iData('errRsv', '1A', '')))) resoure_info = dict() itool.call(itransport) qgyrhr = itool.dict_out('qgyrhr') ibmi_util.log_debug("qgyrhr output: " + str(qgyrhr), sys._getframe().f_code.co_name) if 'success' in qgyrhr: rhri0100_t = qgyrhr['RHRI0100_t'] if int(rhri0100_t['rhrAvl']) > 0: resoure_info = { "RESOURCE_NAME": resource_name, "SYSTEM_BUS_NUMBER": rhri0100_t['sysBusNum'], "SYSTEM_BOARD_NUMBER": rhri0100_t['sysCdNum'], "SYSTEM_CARD_NUMBER": rhri0100_t['sysCdNum'], "IO_BUS_ADDRESS": rhri0100_t['IOBusAdd'], "ADAPTER_ADDRESS": rhri0100_t['AdaptAdd'], "PORT_NUMBER": rhri0100_t['PortNum'], "SERIAL_NUMBER": rhri0100_t['srNum'], "PART_NUMBER": rhri0100_t['partNum'], "FRAME_ID": rhri0100_t['frmID'], "CARD_POSITION": rhri0100_t['cdPst'], "LOCATION_CODE": rhri0100_t['locCd'], "EXPANDED_SERIAL_NUMBER": rhri0100_t['expSrNum'], "LAN_SPEED": rhri0100_t['LANSpeed'], "SUPPORTS_LINK_AGGREGATION": rhri0100_t['LinkAgg'], "DEFAULT_MAC_ADDRESS": rhri0100_t['MAC'], } return SUCCESS, resoure_info, qgyrhr['success'] else: return ERROR, resoure_info, qgyrhr['error']
def get_system_value(imodule, sysvaluename, expect=None, check='equal'): sysvalue = dict() sysvalue['name'] = sysvaluename.strip().upper() for value in sysval_array: for key in value['key']: if (sysvalue['name'] == key): sysvalue['type'] = value['type'] if expect is not None: sysvalue['expect'] = expect if not check: check = 'equal' sysvalue['check'] = check break if sysvalue.get('type') is None: return -1, sysvalue, 'Unknown System Value Name' conn = imodule.get_connection() itransport = DatabaseTransport(conn) itool = iToolKit() itool.add( iPgm('qwcrsval', 'QWCRSVAL', { 'lib': 'QSYS' }).addParm( iDS('QWCRSVAL_t', { 'len': 'qwcrslen', 'io': 'out' }) # Number of system values returned .addData(iData('count', '10i0', '')) # Offset to system value information table .addData(iData('offset', '10i0', '')).addData(iData('sysvalue', '10A', '')) # System value # Type of data(C--character / B--binary / blank--not available.) .addData(iData('dataType', '1A', '')) # Information status(blank--The information was available.) .addData(iData('infoStatus', '1A', '')).addData(iData('length', '10i0', '')) # Length of data # Returned system value data .addData(iData('data', sysvalue['type'], ''))).addParm( iData('rcvlen', '10i0', '', {'setlen': 'qwcrslen'})).addParm( iData('count', '10i0', '1')).addParm( iData('valueName', '10A', sysvalue['name'])).addParm( iDS('ERRC0100_t', { 'len': 'errlen' }).addData( iData('bytesProvided', '10i0', '', {'setlen': 'errlen'})).addData( iData('bytesAvailable', '10i0', '')).addData( iData( 'messageID', '7A', '')).addData( iData( 'reserved', '1A', '')))) itool.call(itransport) qwcrsval = itool.dict_out('qwcrsval') ibmi_util.log_debug(str(qwcrsval), sys._getframe().f_code.co_name) if 'success' in qwcrsval: qwcrsval_t = qwcrsval['QWCRSVAL_t'] ibmi_util.log_debug(str(qwcrsval_t), sys._getframe().f_code.co_name) if int(qwcrsval_t['count']) > 0: sysvalue['value'] = qwcrsval_t['data'] if 'expect' in sysvalue: sysvalue['compliant'] = chk_system_value( sysvalue['value'], sysvalue['expect'], check) ibmi_util.log_debug(str(sysvalue), sys._getframe().f_code.co_name) return 0, sysvalue, qwcrsval['success'] return -1, sysvalue, qwcrsval['error']
def test_srvpgm(transport): """Test calling ZZARRAY in ZZSSRV https://bitbucket.org/inext/xmlservice-rpg/src/master/test.rpg/zzsrv.rpgle """ max_return = 4 name = 'Ranger' transport.set_out("""<?xml version="1.0" ?> <xmlservice> <pgm error="fast" func="ZZARRAY" name="ZZSRV" lib="XMLSERVICE" var="zzarray"> <parm io="both" var="p1"> <data type="10a" var="myName">{0}</data> </parm> <parm io="both" var="p2"> <data type="10i0" var="myMax">{1}</data> </parm> <parm io="both" var="p3"> <data enddo="mycnt" type="10i0" var="myCount">{1}</data> </parm> <return var="r4"> <ds dim="999" dou="mycnt" var="dcRec_t"> <data type="10a" var="dcMyName">{0}1</data> <data type="4096a" var="dcMyJob">Test 101</data> <data type="10i0" var="dcMyRank">11</data> <data type="12p2" var="dcMyPay">13.42</data> </ds> <ds dim="999" dou="mycnt" var="dcRec_t"> <data type="10a" var="dcMyName">{0}2</data> <data type="4096a" var="dcMyJob">Test 102</data> <data type="10i0" var="dcMyRank">12</data> <data type="12p2" var="dcMyPay">26.84</data> </ds> <ds dim="999" dou="mycnt" var="dcRec_t"> <data type="10a" var="dcMyName">{0}3</data> <data type="4096a" var="dcMyJob">Test 103</data> <data type="10i0" var="dcMyRank">13</data> <data type="12p2" var="dcMyPay">40.26</data> </ds> <ds dim="999" dou="mycnt" var="dcRec_t"> <data type="10a" var="dcMyName">{0}4</data> <data type="4096a" var="dcMyJob">Test 104</data> <data type="10i0" var="dcMyRank">14</data> <data type="12p2" var="dcMyPay">53.68</data> </ds> </return> <success>+++ success XMLSERVICE ZZSRV ZZARRAY</success> </pgm> </xmlservice>""".format(name, max_return)) tk = iToolKit() tk.add( iSrvPgm('zzarray', 'ZZSRV', 'ZZARRAY', { 'lib': 'XMLSERVICE' }).addParm(iData('myName', '10a', name)).addParm( iData('myMax', '10i0', max_return)).addParm( iData('myCount', '10i0', '', {'enddo': 'mycnt'})).addRet( iDS('dcRec_t', { 'dim': '999', 'dou': 'mycnt' }).addData(iData('dcMyName', '10a', '')).addData( iData('dcMyJob', '4096a', '')).addData( iData('dcMyRank', '10i0', '')).addData(iData('dcMyPay', '12p2', '')))) tk.call(transport) zzarray = tk.dict_out('zzarray') assert ('success' in zzarray) assert (zzarray['myName'] == name) assert (zzarray['myMax'] == str(max_return)) assert (zzarray['myCount'] == str(max_return)) for i, rec in enumerate(zzarray['dcRec_t'], start=1): assert (i <= max_return) assert (rec['dcMyName'] == name + str(i)) assert (rec['dcMyJob'] == "Test 10" + str(i)) assert (int(rec['dcMyRank']) == 10 + i) assert (float(rec['dcMyPay']) == 13.42 * i)