60 lines
1.4 KiB
Python
60 lines
1.4 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
"""
|
||
|
hyper/common/util
|
||
|
~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
General utility functions for use with hyper.
|
||
|
"""
|
||
|
from vinetrimmer.vendor.hyper.compat import unicode, bytes, imap
|
||
|
from ..packages.rfc3986.uri import URIReference
|
||
|
from ..compat import is_py3
|
||
|
|
||
|
|
||
|
def to_bytestring(element):
|
||
|
"""
|
||
|
Converts a single string to a bytestring, encoding via UTF-8 if needed.
|
||
|
"""
|
||
|
if isinstance(element, unicode):
|
||
|
return element.encode('utf-8')
|
||
|
elif isinstance(element, bytes):
|
||
|
return element
|
||
|
else:
|
||
|
raise ValueError("Non string type.")
|
||
|
|
||
|
|
||
|
def to_bytestring_tuple(*x):
|
||
|
"""
|
||
|
Converts the given strings to a bytestring if necessary, returning a
|
||
|
tuple. Uses ``to_bytestring``.
|
||
|
"""
|
||
|
return tuple(imap(to_bytestring, x))
|
||
|
|
||
|
|
||
|
def to_host_port_tuple(host_port_str, default_port=80):
|
||
|
"""
|
||
|
Converts the given string containing a host and possibly a port
|
||
|
to a tuple.
|
||
|
"""
|
||
|
uri = URIReference(
|
||
|
scheme=None,
|
||
|
authority=host_port_str,
|
||
|
path=None,
|
||
|
query=None,
|
||
|
fragment=None
|
||
|
)
|
||
|
|
||
|
host = uri.host.strip('[]')
|
||
|
if not uri.port:
|
||
|
port = default_port
|
||
|
else:
|
||
|
port = int(uri.port)
|
||
|
|
||
|
return (host, port)
|
||
|
|
||
|
|
||
|
def to_native_string(string, encoding='utf-8'):
|
||
|
if isinstance(string, str):
|
||
|
return string
|
||
|
|
||
|
return string.decode(encoding) if is_py3 else string.encode(encoding)
|