5

TL;DR

セミコロンを含むクエリ文字列を parse_qs とは異なる方法で処理するために利用できるライブラリ/呼び出しは何ですか?

>>> urlparse.parse_qs("tagged=python;ruby")
>>> {'tagged': ['python']}

完全な背景

タグ付けされた質問を検索するために StackExchange API を使用しています。

検索は次のようにレイアウトされ、タグはセミコロンで区切られています。

/2.1/search?order=desc&sort=activity&tagged=python;ruby&site=stackoverflow

APIとのやり取りは問題ありません。問題は、特にhttprettyを使用して HTTP をモックするときに、呼び出しをテストするときに発生します。

内部では、python 標準ライブラリをhttpretty使用してクエリ文字列を解析しています。urlparse.parse_qs

>>> urlparse.parse_qs("tagged=python;ruby")
{'tagged': ['python']}

明らかにそれはうまくいきません。これは小さな例です。ここに httpretty のスニペットがあります (テスト コンテキスト以外)。

import requests
import httpretty

httpretty.enable()

httpretty.register_uri(httpretty.GET, "https://api.stackexchange.com/2.1/search", body='{"items":[]}')
resp = requests.get("https://api.stackexchange.com/2.1/search", params={"tagged":"python;ruby"})
httpretty_request = httpretty.last_request()
print(httpretty_request.querystring)

httpretty.disable()
httpretty.reset()

httpretty の機構を使用したいのですが、回避策が必要ですparse_qs。今のところ、httpretty にモンキー パッチを適用できますが、他に何ができるか見てみたいと思います。

4

1 に答える 1