XQuery для API Python String - PullRequest
       8

XQuery для API Python String

0 голосов
/ 05 ноября 2018

Я использую Postman для преобразования Xqueries в строки Python для API. Теперь мне нужно иметь возможность преобразовывать обычную строку Xquery в строку API в Python без использования Postman.

Например, вот Xquery в виде строки

query_string = "xquery version '1.0-ml'; declare namespace html = 'http://www.w3.org/1999/xhtml'; fn:count(fn:collection('foo'))"

превращается в следующую строку с помощью Почтальона:

"xquery=xquery%20version%20%221.0-ml%22%3B%0Adeclare%20namespace%20html%20%3D%20%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%22%3B%0Afn%3Acount(fn%3Acollection('foo'))%0A%0A"

Теперь мне нужно создать ту же строку, что и выше. Если я пытаюсь использовать urrllib.parse.quote, он меняет скобки и 'и делает строку:

urllib.parse.quote(query_string)

'xquery%20version%20%271.0-ml%27%3B%20declare%20namespace%20html%20%3D%20%27http%3A//www.w3.org/1999/xhtml%27%3B%20fn%3Acount%28fn%3Acollection%28%27foo%27%29%29'

Есть ли какой-нибудь другой способ получить желаемый строковый результат, совпадающий с тем, что генерирует Postman с помощью простого Python?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

После игры с API я обнаружил, что это работает:

payload = 'xquery=' + urllib.parse.quote(query_string, safe="'()")
0 голосов
/ 05 ноября 2018

Я не уверен, каков желаемый результат из-за того, как сформулирован вопрос, однако, если вы не хотите, чтобы скобки были закодированы (не уверены, почему вы хотите этого, поскольку это правильное поведение), вы можете передать safe аргумент urllib.parse.quote

>>> urllib.parse.quote(query_string, safe='()')
'xquery%20version%20%271.0-ml%27%3B%20declare%20namespace%20html%20%3D%20%27http%3A%2F%2Fwww.w3.org%2F1999%2Fxhtml%27%3B%20fn%3Acount(fn%3Acollection(%27foo%27))'
...