Mercurial > libervia-backend
comparison sat/tools/common/uri.py @ 3642:cc3b453670a2
tools (common/uri): fix uri parsing for Python 3.9+
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 08 Sep 2021 11:14:47 +0200 |
parents | be6d91572633 |
children | 67fc066ed2cd |
comparison
equal
deleted
inserted
replaced
3641:0ffaa231138c | 3642:cc3b453670a2 |
---|---|
17 # You should have received a copy of the GNU Affero General Public License | 17 # You should have received a copy of the GNU Affero General Public License |
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | 18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
19 | 19 |
20 """ XMPP uri parsing tools """ | 20 """ XMPP uri parsing tools """ |
21 | 21 |
22 import sys | |
22 import urllib.parse | 23 import urllib.parse |
23 import urllib.request, urllib.parse, urllib.error | 24 import urllib.request, urllib.parse, urllib.error |
24 | 25 |
25 # FIXME: basic implementation, need to follow RFC 5122 | 26 # FIXME: basic implementation, need to follow RFC 5122 |
26 | 27 |
51 query_end = uri_split.query.find(";") | 52 query_end = uri_split.query.find(";") |
52 query_type = uri_split.query[:query_end] | 53 query_type = uri_split.query[:query_end] |
53 if query_end == -1 or "=" in query_type: | 54 if query_end == -1 or "=" in query_type: |
54 raise ValueError("no query type, invalid XMPP URI") | 55 raise ValueError("no query type, invalid XMPP URI") |
55 | 56 |
56 pairs = urllib.parse.parse_qs(uri_split.geturl()) | 57 if sys.version_info >= (3, 9): |
58 # parse_qs behaviour has been modified in Python 3.9, ";" is not understood as a | |
59 # parameter separator anymore but the "separator" argument has been added to | |
60 # change it. | |
61 pairs = urllib.parse.parse_qs(uri_split.geturl(), separator=";") | |
62 else: | |
63 pairs = urllib.parse.parse_qs(uri_split.geturl()) | |
57 for k, v in list(pairs.items()): | 64 for k, v in list(pairs.items()): |
58 if len(v) != 1: | 65 if len(v) != 1: |
59 raise NotImplementedError("multiple values not managed") | 66 raise NotImplementedError("multiple values not managed") |
60 if k in ("path", "type", "sub_type"): | 67 if k in ("path", "type", "sub_type"): |
61 raise NotImplementedError("reserved key used in URI, this is not supported") | 68 raise NotImplementedError("reserved key used in URI, this is not supported") |