Python webservice

来源:互联网 发布:海康威视网络设置 编辑:程序博客网 时间:2024/05/18 09:20

Python WebServices

Python作为客户端访问WebService,推荐使用suds来完成

suds官方Document:
https://fedorahosted.org/suds/wiki/Documentation

一、访问WebService

以ALM系统为例:
ALM-getItemsByNamedQuery.py

from suds.client import Clientssl.wrap_socket = sslwrap(ssl.wrap_socket)url = 'https://alm.tclcom.com:7003/webservices/10/2/Integrity/?wsdl'client = Client(url)print clientitemType = client.factory.create('ns5:NamedQuery')item_list = ['Project', 'ID', "Summary", 'IPR Value', "Severity", "Priority", "Assigned User", "Created By",             'Attachments', ]itemType.Username = "******"itemType.Password = "******"itemType.InputField = item_listitemType.QueryName = "shinelite12"print itemTyperesp = client.service.getItemsByNamedQuery(itemType)print resp

运行时,提示错误:
urllib2.URLError:

resp:查询结果集

二、解析resp

ItemList = {    <ItemList>    element: name="Item"    <StatusResponse>    element: name="return"    attribute: name="transactionId"    }

for Item in resp.Item: #只提取Item信息,忽略< StatusResponse >

Item = {    <Item>    element:name="ItemField", name="Attachment", ref="tns:RelatedItem",    attribute: name="State", name="Type", name="ItemId",    <StatusResponse>    element: name="return"    attribute: name="transactionId"    }

for ItemField in Item.ItemField: #只提取ItemField,忽略Attachment,RelatedItem,< StatusResponse >

<xs:element maxOccurs="unbounded" minOccurs="0" name="ItemField" type="tns:ItemFieldResponse"/>ItemFieldResponse = {<ItemFieldBase>xs:choice element:    shorttext tns:NullableShortString    longtext  tns:NullableString    group     tns:NullableString    state     xs:string    type      xs:string    project   tns:NullableString    siProject tns:NullableString    double    tns:NullableDouble    boolean   tns:NullableBoolean    integer   tns:NullableInteger    pick      {value xs:string }    relatioinship {value xs:string}    date      tns:NullableString    dateTime  tns:NullableString    UserRecord { user/fullname/email tns:NullableString}attribute: name="Name"

ItemField[0]: _Name 即InputField字段
ItemField[1]: xs:choice element
从上面分析可知,element 类型种类有xs:string, tns:NullableString, NullableShortString, UserRecord

对type(ItemField[1])类型分析,推测只有三种类型,已经验证过的有

project         < type 'instance' > integer         < type 'instance' > shorttext       < type 'instance' > UserRecord      < type 'list' > state           < class 'suds.sax.text.Text'>dateTime        < type 'instance' >longtext        < type 'instance' > 

备注:有时候ALM系统更改了字段名,导致resp获取出错

三、源代码

        itemsByIDsType = client.factory.create('ns5:GetItemsByIDsType')        print itemsByIDsType        itemsByIDsType.Username = "******"        itemsByIDsType.Password = "******"        itemsByIDsType.ItemId = item_list        # itemsByIDsType.InputField = "R&D or Region Current State Spend Time"        # resp = client.service.getItemsByIDs(itemsByIDsType)        for item_Text in item_list_Text:            itemsByIDsType.InputField = item_Text            resp = client.service.getItemsByIDs(itemsByIDsType)            print resp            item_dict = {}            for item_list_Text_content in item_list_Text:                item_dict[item_list_Text_content] = ""            for item_list_Int_content in item_list_Int:                item_dict[item_list_Int_content] = 0            for item_list_Email_content in item_list_Email:                item_dict[item_list_Email_content] = ""            for item_list_DateTime_content in item_list_DateTime:                item_dict[item_list_DateTime_content] = None            for item_field in item.ItemField:                # print item_field                # Item_field[0] is _Name; Item_field[1] is content                if isinstance(item_field[1], suds.sax.text.Text):                    item_value = str(item_field[1])                elif isinstance(item_field[1], list):                    if isinstance(item_field[1][0].email, suds.sax.text.Text):                        item_value = str(item_field[1][0].email)                    else:                        item_value = item_field[1][0].email.value                else:                    item_value = item_field[1].value                # item_dict[item_field[0]] = item_value                if isinstance(item_value, suds.sax.text.Text):                    item_value = item_value.encode("utf-8")                item_dict[item_field[0]] = item_value            # print item_dict            quality = Quality()            quality.Project = item_dict["Project"]            quality.Severity = item_dict["Severity"]            quality.Priority = item_dict["Priority"]            quality.State = item_dict["State"]            quality.Function = item_dict["Function"]            quality.Component = item_dict["Component"]            quality.Country_Area = item_dict["Country/Area"]            quality.Regression = item_dict["Regression"]            quality.Homo = item_dict["Homo"]            quality.RegionCurrentStateSpendTime = item_dict["R&D or Region Current State Spend Time"]            quality.VAL_Refuse = item_dict["VAL Refuse"]            quality.Reporter_Department = item_dict["Reporter Department"]            quality.SW_Release = item_dict["SW Release"]            quality.Operators = item_dict["Operators"]            quality.Perso_ID = item_dict["Perso ID"]            quality.Resolved_By = item_dict["Resolved By"]            quality.Summary = item_dict["Summary"]            quality.All_CEA_Comments = item_dict["All CEA Comments"]            quality.ID = item_dict["ID"]            quality.IPR_Value = item_dict["IPR Value"]            quality.Assigned_User = item_dict["Assigned User"]            quality.Created_By = item_dict["Created By"]            quality.Reported_By = item_dict["Reported By"]            quality.Created_Date = item_dict["Created Date"]            quality.Modified_Date = item_dict["Modified Date"]            quality.VAL_Refuse_Date = item_dict["Val Refused Date"]            quality.Time_To_Set_New = item_dict["Time To Set New"]            quality.Time_To_Set_Assigned = item_dict["Time To Set Assigned"]            quality.Time_To_Set_Open = item_dict["Time To Set Open"]            quality.Time_To_Set_Resolved = item_dict["Time To Set Resolved"]            quality.Time_To_Set_Verified_SW = item_dict["Time To Set Verified_SW"]            quality.Time_To_Set_Delivered = item_dict["Time To Set Delivered"]            quality.Time_To_Set_Verified = item_dict["Time To Set Verified"]            quality.Time_To_Set_Closed = item_dict["Last Time To Set Closed"]            quality.Release = item_dict["Release"]            quality.Verified_By = item_dict["Verified By"]            quality.Original_Brother = item_dict["Original Brother"]            quality.Team = item_dict["Team"]            quality.save()
0 0
原创粉丝点击