Python - ValueError: элемент последовательности обновления словаря # 0 имеет длину 15;2 требуется - PullRequest
0 голосов
/ 17 октября 2018

Я использую Zeep, чтобы попытаться взаимодействовать с SOAP-клиентом на SellerCloud.Когда я передаю свой аргумент для одной из операций API, я получаю ошибку ValueError -

ValueError: dictionary update sequence element #0 has length 15; 2 is required

Вот соответствующий код:

from zeep import Client
import datetime

wsdl_url = "http://tt.ws.sellercloud.com/scservice.asmx?WSDL"
client = Client(wsdl_url)
auth_type = client.get_type("ns0:AuthHeader")
sc_auth = auth_type(UserName=<username>, Password=<password>)

from_date = datetime.date(2018, 7, 3).strftime("%Y-%m-%d %H:%M:%S")
to_date = datetime.date(2018, 7, 11).strftime("%Y-%m-%d %H:%M:%S")

sc_keys = ["DateFrom", "DateTo", "UseSP", "ShippingStatusKind", "IncludeDS"]
sc_values = [from_date, to_date, "GET", "1", "TRUE"]

filters_type = client.get_type("ns0:SerializableDictionaryOfStringString")
filters = filters_type(sc_keys, sc_values)

print filters
print 'length of filters - ', len(filters)

with client.settings(extra_http_headers=sc_auth, force_https=False):
  order_ids = client.service.Orders_Get(filters)

И ошибка трассировки стека -

Traceback (most recent call last):
  File "seller-cloud.py", line 24, in <module>
    order_ids = client.service.Orders_Get(filters)
  File "/home/user/Envs/seller-cloud/local/lib/python2.7/site-packages/zeep/proxy.py", line 42, in __call__
    self._op_name, args, kwargs)
  File "/home/user/Envs/seller-cloud/local/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 121, in send
    options=options)
  File "/home/user/Envs/seller-cloud/local/lib/python2.7/site-packages/zeep/wsdl/bindings/soap.py", line 99, in _create
    http_headers.update(client.settings.extra_http_headers)
ValueError: dictionary update sequence element #0 has length 15; 2 is required

И вывод моих операторов печати до того, где происходит ошибка -

{
    'Keys': [
        'DateFrom',
        'DateTo',
        'UseSP',
        'ShippingStatusKind',
        'IncludeDS'
    ],
    'Values': [
        '2018-07-03 00:00:00',
        '2018-07-11 00:00:00',
        'GET',
        '1',
        'TRUE'
    ]
}
length of filters -  2

Я бился головой об этомпока, но не могу найти, где происходит вся эта длительная сделка.Даже если я передаю пустой массив, такой как: filters = filters_type([]), я все равно получаю ошибку длины 15.

1 Ответ

0 голосов
/ 17 октября 2018

Основываясь на трассировке, при обновлении HTTP-заголовков происходит сбой:

http_headers.update(client.settings.extra_http_headers)

Я бы выяснил, установил ли extra_http_headers=sc_auth правильные заголовки.Похоже, вам нужно передать туда простые HTTP-заголовки (dict) и вы даете ему некоторую структуру SOAP.

...