def main(): interface_ips = {} with (Path(__file__).resolve().parent / 'config.yaml').open('r') as r: update_list = load(r, Loader=BaseLoader) for user in update_list: session = Session() session.headers.update({ 'Authorization': 'Bearer {}'.format(user['token']), 'DNT': '1', }) for target in user['targets']: if (target['interface'] not in interface_ips.keys()): s = socket(AF_INET, SOCK_DGRAM) internal_ip = inet_ntoa( ioctl( s.fileno(), 0x8915, # SIOCGIFADDR pack('256s', bytes(target['interface'][:15], 'utf-8')), )[20:24]) bound_sess = Session() bound_sess.get_adapter('https://').init_poolmanager( connections=DEFAULT_POOLSIZE, maxsize=DEFAULT_POOLSIZE, source_address=(internal_ip, 0), ) interface_ips[target['interface']] = bound_sess.get( 'https://api.ipify.org/').text myip = interface_ips[target['interface']] endpoint = api('/zones/{zone_id}/dns_records/{id}'.format( zone_id=target['zone_id'], id=target['id'])) record = session.get(endpoint).json()['result'] if record['type'] != 'A': print('zone_id {}, id {} ({} {}) is not an A record; ' 'not doing anything.'.format(record['zone_id'], record['id'], record['type'], record['name'])) continue result = session.put(endpoint, json={ 'type': 'A', 'name': record['name'], 'content': myip }).json() if result['success']: record = result['result'] print('Successfully updated {} to {}'.format( record['name'], myip)) else: print('An error occurred while updating {}: ' 'Please see below for details.\n'.format(record['name'])) pprint(result)
def ratelimit_session( session: requests.Session, url_prefix: str, rate_limiter: Callable[[], Any] ) -> requests.Session: upstream = session.get_adapter(url_prefix) adapter = _RateLimitAdapter(rate_limiter=rate_limiter, upstream=upstream) session.mount(url_prefix, adapter) return session
def test_precached_session(mocker): mocker.patch("requests.Session.post", return_value=MockedResponse()) # Update the cache with a handcrafted session adapter = adapters.HTTPAdapter(pool_connections=100, pool_maxsize=100) session = Session() session.mount('http://', adapter) session.mount('https://', adapter) request.cache_session(URI, session) # Submit a second request with different arguments assert len(request._session_cache) == 1 response = request.make_post_request(URI, b'request', timeout=60) assert response == "content" assert len(request._session_cache) == 1 # Ensure the timeout was passed to the request session = request._get_session(URI) session.post.assert_called_once_with(URI, data=b'request', timeout=60) # Ensure the adapter parameters match those we specified check_adapters_mounted(session) adapter = session.get_adapter(URI) assert isinstance(adapter, HTTPAdapter) assert adapter._pool_connections == 100 assert adapter._pool_maxsize == 100
def test_user_provided_session(): adapter = HTTPAdapter(pool_connections=20, pool_maxsize=20) session = Session() session.mount('http://', adapter) session.mount('https://', adapter) provider = HTTPProvider(endpoint_uri=URI, session=session) web3 = Web3(provider) assert web3.manager.provider == provider session = request._get_session(URI) adapter = session.get_adapter(URI) assert isinstance(adapter, HTTPAdapter) assert adapter._pool_connections == 20 assert adapter._pool_maxsize == 20
class SniSession: def __init__(self): self.sni_session = Session() def request(self, method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None, stream=None, verify=None, cert=None, json=None): return self.sni_session.request(method, url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=None, allow_redirects=True, proxies=None, hooks=None, stream=None, verify=None, cert=None, json=None) @DivertDecorator def get(self, url, **kwargs): return self.sni_session.get(url, **kwargs) def options(self, url, **kwargs): return self.sni_session.options(url, **kwargs) def head(self, url, **kwargs): return self.sni_session.head(url, **kwargs) @DivertDecorator def post(self, url, data=None, json=None, **kwargs): return self.sni_session.post(url, data, json, **kwargs) @DivertDecorator def put(self, url, data=None, **kwargs): return self.sni_session.put(url, data, **kwargs) @DivertDecorator def patch(self, url, data=None, **kwargs): return self.sni_session.patch(url, data, **kwargs) @DivertDecorator def delete(self, url, **kwargs): return self.sni_session.delete(url, **kwargs) @DivertDecorator def send(self, request, **kwargs): return self.sni_session.send(request, **kwargs) def merge_environment_settings(self, url, proxies, stream, verify, cert): return self.sni_session.merge_environment_settings(url, proxies, stream, verify, cert) def get_adapter(self, url): return self.sni_session.get_adapter(url) def close(self): return self.sni_session.close() def mount(self, prefix, adpater): return self.sni_session.mount(prefix, adpater) def __getstate__(self): return self.__getstate__() def __setstate__(self, state): return self.__setstate__(state)