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 にモンキー パッチを適用できますが、他に何ができるか見てみたいと思います。