Как обратиться к переменной внутри кавычек - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь вызвать API через XMLRPC для запроса информации о продукте.

У меня есть переменная сеанса, которая содержит ключ сеанса после входа в систему.

У меня естьчтобы передать мой вызов процедуре, которую я хочу, в качестве параметра другому вызову, по крайней мере это единственный способ, с помощью которого я нашел его.

Например:

import xmlrpc.client
svc = xmlrpc.client.ServerProxy('https://example.com/api/xmlrpc/')
session = svc.login('apiuser', 'apikey')
temp = svc.call(session, 'catalog_category.tree')
print (temp)

Этоработает отлично.

Что я пытаюсь сделать сейчас:

import xmlrpc.client
svc = xmlrpc.client.ServerProxy('https://example.com/api/xmlrpc/')
session = svc.login('apiuser', 'apikey')
temp = svc.call(session, "catalog_product.info(session, 'CM-RC658')")

Очевидно, что это неправильно.Моя проблема в том, что я не уверен, как передать переменную сеанса в процедуру catalog_product.info, которая является строковым параметром метода svc.call.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Просто оберните переменную сеанса, используя любой разбор строк, например .format:

temp = svc.call(session, "catalog_product.info({}, 'CM-RC658')".format(session))
0 голосов
/ 04 декабря 2018

Попробуйте f-строку.

temp = svc.call(session, f"catalog_product.info({session!r}, 'CM-RC658')")

Прокси-объект не имеет установленного API, но зависит от службы, которую вы используете.Некоторые из них будут поддерживать самоанализ, чтобы рассказать вам, как их использовать.Попробуйте

print(svc.system.listMethods())

, чтобы увидеть список доступных методов для этого API.

Как только вы узнаете имя нужного вам метода, попробуйте

print(svc.system.methodSignature(foo))

Гдеfoo - имя метода (попробуйте в виде строки).Это должно сказать вам действительную подпись аргумента для этого метода.Вы также можете попробовать.

print(svc.system.methodHelp(foo))

Что может дать более подробную информацию о том, как работает метод.Имена этих системных методов являются стандартными, но не у всех API есть.


Если вышеупомянутые методы самоанализа не работают, вам придется внимательно прочитать документацию и поэкспериментировать.Я не знаю вашего API, но я могу попытаться угадать пару других форм, которые могут работать.Попробуйте

temp = svc.call(session, "catalog_product.info", session, 'CM-RC658')

и

temp = svc.catalog_product.info(session, 'CM-RC658')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...