コード例 #1
0
ファイル: test_adapter.py プロジェクト: paivett/requests-curl
def test_adapter_performs_a_successful_request_through_proxy():
    request = PreparedRequest()
    request.prepare(url="http://somefakeurl", method="GET", headers={})

    proxies = {
        "http": "http://localhost:8080",
        "https": "https://localhost:8081",
    }

    header_lines = [
        b"HTTP/1.1 200 OK\n",
        b"Content-Language: en-US\n",
    ]
    pool = FakePool()
    pool.add_response(200, b"data obtained through proxy", header_lines)
    pool_provider = FakePoolProvider()
    pool_provider.add_pool_for_proxied_url("http://localhost:8080",
                                           request.url, pool)

    adapter = CURLAdapter(
        pool_provider_factory=lambda *args, **kwargs: pool_provider)

    response = adapter.send(request, proxies=proxies)

    assert response.status_code == 200
    assert response.text == "data obtained through proxy"
    assert response.headers == {"Content-Language": "en-US"}
コード例 #2
0
def main(query, pages, city):
    city_url = urljoin(BASE_URL, city + '/')
    url = urljoin(city_url, f'q-{query}')

    response = requests.get(url)
    soup = get_soup(response)
    electronics_tag = soup.find('a', attrs={'data-id': '37'})
    electronics_link = electronics_tag.attrs['href']

    response = requests.get(electronics_link)
    soup = get_soup(response)
    accessories_tag = soup.find('a', attrs={'data-id': '44'})
    accessories_link = accessories_tag.attrs['href']

    response = requests.get(accessories_link)
    soup = get_soup(response)
    phones_tag = soup.find('a', attrs={'data-id': '85'})
    phones_link = phones_tag.attrs['href']

    links = []
    req = PreparedRequest()

    for page_number in range(pages):
        req.prepare_url(phones_link, params={'page': page_number + 1})
        page_links = get_links_on_page(req.url)
        links.extend(page_links)

    filename = f'{query}.csv'
    write_to_csv_file(filename, links)
コード例 #3
0
ファイル: test_volume.py プロジェクト: dxenes1/intern
    def test_get_cutout_success(self, mock_session):
        resolution = 0
        x_range = [20, 40]
        y_range = [50, 70]
        z_range = [30, 50]
        time_range = [10, 25]
        id_list = []
        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'

        fake_prepped_req = PreparedRequest()
        fake_prepped_req.headers = {}
        mock_session.prepare_request.return_value = fake_prepped_req

        data = numpy.random.randint(0, 3000, (15, 20, 20, 20), numpy.uint16)
        compressed_data = blosc.compress(data, typesize=16)
        fake_response = Response()
        fake_response.status_code = 200
        fake_response._content = compressed_data
        mock_session.send.return_value = fake_response
        send_opts = {}

        actual = self.vol.get_cutout(self.chan, resolution, x_range, y_range,
                                     z_range, time_range, id_list, url_prefix,
                                     auth, mock_session, send_opts)

        numpy.testing.assert_array_equal(data, actual)
コード例 #4
0
ファイル: test_project.py プロジェクト: vangalamaheshh/intern
    def test_prj_create_success(self, mock_session, mock_resp):
        mock_session.prepare_request.return_value = PreparedRequest()
        mock_resp.status_code = 201
        mock_resp.json.return_value = {
            'type': 'image',
            'name': 'chan',
            'description': 'walker',
            'experiment': 'bar',
            'creator': 'me',
            'default_time_sample': 2,
            'datatype': 'uint16',
            'base_resolution': 0
        }

        mock_session.send.return_value = mock_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        actual = self.prj.create(self.chan, url_prefix, auth, mock_session,
                                 send_opts)

        self.assertTrue(isinstance(actual, ChannelResource))
        self.assertEqual('chan', actual.name)
        self.assertEqual('foo', actual.coll_name)
        self.assertEqual('bar', actual.exp_name)
        self.assertEqual('image', actual.type)
コード例 #5
0
ファイル: get_engine.py プロジェクト: juan-kabbali/datalake
 def get_lookup_result(self, threat, atom_type, hashkey_only) -> list:
     params = {'atom_value': threat, 'atom_type': atom_type, 'hashkey_only': hashkey_only}
     req = PreparedRequest()  # Adding parameters using requests' tool
     req.prepare_url(self.url, params)
     response = self.datalake_requests(req.url, 'get',
                                       headers={'Authorization': self.tokens[0]})
     return response
