def log_wrapper(wrapped, instance, args, kwargs):
    instance.logger.debug("{}({}) [ENTERING]".format(
        wrapped.__name__, ", ".join([argstr(args),
                                     kwargstr(kwargs)])))
    ret = wrapped(*args, **kwargs)
    instance.logger.debug("{}() [LEAVING]".format(wrapped.__name__))
    return ret
    def __init__(self, *args, options=None, **kwargs):
        self.logger = get_logger("SeleniumProxy")
        self.logger.info("ChromeDriver __init__")
        self.logger.info("options {} {} {}".format(options, argstr(args),
                                                   kwargstr(kwargs)))
        if options is None:
            options = {}

        self._client = AdminClient()
        addr, port = self._client.create_proxy(port=options.pop('port', 0),
                                               proxy_config=options.pop(
                                                   'proxy', None),
                                               options=options)

        if 'port' not in options:  # Auto config mode
            try:
                capabilities = kwargs.pop('desired_capabilities')
            except KeyError:
                capabilities = DesiredCapabilities.CHROME.copy()

            capabilities['proxy'] = {
                'proxyType': 'manual',
                'httpProxy': '{}:{}'.format(addr, port),
                'sslProxy': '{}:{}'.format(addr, port),
                'noProxy': ''
            }
            capabilities['acceptInsecureCerts'] = True

            kwargs['desired_capabilities'] = capabilities

        super().__init__(*args, **kwargs)