/usr/lib/python3/dist-packages/websockets/uri.py is in python3-websockets 3.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | """
The :mod:`websockets.uri` module implements parsing of WebSocket URIs
according to `section 3 of RFC 6455`_.
.. _section 3 of RFC 6455: http://tools.ietf.org/html/rfc6455#section-3
"""
__all__ = ['parse_uri', 'WebSocketURI']
import collections
import urllib.parse
from .exceptions import InvalidURI
WebSocketURI = collections.namedtuple(
'WebSocketURI', ('secure', 'host', 'port', 'resource_name'))
WebSocketURI.__doc__ = """WebSocket URI.
* ``secure`` is the secure flag
* ``host`` is the lower-case host
* ``port`` if the integer port, it's always provided even if it's the default
* ``resource_name`` is the resource name, that is, the path and optional query
"""
def parse_uri(uri):
"""
This function parses and validates a WebSocket URI.
If the URI is valid, it returns a :class:`WebSocketURI`.
Otherwise it raises an :exc:`~websockets.exceptions.InvalidURI` exception.
"""
uri = urllib.parse.urlparse(uri)
try:
assert uri.scheme in ('ws', 'wss')
assert uri.params == ''
assert uri.fragment == ''
assert uri.username is None
assert uri.password is None
assert uri.hostname is not None
except AssertionError as exc:
raise InvalidURI() from exc
secure = uri.scheme == 'wss'
host = uri.hostname
port = uri.port or (443 if secure else 80)
resource_name = uri.path or '/'
if uri.query:
resource_name += '?' + uri.query
return WebSocketURI(secure, host, port, resource_name)
|