コード例 #6
0
ファイル: test_volume.py プロジェクト: dxenes1/intern
    def test_get_ids_in_region_success(self, mock_session, mock_resp):
        resolution = 0
        x_range = [0, 100]
        y_range = [10, 50]
        z_range = [20, 42]
        t_range = [0, 1]

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        fake_prepped_req = PreparedRequest()
        fake_prepped_req.headers = {}
        mock_session.prepare_request.return_value = fake_prepped_req
        mock_session.send.return_value = mock_resp

        mock_resp.status_code = 200
        mock_resp.json.return_value = {'ids': ['1', '10']}

        actual = self.vol.get_ids_in_region(self.anno_chan, resolution,
                                            x_range, y_range, z_range, t_range,
                                            url_prefix, auth, mock_session,
                                            send_opts)

        expected = [1, 10]

        self.assertEqual(expected, actual)
コード例 #7
0
def test__call__(mocker):
    auth = SpotifyAPIAuth()
    mocker.patch.object(auth, "_set_tokens")
    auth.tokens = {"access_token": "xxxxx"}
    req = PreparedRequest()
    req.prepare(method="GET", url="https://spotify.com", auth=auth)
    assert req.headers["authorization"] == "Bearer xxxxx"
コード例 #8
0
 def test_token(self):
     token = TokenAuth('tokenvalue')
     req = PreparedRequest()
     req.url = 'http://test.com/'
     req.method = 'GET'
     req.prepare_auth(token)
     self.assertEqual(req.url, 'http://test.com/?token=tokenvalue')
コード例 #9
0
def make_url(api_key, location_name):
    """
    Arguments:

        api_key (String)
        The Mapzen API key you get during registration
            e.g. 'MY_API_KEY'

        location_name (String)
        Represents the human-readable name of the location to geocode
            e.g. 'Stanford University'

    Returns:

        String
        A url formatted according to Mapzen Search API spec.

        e.g. https://search.mapzen.com/v1/search?api_key=MY_API_KEY&text=Stanford+University

    """
    my_params = {'text': location_name, 'api_key': api_key}
    p = PreparedRequest()
    p.prepare_url(url=BASE_ENDPOINT, params=my_params)

    return p.url
コード例 #10
0
 def _parse_raw_request(cls, raw_request: bytes) -> PreparedRequest:
     """
     ok, this is kind of janky, but AWS4Auth is meant to work with requests, so expects a PreparedRequest
     """
     body: Optional[str] = None
     headers, body = raw_request.decode('utf-8').split('\r\n\r\n', 1)
     # strip the trailing \r\n if present
     if len(body) == 0:
         body = None
     elif body.endswith('\r\n'):
         body = body[:-2]
     # hi!  if you get here looking for folded headers, that's obsolete and we ought not be generating them
     method_et_al, headers = headers.split('\r\n', 1)
     headers_as_dict: Mapping[str, str] = \
         dict([(k.strip(), v.strip()) for k, v in [h.split(':', 1) for h in headers.split('\r\n')]])
     # this is a little janky, really should be one or more spaces
     method, path_et_al, version = method_et_al.split(' ', 2)
     # this is very sketchy looking but I promise that we don't care about the host, port, or scheme here
     url = 'https://nope/' + path_et_al
     req = PreparedRequest()
     req.prepare_method(method)
     req.prepare_url(url, {})
     req.prepare_headers(headers_as_dict)
     req.prepare_body(data=body, files=None)
     # don't req.prepare_content_length, we already had that in headers surely
     return req
