@@ -54,26 +54,27 @@ def parse_uri(uri: str) -> WebSocketURI:
5454
5555 """
5656 parsed = urllib .parse .urlparse (uri )
57- try :
58- assert parsed .scheme in ["ws" , "wss" ]
59- assert parsed .params == ""
60- assert parsed .fragment == ""
61- assert parsed .hostname is not None
62- except AssertionError as exc :
63- raise exceptions .InvalidURI (uri ) from exc
57+ if parsed .scheme not in ["ws" , "wss" ]:
58+ raise exceptions .InvalidURI (uri , "scheme isn't ws or wss" )
59+ if parsed .hostname is None :
60+ raise exceptions .InvalidURI (uri , "hostame isn't provided" )
61+ if parsed .fragment != "" :
62+ raise exceptions .InvalidURI (uri , "fragment identifier is meaningless" )
6463
6564 secure = parsed .scheme == "wss"
6665 host = parsed .hostname
6766 port = parsed .port or (443 if secure else 80 )
6867 resource_name = parsed .path or "/"
68+ if parsed .params :
69+ resource_name += ";" + parsed .params
6970 if parsed .query :
7071 resource_name += "?" + parsed .query
7172 user_info = None
7273 if parsed .username is not None :
7374 # urllib.parse.urlparse accepts URLs with a username but without a
7475 # password. This doesn't make sense for HTTP Basic Auth credentials.
7576 if parsed .password is None :
76- raise exceptions .InvalidURI (uri )
77+ raise exceptions .InvalidURI (uri , "username provided without password" )
7778 user_info = (parsed .username , parsed .password )
7879
7980 try :
0 commit comments