def get_session(user_agent): """Sets up urllib sessions""" client = requests.Session() client.headers.update({ 'Content-Type': 'application/json', 'User-Agent': user_agent, }) retry = Retry(connect=3, backoff_factor=3) adapter = HTTPAdapter(max_retries=retry) client.mount('https://', adapter) return client
def print_reproduceable(self, request): """Prints out the minimal python code to reproduce a specific request The will also automatically replace the API key so its not accidently exposed. :param request request: Request object """ output = Template('''============= testing.py ============= import requests from requests.auth import HTTPBasicAuth from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry from xml.etree import ElementTree client = requests.Session() client.headers.update({'Content-Type': 'application/json', 'User-Agent': 'softlayer-python/testing',}) retry = Retry(connect=3, backoff_factor=3) adapter = HTTPAdapter(max_retries=retry) client.mount('https://', adapter) # This is only needed if you are using an cloud.ibm.com api key #auth=HTTPBasicAuth('apikey', YOUR_CLOUD_API_KEY) auth=None url = '$url' payload = $payload transport_headers = $transport_headers timeout = $timeout verify = $verify cert = $cert proxy = $proxy response = client.request('POST', url, data=payload, headers=transport_headers, timeout=timeout, verify=verify, cert=cert, proxies=proxy, auth=auth) xml = ElementTree.fromstring(response.content) ElementTree.dump(xml) ==========================''') safe_payload = re.sub(r'<string>[a-z0-9]{64}</string>', r'<string>API_KEY_GOES_HERE</string>', request.payload) safe_payload = re.sub(r'(\s+)', r' ', safe_payload) safe_payload = safe_payload.encode() substitutions = dict(url=request.url, payload=safe_payload, transport_headers=request.transport_headers, timeout=self.timeout, verify=request.verify, cert=request.cert, proxy=_proxies_dict(self.proxy)) return output.substitute(substitutions)