コード例 #11
0
    def test_prj_update_success(self, mock_session, mock_resp):
        chan_dict = {
            'name': 'bar', 'description': 'none', 'experiment': 8, 'type': 'image',
            'is_channel': True, 'default_time_sample': 0, 'datatype': 'uint16',
            'base_resolution': 0, 'linked_channel_layers': [], 'creator': 'me'
        }
        expected = ChannelResource(
            chan_dict['name'], self.chan.coll_name, self.chan.exp_name, 'image')
        expected.description = chan_dict['description']
        expected.datatype = chan_dict['datatype']
        expected.base_resolution = chan_dict['base_resolution']
        expected.default_time_sample = chan_dict['default_time_sample']
        expected.type = chan_dict['type']

        mock_session.prepare_request.return_value = PreparedRequest()
        mock_resp.json.return_value = chan_dict
        mock_resp.status_code = 200

        mock_session.send.return_value = mock_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        actual = self.prj.update(self.chan.name, self.chan, url_prefix, auth, mock_session, send_opts)

        self.assertEqual(expected.name, actual.name)
        self.assertEqual(expected.description, actual.description)
        self.assertEqual(expected.exp_name, actual.exp_name)
        self.assertEqual(expected.coll_name, actual.coll_name)
        self.assertEqual(expected.default_time_sample, actual.default_time_sample)
        self.assertEqual(expected.datatype, actual.datatype)
        self.assertEqual(expected.base_resolution, actual.base_resolution)
        self.assertEqual(expected.type, actual.type)
コード例 #12
0
ファイル: test_pool.py プロジェクト: paivett/requests-curl
def test_pool_send_configures_handler_correctly():
    prepared_request = PreparedRequest()
    prepared_request.prepare(url="http://somefakeurl",
                             method="GET",
                             headers={})
    curl_request = CURLRequest(prepared_request)
    curl_handler = FakeCurlHandler()

    # Configure the handler to return some body and headers
    curl_handler.body = b"somebodydata"
    curl_handler.http_status = 200
    curl_handler.header_lines = [
        "HTTP/1.1 200 OK\n".encode("iso-8859-1"),
        "Content-Language: en-US\n".encode("iso-8859-1"),
        "Cache-Control: no-cache\n".encode("iso-8859-1"),
    ]

    pool = CURLHandlerPool(curl_factory=lambda: curl_handler)

    response = pool.send(curl_request)

    assert curl_handler.performed

    assert response.body.getvalue() == b"somebodydata"
    assert response.http_code == 200
    assert response.headers == {
        "Cache-Control": "no-cache",
        "Content-Language": "en-US",
    }

    # Assert that the curl options from the requests were set to the handler
    for opt, val in curl_request.options.items():
        assert curl_handler.options[opt] == val
コード例 #13
0
    def test_pre_send():
        """Test the pre_send method."""
        # backup time methods
        backup_sleep = time.sleep
        backup_time = time.time

        rate_limit_handler = RateLimitHandler()

        sleep = MagicMock(return_value=None)
        time.sleep = sleep

        time.time = MagicMock(return_value=7)

        response: Response = Response()
        type(response).ok = PropertyMock(True)
        response.headers = {
            'X-RateLimit-Remaining': 0,
            'X-RateLimit-Reset': 10
        }

        rate_limit_handler.post_send(response)

        request: PreparedRequest = PreparedRequest()

        rate_limit_handler.pre_send(request)
        sleep.assert_called_once_with(3)

        # restore time methods
        time.sleep = backup_sleep
        time.time = backup_time
コード例 #14
0
ファイル: test_request.py プロジェクト: paivett/requests-curl
def test_curl_options_for_post_with_some_file_data(tmpdir):
    p = tmpdir.join("test.txt")
    p.write("content")
    prepared_request = PreparedRequest()
    prepared_request.prepare(
        url="http://somefakeurl",
        method="POST",
        data=p,
    )
    curl_request = CURLRequest(prepared_request)

    curl_options = curl_request.options

    expected_headers = []

    assert len(curl_options) == 7
    assert curl_options[pycurl.URL] == "http://somefakeurl/"
    assert curl_options[pycurl.SSL_VERIFYHOST] == 0
    assert curl_options[pycurl.SSL_VERIFYPEER] == 0
    assert curl_options[pycurl.UPLOAD] is True
    assert curl_options[pycurl.CUSTOMREQUEST] == "POST"
    assert curl_options[pycurl.HTTPHEADER] == expected_headers

    # We actually call the function to test that it reads
    # the expected bytes
    assert curl_options[pycurl.READFUNCTION]() == "content"
