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
Пример #3
0
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
Пример #5
0
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)