Source code for worldline.connect.sdk.proxy_configuration

from typing import Optional
from urllib.parse import urlparse


[docs] class ProxyConfiguration(object): """ HTTP proxy configuration. Can be initialised directly from a host and port or can be constructed from a uri using fromuri """ def __init__(self, host: str, port: int, scheme: str = "http", username: Optional[str] = None, password: Optional[str] = None): if not host: raise ValueError("host is required") if not port: raise ValueError("port is required") if port <= 0 or port > 65535: raise ValueError("""port "{}" is invalid""".format(port)) self.__scheme = scheme self.__host = host self.__port = port self.__username = username self.__password = password
[docs] @staticmethod def from_uri(uri: str, username: Optional[str] = None, password: Optional[str] = None) -> 'ProxyConfiguration': """ Constructs a ProxyConfiguration from a URI; if username and/or password are given they will be used instead of corresponding data in the URI """ parsed = urlparse(uri) scheme = parsed.scheme host = parsed.hostname + parsed.path port = parsed.port if username is None: username = parsed.username if password is None: password = parsed.password if port is None: if scheme == "http": port = 80 elif scheme == "https": port = 443 else: raise ValueError("unsupported scheme: " + scheme) return ProxyConfiguration(scheme=scheme, host=host, port=port, username=username, password=password)
@property def scheme(self) -> str: return self.__scheme @scheme.setter def scheme(self, scheme: str) -> None: self.__scheme = scheme @property def host(self) -> str: return self.__host @host.setter def host(self, host: str) -> None: self.__host = host @property def port(self) -> int: return self.__port @port.setter def port(self, port: int) -> None: self.__port = port @property def username(self) -> Optional[str]: return self.__username @username.setter def username(self, username: Optional[str]) -> None: self.__username = username @property def password(self) -> Optional[str]: return self.__password @password.setter def password(self, password: Optional[str]) -> None: self.__password = password
[docs] def __str__(self): """ Return a proxy string in the form scheme://username:password@host:port or scheme://host:port if authentication is absent Supports HTTP Basic Auth """ if self.username is None or self.password is None: return r"{0}://{1}:{2}".format(self.scheme, self.host, self.port) else: return r"{0}://{3}:{4}@{1}:{2}".format(self.scheme, self.host, self.port, self.username, self.password)