From 9681f09f8c7b09d7e37e6d3b99224e2cfe838c0e Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sun, 21 Apr 2019 14:41:38 -0400 Subject: [PATCH] changes, everywhere --- .circleci/config.yml | 8 ++-- Dockerfile | 3 ++ requests3/__init__.py | 89 ------------------------------------------ requests3/help.py | 2 +- tests/conftest.py | 23 ----------- tests/test_requests.py | 16 ++++++++ 6 files changed, 25 insertions(+), 116 deletions(-) delete mode 100644 tests/conftest.py create mode 100644 tests/test_requests.py diff --git a/.circleci/config.yml b/.circleci/config.yml index b59a1270..6615f361 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -7,6 +7,8 @@ jobs: - image: circleci/python:3.6.2-stretch-browsers steps: - checkout - - run: pip install --upgrade pipenv - - run: pipenv install --sytem - - run: python setup.py test + - setup_remote_docker + + # Run the tests: + - run: docker-compose build + - run: docker-compose up diff --git a/Dockerfile b/Dockerfile index 727f849d..fdb5ea58 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,7 @@ from kennethreitz/pipenv +ENV PYTHONDONTWRITEBYTECODE 1 + COPY . /app + CMD python3 setup.py test diff --git a/requests3/__init__.py b/requests3/__init__.py index b3a013cd..7d70542a 100644 --- a/requests3/__init__.py +++ b/requests3/__init__.py @@ -136,92 +136,3 @@ from logging import NullHandler logging.getLogger(__name__).addHandler(NullHandler()) # FileModeWarnings go off per the default. warnings.simplefilter("default", FileModeWarning, append=True) - - -# -*- coding: utf-8 -*- -""" -requests.api -~~~~~~~~~~~~ - -This module implements the Requests API. - -:copyright: (c) 2012 by Kenneth Reitz. -:license: Apache2, see LICENSE for more details. -""" - -from . import http_sessions as sessions -from . import _types as types - - -def request( - method: types.Method, url: types.URL, *, session: types.HTTPSession = None, **kwargs -) -> types.Response: - """Constructs and sends a :class:`Request `. - - :param method: method for the new :class:`Request` object. - :param url: URL for the new :class:`Request` object. - :param session: :class:`Session` object to use for this request. If none is given, one will be provided. - :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`. - :param data: (optional) Dictionary or list of tuples ``[(key, value)]`` (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json data to send in the body of the :class:`Request`. - :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`. - :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`. - :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': file-tuple}``) for multipart encoding upload. - ``file-tuple`` can be a 2-tuple ``('filename', fileobj)``, 3-tuple ``('filename', fileobj, 'content_type')`` - or a 4-tuple ``('filename', fileobj, 'content_type', custom_headers)``, where ``'content-type'`` is a string - defining the content type of the given file and ``custom_headers`` a dict-like object containing additional headers - to add for the file. - :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth. - :param timeout: (optional) How many seconds to wait for the server to send data - before giving up, as a float, or a :ref:`(connect timeout, read - timeout) ` tuple. - :type timeout: float or tuple - :param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``. - :type allow_redirects: bool - :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. - :param verify: (optional) Either a boolean, in which case it controls whether we verify - the server's TLS certificate, or a string, in which case it must be a path - to a CA bundle to use. Defaults to ``True``. - :param stream: (optional) if ``False``, the response content will be immediately downloaded. - :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair. - :return: :class:`Response ` object - :rtype: requests.Response - - Usage:: - - >>> import requests - >>> req = requests.request('GET', 'https://httpbin.org/get') - - """ - # By using the 'with' statement we are sure the session is closed, thus we - # avoid leaving sockets open which can trigger a ResourceWarning in some - # cases, and look like a memory leak in others. - session = sessions.HTTPSession() if session is None else session - with session: - return session.request(method=method, url=url, **kwargs) - - -def get(url: types.URL, *, params: types.Params = None, **kwargs) -> types.Response: - r"""Sends a GET request. - - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary, list of tuples or bytes to send - in the query string for the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - kwargs.setdefault("allow_redirects", True) - return request("get", url, params=params, **kwargs) - - -def head(url: types.URL, **kwargs) -> types.Response: - r"""Sends a HEAD request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - kwargs.setdefault("allow_redirects", False) - return request("head", url, **kwargs) diff --git a/requests3/help.py b/requests3/help.py index ebab0f4d..149ce1d6 100644 --- a/requests3/help.py +++ b/requests3/help.py @@ -10,7 +10,7 @@ import idna import urllib3 import chardet -from . import types +from . import _types as types from . import __version__ as requests_version diff --git a/tests/conftest.py b/tests/conftest.py deleted file mode 100644 index 79486a30..00000000 --- a/tests/conftest.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -import pytest -from urllib.parse import urljoin - - -def prepare_url(value): - # Issue #1483: Make sure the URL always has a trailing slash - httpbin_url = value.url.rstrip('/') + '/' - - def inner(*suffix): - return urljoin(httpbin_url, '/'.join(suffix)) - - return inner - - -@pytest.fixture -def httpbin(httpbin): - return prepare_url(httpbin) - - -@pytest.fixture -def httpbin_secure(httpbin_secure): - return prepare_url(httpbin_secure) diff --git a/tests/test_requests.py b/tests/test_requests.py new file mode 100644 index 00000000..dde61265 --- /dev/null +++ b/tests/test_requests.py @@ -0,0 +1,16 @@ +import requests3 +from requests3 import HTTPSession + +def httpbin_url(httpbin, s): + return f"{httpbin.url}{s}" + +def test_idenpotent_methods(httpbin): + + http = HTTPSession() + + for method in ('get', 'head'): + + url = httpbin_url(httpbin, f'/{method}') + r = http.request(method, url) + + assert r.status_code == 200