# -*- coding: utf-8

from supwisdom.protocol import nettrans, webservice

URL = "http://192.168.1.200:8080/yktapi/services"
appid = "100010"
appsecret = "5ddca8fb0e2b46858cf6b257c00acd69"
termid = 54321


def test():
    session = webservice.SWWebserviceSession(URL, appid, appsecret, termid)
    if not session.auth():
        return

    writer = nettrans.message_writer()
    writer.attr("funcno", 820405)
    writer.row("paraid", 12)
    writer.add_row()

    handler = webservice.SWRequest(session)
    reader = nettrans.message_reader()
    if not handler.request(writer, reader, 10):
        print handler.err_msg
        return
    if reader.attr("retcode") != 0:
        print reader.attr("retmsg")
        return

    if reader.has_more_row():
        reader.next_row()
        print "Value is : ", reader.col("paraval")


test()
