Commit d471e259 authored by Dom Sekotill's avatar Dom Sekotill
Browse files

Merge branch '23-handle-ports-in-http-redirect' into 'release/0.4.x'

Add ports to http.redirect()

See merge request !18
parents 7eb27683 c0759f5b
Loading
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ def redirect(
	session: requests.Session,
	prefix: str,
	address: ipaddress.IPv4Address,
	port: int = 0, /,
	certificate: str|None = None,
) -> None:
	"""
@@ -40,7 +41,7 @@ def redirect(
	"""
	if not prefix.startswith("http://") or prefix.startswith("https://"):
		prefix = f"http://{prefix}" if certificate is None else f"https://{prefix}"
	session.mount(prefix, _DirectedAdapter(address, certificate))
	session.mount(prefix, _DirectedAdapter(address, port, certificate))


class _DirectedAdapter(requests.adapters.HTTPAdapter):
@@ -54,19 +55,20 @@ class _DirectedAdapter(requests.adapters.HTTPAdapter):
	function.
	"""

	def __init__(self, destination: ipaddress.IPv4Address, certificate: str|None):
	def __init__(self, address: ipaddress.IPv4Address, port: int, certificate: str|None, /):
		super().__init__()
		self.destination = destination
		self.destination = address, port
		self.certificate = certificate

	def get_connection(self, url: str, proxies: Mapping[str, str]|None = None) -> connectionpool.HTTPConnectionPool:
		address, port = self.destination
		parts = urlparse(url)
		if parts.hostname is None:
			raise LocationParseError(url)
		if parts.scheme == "https":
			return _HTTPSConnectionPool(parts.hostname, parts.port, address=self.destination)
			return _HTTPSConnectionPool(parts.hostname, port or parts.port, address=address)
		if parts.scheme == "http":
			return _HTTPConnectionPool(parts.hostname, parts.port, address=self.destination)
			return _HTTPConnectionPool(parts.hostname, port or parts.port, address=address)
		raise URLSchemeUnknown(parts.scheme)

	def cert_verify(