def __init__(self): self.settings = EsiSettings.getInstance() self.server_base: ApiBase = supported_servers[self.settings.get("server")] # session request stuff self._session = Session() self._basicHeaders = { 'Accept': 'application/json', 'User-Agent': ( 'pyfa v{}'.format(config.version) ) } self._session.headers.update(self._basicHeaders) self._session.proxies = NetworkSettings.getInstance().getProxySettingsInRequestsFormat() # Set up cached session. This is only used for SSO meta data for now, but can be expanded to actually handle # various ESI caching (using ETag, for example) in the future cached_session = CachedSession( os.path.join(config.savePath, config.ESI_CACHE), backend="sqlite", cache_control=True, # Use Cache-Control headers for expiration, if available expire_after=timedelta(days=1), # Otherwise expire responses after one day stale_if_error=True, # In case of request errors, use stale cache data if possible ) cached_session.headers.update(self._basicHeaders) cached_session.proxies = NetworkSettings.getInstance().getProxySettingsInRequestsFormat() meta_call = cached_session.get("https://%s/.well-known/oauth-authorization-server" % self.server_base.sso) meta_call.raise_for_status() self.server_meta = meta_call.json() jwks_call = cached_session.get(self.server_meta["jwks_uri"]) jwks_call.raise_for_status() self.jwks = jwks_call.json()
def get_web_session(cache_storage=None): proxies = None http_proxy = os.getenv('HTTP_PROXY') https_proxy = os.getenv('HTTPS_PROXY') if http_proxy is not None and https_proxy is not None: proxies = {'http': http_proxy, 'https': https_proxy} if cache_storage is not None: o = urlparse(cache_storage) if o.scheme == "mongodb": # these requests-cache internals gymnastics are necessary # because it will not create a database with the desired name otherwise dbname = o.path.replace('/', '') dbconn = MongoClient(cache_storage) session = CachedSession(backend='mongodb') session.cache = MongoCache(connection=dbconn, db_name=dbname) else: session = CachedSession(cache_name=cache_storage, extension='') else: session = Session() retry = Retry(total=10, read=10, connect=10, backoff_factor=0.3, status_forcelist=(500, 502, 504)) adapter = HTTPAdapter(max_retries=retry) session.mount('http://', adapter) session.mount('https://', adapter) session.proxies = proxies session.headers.update({'User-Agent': __useragent__}) return session