コード例 #15
0
def test_curl_response_with_cookies():
    prepared_request = PreparedRequest()
    prepared_request.prepare(url="http://somefakeurl",
                             method="GET",
                             headers={})
    curl_request = CURLRequest(prepared_request)

    curl_response = CURLResponse(curl_request)
    curl_response.http_code = 200

    header_lines = [
        "HTTP/1.1 200 OK\n",
        "Content-Language: en-US\n",
        "Cache-Control: no-cache\n",
        "Set-Cookie: foo=123; SameSite=None; Secure; Max-Age=2592000\n",
        "Set-Cookie: bar=abc; HttpOnly\n",
    ]

    for header_line in header_lines:
        # We provide lines encoded as defined in http standard
        curl_response.add_header_from_raw_line(
            header_line.encode("iso-8859-1"))

    req_response = curl_response.to_requests_response()

    assert len(req_response.cookies) == 2
    assert req_response.cookies.get("foo") == "123"
    assert req_response.cookies.get("bar") == "abc"
コード例 #16
0
ファイル: test_request.py プロジェクト: paivett/requests-curl
def test_curl_options_for_post_put_with_some_string_data(
        http_method, data, expected_data):
    prepared_request = PreparedRequest()
    prepared_request.prepare(
        url="http://somefakeurl",
        method=http_method,
        data=data,
    )
    curl_request = CURLRequest(prepared_request)

    curl_options = curl_request.options

    expected_headers = [
        f"Content-Length: {len(data)}",
    ]

    assert len(curl_options) == 7
    assert curl_options[pycurl.URL] == "http://somefakeurl/"
    assert curl_options[pycurl.SSL_VERIFYHOST] == 0
    assert curl_options[pycurl.SSL_VERIFYPEER] == 0
    assert curl_options[pycurl.UPLOAD] is True
    assert curl_options[pycurl.CUSTOMREQUEST] == http_method
    assert curl_options[pycurl.HTTPHEADER] == expected_headers

    # We actually call the function to test that it reads
    # the expected bytes
    assert curl_options[pycurl.READFUNCTION]() == expected_data
コード例 #17
0
ファイル: test_volume.py プロジェクト: dxenes1/intern
    def test_get_bounding_box_success(self, mock_session, mock_resp):
        resolution = 0
        id = 44444
        bb_type = 'loose'

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        fake_prepped_req = PreparedRequest()
        fake_prepped_req.headers = {}
        mock_session.prepare_request.return_value = fake_prepped_req
        mock_session.send.return_value = mock_resp

        mock_resp.status_code = 200
        mock_resp.json.return_value = expected = {
            'x_range': [0, 10],
            'y_range': [0, 10],
            'z_range': [0, 10],
            't_range': [0, 10]
        }

        actual = self.vol.get_bounding_box(self.anno_chan, resolution, id,
                                           bb_type, url_prefix, auth,
                                           mock_session, send_opts)

        self.assertEqual(expected, actual)
コード例 #18
0
    def fetch(self, entry_url: str) -> JobsList:
        self.jobs = JobsList()
        page_buffer = []

        for job_link in self.get_jobs_list(entry_url):
            try:
                page_buffer.append(self.get_job(job_link))
            except Exception as e:
                print("Error Processing %s %s " % (job_link, e))

        page = 1
        while len(page_buffer) > 0:
            self.jobs.extend(page_buffer)
            page_buffer = []

            prep_url = PreparedRequest()
            prep_url.prepare(url=entry_url, params={'page': page})
            next_page_url = prep_url.url

            for job_link in self.get_jobs_list(next_page_url):
                try:
                    page_buffer.append(self.get_job(job_link))
                except Exception as e:
                    print("Error Processing %s %s " % (job_link, e))

            print("Scraped page %s" % page)
            page += 1

        return self.jobs
コード例 #19
0
ファイル: get_engine.py プロジェクト: juan-kabbali/datalake
 def get_threats(self, query_hash: str, limit=10, response_format="application/json") -> dict:
     url = self.url + query_hash
     params = {'limit': limit}
     req = PreparedRequest()  # Adding parameters using requests' tool
     req.prepare_url(url, params)
     headers = {'Authorization': self.tokens[0], 'Accept': response_format}
     response = self.datalake_requests(req.url, 'get', headers=headers)
     return response
