class SciServerClient(ApiClient): """SciServer wrapper around auto-generated API client Supports SciServer token authentication and session cookies """ def __init__(self, authentication=None, configuration=None): super(SciServerClient, self).__init__(configuration=configuration) self.user_agent = 'SciServer Footprint Service Client/1.0.0/python' self.authentication = authentication self.cookies = Cookies() def request(self, method, url, query_params=None, headers=None, post_params=None, body=None, _preload_content=True, _request_timeout=None): if self.authentication is not None: if headers is None: headers = {} headers['X-Auth-Token'] = authentication.getToken() if self.cookies is not None and len(self.cookies) > 0: headers['Cookie'] = self.cookies.render_request() response = super(SciServerClient, self).request(method, url, query_params, headers, post_params, body, _preload_content, _request_timeout) set_cookies = [] if _preload_content: cc = response.urllib3_response.headers._container else: cc = response.headers._container if 'set-cookie' in cc: c = cc['set-cookie'] for i in range(1, len(c)): set_cookies.append(c[i]) if set_cookies: for c in set_cookies: cc = Cookies.from_response(c) for key in cc: self.cookies.add(cc[key]) return response
# new cookies.py from cookies import Cookies, Cookie cookies = Cookies(rocky='road') # Can also write explicitly: cookies['rocky'] = Cookie['road'] cookies['rocky'].path = "/cookie" assert cookies.render_request() == 'rocky=road'