Python webservice

Python WebServices

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

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

一、访问WebService

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

from suds.client import Client

ssl.wrap_socket = sslwrap(ssl.wrap_socket)
url = 'https://alm.tclcom.com:7003/webservices/10/2/Integrity/?wsdl'
client = Client(url)
print client

itemType = 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_list
itemType.QueryName = "shinelite12"

print itemType
resp = 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值