コード例 #20
0
ファイル: SqlRequest.py プロジェクト: COMKF/postg_rest_sdk
 def get_query(self, data=None):
     p = PreparedRequest()
     req_data = build_req_data(data)
     p.prepare_url(
         self.target,
         req_data)  # 该方法只是其中一个方法,这个方法就是专门拼接params与url的,生成 EncodeUrl。
     self.query = p.url
     return self.query
コード例 #21
0
 def sub_link(self):
     '''生成该用户的订阅地址'''
     p = PreparedRequest()
     token = base64.b64encode(self.username.encode()).decode()
     url = settings.HOST + 'server/subscribe/'
     params = {'token': token}
     p.prepare_url(url, params)
     return p.url
コード例 #22
0
 def sub_link(self):
     """生成该用户的订阅地址"""
     p = PreparedRequest()
     token = base64.b64encode(self.username.encode()).decode()
     url = settings.HOST + "/server/subscribe/"
     params = {"token": token}
     p.prepare_url(url, params)
     return p.url
コード例 #23
0
    def test_http_method(self):
        unknown_method = ZoomAPIException(0, 'Test', None, 'Test message')
        self.assertEqual(unknown_method.http_method, None)

        req = PreparedRequest()
        req.prepare_method('GET')
        known_method = ZoomAPIException(0, 'Test', req, 'Message')

        self.assertEqual(known_method.http_method, 'GET')
コード例 #24
0
ファイル: __init__.py プロジェクト: pgp69/ha-jq300
    def _add_url_params(self, url: str, extra_params: dict):
        """Add params to URL."""
        params = self.params.copy()
        params.update(extra_params)

        req = PreparedRequest()
        req.prepare_url(url, params)

        return req.url
コード例 #25
0
 def setUp(self):
     self.alt_url = ('http://example.com/path/to/end/point?query=string'
                     '&foo=bar')
     self.p = PreparedRequest()
     self.p.body = 'Foo bar'
     self.p.headers = {'User-Agent': 'betamax/test'}
     self.p.url = 'http://example.com/path/to/end/point?query=string'
     self.p.method = 'GET'
     self.p._cookies = RequestsCookieJar()
コード例 #26
0
ファイル: test_request.py プロジェクト: paivett/requests-curl
def test_use_chunked_upload_is_false_for_json():
    prepared_request = PreparedRequest()
    json_data = {"somekey": "somedata"}
    prepared_request.prepare(
        url="http://somefakeurl",
        json=json_data,
    )
    curl_request = CURLRequest(prepared_request)

    assert curl_request.use_chunked_upload is False
コード例 #27
0
ファイル: test_request.py プロジェクト: paivett/requests-curl
def test_use_chunked_upload_is_false_for_string_data():
    prepared_request = PreparedRequest()
    some_data = "this is some data as string"
    prepared_request.prepare(
        url="http://somefakeurl",
        data=some_data,
    )
    curl_request = CURLRequest(prepared_request)

    assert curl_request.use_chunked_upload is False
コード例 #28
0
ファイル: test_request.py プロジェクト: paivett/requests-curl
def test_use_chunked_upload_is_true_for_streamed_data():
    prepared_request = PreparedRequest()
    some_stream_data = six.StringIO("this is some data as string")
    prepared_request.prepare(
        url="http://somefakeurl",
        data=some_stream_data,
    )
    curl_request = CURLRequest(prepared_request)

    assert curl_request.use_chunked_upload is True
コード例 #29
0
    def test_token_auth(self):

        token = {'access_token': '123456789'}
        auth = OAuthTokenAuthentication("client_id", token)
        session = auth.signed_session()

        request = PreparedRequest()
        request.prepare("GET", "https://example.org")
        session.auth(request)
        assert request.headers == {'Authorization': 'Bearer 123456789'}
コード例 #30
0
ファイル: test_user.py プロジェクト: vangalamaheshh/intern
    def test_delete_success(self, mock_session):
        mock_session.prepare_request.return_value = PreparedRequest()
        fake_resp = Response()
        fake_resp.status_code = 204
        mock_session.send.return_value = fake_resp

        url_prefix = 'https://api.theboss.io'
        auth = 'mytoken'
        send_opts = {}

        self.prj.delete_user('johndoe', url_prefix, auth, mock_session,
                             send_opts)