From 34a9768d80e9f634543e55d1c0420c5a86377ea4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Dufresne?= Date: Thu, 2 May 2019 16:44:53 -0400 Subject: [PATCH 1/4] Return a clear error when HTTP calls to legacy repo fail, instead of PackageNotFound --- poetry/repositories/legacy_repository.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/poetry/repositories/legacy_repository.py b/poetry/repositories/legacy_repository.py index 910cac368cb..702aec9f91f 100644 --- a/poetry/repositories/legacy_repository.py +++ b/poetry/repositories/legacy_repository.py @@ -43,7 +43,7 @@ from poetry.version.markers import InvalidMarker from .auth import Auth -from .exceptions import PackageNotFound +from .exceptions import PackageNotFound, RepositoryError from .pypi_repository import PyPiRepository import warnings @@ -390,7 +390,12 @@ def _get_release_info(self, name, version): # type: (str, str) -> dict return data def _download(self, url, dest): # type: (str, str) -> None - r = self._session.get(url, stream=True) + try: + r = self._session.get(url, stream=True) + r.raise_for_status() + except requests.HTTPError as e: + raise RepositoryError(e) + with open(dest, "wb") as f: for chunk in r.iter_content(chunk_size=1024): if chunk: @@ -398,8 +403,12 @@ def _download(self, url, dest): # type: (str, str) -> None def _get(self, endpoint): # type: (str) -> Union[Page, None] url = self._url + endpoint - response = self._session.get(url) - if response.status_code == 404: - return + try: + response = self._session.get(url) + response.raise_for_status() + except requests.HTTPError as e: + if e.response.status_code == 404: + return + raise RepositoryError(e) return Page(url, response.content, response.headers) From a23825c9a73b2e54780b1214878d99f0f6136942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Dufresne?= Date: Wed, 29 May 2019 16:46:47 -0400 Subject: [PATCH 2/4] Added download and get tests --- pyproject.toml | 1 + tests/repositories/test_legacy_repository.py | 59 +++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6ec7af16b04..167503f428a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,6 +61,7 @@ pre-commit = "^1.10" tox = "^3.0" pytest-sugar = "^0.9.2" httpretty = "^0.9.6" +requests-mock = "^1.6" [tool.poetry.scripts] diff --git a/tests/repositories/test_legacy_repository.py b/tests/repositories/test_legacy_repository.py index a1f6545be9f..3b110f9dbcb 100644 --- a/tests/repositories/test_legacy_repository.py +++ b/tests/repositories/test_legacy_repository.py @@ -1,13 +1,18 @@ +from unittest.mock import patch, mock_open + import pytest import shutil +import requests_mock + + try: import urllib.parse as urlparse except ImportError: import urlparse from poetry.packages import Dependency -from poetry.repositories.exceptions import PackageNotFound +from poetry.repositories.exceptions import PackageNotFound, RepositoryError from poetry.repositories.legacy_repository import LegacyRepository from poetry.repositories.legacy_repository import Page from poetry.utils._compat import PY35 @@ -255,3 +260,55 @@ def test_get_package_retrieves_packages_with_no_hashes(): package = repo.package("jupyter", "1.0.0") assert [] == package.hashes + + +class MockRepositoryWithSession(LegacyRepository): + def __init__(self): + super(MockRepositoryWithSession, self).__init__( + "legacy", url="http://foo.bar", disable_cache=True + ) + + +def test_repo_get(): + repo = MockRepositoryWithSession() + + with requests_mock.Mocker() as m: + m.get("http://foo.bar/some-package", text="") + page = repo._get("/some-package") + + assert page + + +def test_repo_get_http_error(): + repo = MockRepositoryWithSession() + + with requests_mock.Mocker() as m: + m.get("http://foo.bar/some-package", text="Forbidden", status_code=403) + with pytest.raises(RepositoryError): + repo._get("/some-package") + + +def test_repo_download(): + repo = MockRepositoryWithSession() + url = "http://foo.bar/some-package/some-package-0.1.tar.gz" + dest = "/some/dest.tar.gz" + content = b"content" + + with requests_mock.Mocker() as m, patch( + "poetry.repositories.legacy_repository.open", mock_open() + ) as mock_file: + m.get(url, content=content) + repo._download(url, dest) + mock_file.assert_called_with(dest, "wb") + mock_file().write.assert_called_once_with(content) + + +def test_repo_download_http_error(): + repo = MockRepositoryWithSession() + url = "http://foo.bar/some-package/some-package-0.1.tar.gz" + dest = "/some/dest.tar.gz" + + with requests_mock.Mocker() as m: + m.get(url, status_code=403) + with pytest.raises(RepositoryError): + repo._download(url, dest) From 2b57d2b46e5e5bd4f764bc057d8a7864e4d26afa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Dufresne?= Date: Wed, 29 May 2019 16:51:18 -0400 Subject: [PATCH 3/4] Updated lockfile --- poetry.lock | 123 ++++++++++------------------------------------------ 1 file changed, 22 insertions(+), 101 deletions(-) diff --git a/poetry.lock b/poetry.lock index acde647a182..22b5ef518e6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -34,11 +34,6 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "19.1.0" -[package.extras] -dev = ["coverage", "hypothesis", "pympler", "pytest", "six", "zope.interface", "sphinx", "pre-commit"] -docs = ["sphinx", "zope.interface"] -tests = ["coverage", "hypothesis", "pympler", "pytest", "six", "zope.interface"] - [[package]] category = "dev" description = "The uncompromising code formatter." @@ -54,9 +49,6 @@ attrs = ">=18.1.0" click = ">=6.5" toml = ">=0.9.4" -[package.extras] -d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] - [[package]] category = "main" description = "httplib2 caching for requests" @@ -66,17 +58,10 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "0.12.5" [package.dependencies] +lockfile = ">=0.9" msgpack = "*" requests = "*" -[package.dependencies.lockfile] -optional = true -version = ">=0.9" - -[package.extras] -filecache = ["lockfile (>=0.9)"] -redis = ["redis (>=2.10.5)"] - [[package]] category = "main" description = "Cachy provides a simple yet effective caching library." @@ -85,11 +70,6 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "0.2.0" -[package.extras] -memcached = ["python-memcached (>=1.59.0.0,<2.0.0.0)"] -msgpack = ["msgpack-python (>=0.5.0.0,<0.6.0.0)"] -redis = ["redis (>=2.10.0.0,<3.0.0.0)"] - [[package]] category = "main" description = "Python package for providing Mozilla's CA Bundle." @@ -104,7 +84,7 @@ description = "Validate configuration and produce human readable error messages. name = "cfgv" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.6.0" +version = "2.0.0" [package.dependencies] six = "*" @@ -177,10 +157,6 @@ optional = false python-versions = ">=2.6" version = "3.7.4" -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2)", "pytest-flake8"] - [[package]] category = "dev" description = "Backports and enhancements for the contextlib module" @@ -263,13 +239,6 @@ version = "1.0.1" six = ">=1.9" webencodings = "*" -[package.extras] -all = ["genshi", "chardet (>=2.2)", "datrie", "lxml"] -chardet = ["chardet (>=2.2)"] -datrie = ["datrie"] -genshi = ["genshi"] -lxml = ["lxml"] - [[package]] category = "dev" description = "HTTP client mock for Python" @@ -289,9 +258,6 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "1.4.3" -[package.extras] -license = ["editdistance"] - [[package]] category = "main" description = "Internationalized Domain Names in Applications (IDNA)" @@ -319,9 +285,6 @@ version = "*" python = "<3" version = "*" -[package.extras] -docs = ["sphinx", "docutils (0.12)", "rst.linker"] - [[package]] category = "dev" description = "Read resources from Python packages" @@ -352,9 +315,6 @@ version = "2.10.1" [package.dependencies] MarkupSafe = ">=0.23" -[package.extras] -i18n = ["Babel (>=0.8)"] - [[package]] category = "main" description = "An implementation of JSON Schema validation for Python" @@ -373,9 +333,6 @@ six = ">=1.11.0" python = "<3" version = "*" -[package.extras] -format = ["idna", "jsonpointer (>1.13)", "rfc3987", "strict-rfc3339", "webcolors"] - [[package]] category = "dev" description = "Python LiveReload is an awesome tool for web developers" @@ -417,9 +374,6 @@ version = "3.1.1" [package.dependencies] setuptools = ">=36" -[package.extras] -testing = ["coverage", "pyyaml"] - [[package]] category = "dev" description = "Safely add untrusted strings to HTML/XML markup." @@ -462,11 +416,6 @@ six = "*" python = "<3.3" version = ">=1" -[package.extras] -build = ["twine", "wheel", "blurb"] -docs = ["sphinx"] -test = ["pytest", "pytest-cov"] - [[package]] category = "dev" description = "More routines for operating on iterables, beyond itertools" @@ -548,19 +497,16 @@ optional = false python-versions = "*" version = "1.5.0.1" -[package.extras] -testing = ["nose", "coverage"] - [[package]] category = "dev" description = "plugin and hook calling mechanisms for python" name = "pluggy" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.11.0" +version = "0.12.0" -[package.extras] -dev = ["pre-commit", "tox"] +[package.dependencies] +importlib-metadata = ">=0.12" [[package]] category = "dev" @@ -611,7 +557,7 @@ description = "Pygments is a syntax highlighting package written in Python." name = "pygments" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.4.1" +version = "2.4.2" [[package]] category = "dev" @@ -696,9 +642,6 @@ version = ">=1.0" python = "<3.6" version = ">=2.2.0" -[package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "nose", "requests", "mock"] - [[package]] category = "dev" description = "Pytest plugin for measuring coverage." @@ -711,9 +654,6 @@ version = "2.7.1" coverage = ">=4.4" pytest = ">=3.6" -[package.extras] -testing = ["fields", "hunter", "process-tests (2.0.2)", "six", "virtualenv"] - [[package]] category = "dev" description = "Thin-wrapper around the mock package for easier use with py.test" @@ -729,9 +669,6 @@ pytest = ">=2.7" python = "<3.0" version = "*" -[package.extras] -dev = ["pre-commit", "tox"] - [[package]] category = "dev" description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." @@ -767,10 +704,6 @@ chardet = ">=3.0.2,<3.1.0" idna = ">=2.5,<2.9" urllib3 = ">=1.21.1,<1.25" -[package.extras] -security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] - [[package]] category = "main" description = "Python HTTP for Humans." @@ -785,9 +718,17 @@ chardet = ">=3.0.2,<3.1.0" idna = ">=2.5,<2.9" urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" -[package.extras] -security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] +[[package]] +category = "dev" +description = "Mock out responses from the requests package" +name = "requests-mock" +optional = false +python-versions = "*" +version = "1.6.0" + +[package.dependencies] +requests = ">=2.3" +six = "*" [[package]] category = "main" @@ -888,10 +829,6 @@ six = ">=1.0.0,<2" toml = ">=0.9.4" virtualenv = ">=14.0.0" -[package.extras] -docs = ["sphinx (>=2.0.0,<3)", "towncrier (>=18.5.0)", "pygments-github-lexers (>=0.0.5)", "sphinxcontrib-autoprogram (>=0.1.5)"] -testing = ["freezegun (>=0.3.11,<1)", "pathlib2 (>=2.3.3,<3)", "pytest (>=3.0.0,<5)", "pytest-cov (>=2.5.1,<3)", "pytest-mock (>=1.10.0,<2)", "pytest-xdist (>=1.22.2,<2)", "pytest-randomly (>=1.2.3,<2)", "flaky (>=3.4.0,<4)", "psutil (>=5.6.1,<6)"] - [[package]] category = "main" description = "Type Hints for Python" @@ -909,10 +846,6 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" version = "1.24.3" -[package.extras] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] - [[package]] category = "main" description = "HTTP library with thread-safe connection pooling, file post, and more." @@ -921,11 +854,6 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" version = "1.25.3" -[package.extras] -brotli = ["brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] -socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] - [[package]] category = "main" description = "Virtual Python Environment builder" @@ -934,10 +862,6 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "16.6.0" -[package.extras] -docs = ["sphinx (>=1.8.0,<2)", "towncrier (>=18.5.0)", "sphinx-rtd-theme (>=0.4.2,<1)"] -testing = ["pytest (>=4.0.0,<5)", "coverage (>=4.5.0,<5)", "pytest-timeout (>=1.3.0,<2)", "six (>=1.10.0,<2)", "pytest-xdist", "pytest-localserver", "pypiserver", "mock", "xonsh"] - [[package]] category = "dev" description = "Measures number of Terminal column cells of wide-character codes" @@ -962,12 +886,8 @@ optional = false python-versions = ">=2.7" version = "0.5.1" -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] -testing = ["pathlib2", "contextlib2", "unittest2"] - [metadata] -content-hash = "f3163ab56506c745d9250f9c04ea512d4996068c85770092590ffb079b465db0" +content-hash = "23847ccdc29b374bf8f4e2a2336e89d37d0144f775515a12b334170c721824d5" python-versions = "~2.7 || ^3.4" [metadata.hashes] @@ -979,7 +899,7 @@ black = ["09a9dcb7c46ed496a9850b76e4e825d6049ecd38b611f1224857a79bd985a8cf", "68 cachecontrol = ["cef77effdf51b43178f6a2d3b787e3734f98ade253fa3187f3bb7315aaa42ff7"] cachy = ["b71513e5a38ce90c1280c02b7d8d6bb3fdf64666c9cc0584f2479afea097d56c", "b71e8e7ddb5b386e23e81befdfac8a93885406139b8681bedc17b3444fcb8fca"] certifi = ["59b7658e26ca9c7339e00f8f4636cdfe59d34fa37b9b04f6f9e9926b3cece1a5", "b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae"] -cfgv = ["6e9f2feea5e84bc71e56abd703140d7a2c250fc5ba38b8702fd6a68ed4e3b2ef", "e7f186d4a36c099a9e20b04ac3108bd8bb9b9257e692ce18c8c3764d5cb12172"] +cfgv = ["32edbe09de6f4521224b87822103a8c16a614d31a894735f7a5b3bcf0eb3c37e", "3bd31385cd2bebddbba8012200aaf15aa208539f1b33973759b4d02fc2148da5"] chardet = ["84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", "fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"] cleo = ["58d26642fa608a1515093275cd98875100c7d50f01fc1f3bbb7a78dbb73e4b14", "9b7d706309412e43d00723ed3074a300cd7879a0c685f4fef0b5052d7f4ab71f"] click = ["2335065e6395b9e67ca716de5f7526736bfa6ceead690adf616d925bdc622b13", "5b94b49521f6456670fdb30cd82a4eca9412788a93fa6dd6df72c94d5a8ff2d7"] @@ -1015,10 +935,10 @@ packaging = ["0c98a5d0be38ed775798ece1b9727178c4469d9c3b4ada66e8e6b7849f8732af", pastel = ["3108af417ec0fa6d0a620e676ec4f02c839ca13e10611586e5d2174b46aa0bc3", "d1fee8079534f99f1805a044fef946d23eee6d6a7cd34292c30e6c16be9a80b9"] pathlib2 = ["25199318e8cc3c25dcb45cbe084cc061051336d5a9ea2a12448d3d8cb748f742", "5887121d7f7df3603bca2f710e7219f3eca0eb69e0b7cc6e0a022e155ac931a7"] pkginfo = ["7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb", "a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32"] -pluggy = ["25a1bc1d148c9a640211872b4ff859878d422bccb59c9965e04eed468a0aa180", "964cedd2b27c492fbf0b7f58b3284a09cf7f99b0f715941fb24a439b3af1bd1a"] +pluggy = ["0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc", "b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c"] pre-commit = ["6ca409d1f22d444af427fb023a33ca8b69625d508a50e1b7eaabd59247c93043", "94dd519597f5bff06a4b0df194a79c524b78f4b1534c1ce63241a9d4fb23b926"] py = ["64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", "dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"] -pygments = ["5ffada19f6203563680669ee7f53b64dabbeb100eb51b61996085e99c03b284a", "e8218dd399a61674745138520d0d4cf2621d7e032439341bc3f647bff125818d", "36586500a94cd97f8c2c19d251cdb78868d1a822e0e491bfc1d811766aedb772", "b437bc0d04dc36f1f5b3592985b3e0a3d0af46b7c39199231706d19a4ee63344"] +pygments = ["5ffada19f6203563680669ee7f53b64dabbeb100eb51b61996085e99c03b284a", "e8218dd399a61674745138520d0d4cf2621d7e032439341bc3f647bff125818d", "71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127", "881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297"] pygments-github-lexers = ["0f9e9fb607d351c127a1e55e82a6eb491ed1fc11b2d6a0444ba217dc6d1f82c1", "aaca57e77cd6fcfce8d6ee97a998962eebf7fbb810519a8ebde427c62823e133"] pylev = ["063910098161199b81e453025653ec53556c1be7165a9b7c50be2f4d57eae1c3", "1d29a87beb45ebe1e821e7a3b10da2b6b2f4c79b43f482c2df1a1f748a6e114e"] pymdown-extensions = ["25b0a7967fa697b5035e23340a48594e3e93acb10b06d74574218ace3347d1df", "6cf0cf36b5a03b291ace22dc2f320f4789ce56fbdb6635a3be5fadbf5d7694dd"] @@ -1030,6 +950,7 @@ pytest-mock = ["43ce4e9dd5074993e7c021bb1c22cbb5363e612a2b5a76bc6d956775b10758b7 pytest-sugar = ["26cf8289fe10880cbbc130bd77398c4e6a8b936d8393b116a5c16121d95ab283", "fcd87a74b2bce5386d244b49ad60549bfbc4602527797fac167da147983f58ab"] pyyaml = ["1adecc22f88d38052fb787d959f003811ca858b799590a5eaa70e63dca50308c", "436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95", "460a5a4248763f6f37ea225d19d5c205677d8d525f6a83357ca622ed541830c2", "5a22a9c84653debfbf198d02fe592c176ea548cccce47553f35f466e15cf2fd4", "7a5d3f26b89d688db27822343dfa25c599627bc92093e788956372285c6298ad", "9372b04a02080752d9e6f990179a4ab840227c6e2ce15b95e1278456664cf2ba", "a5dcbebee834eaddf3fa7366316b880ff4062e4bcc9787b78c7fbb4a26ff2dd1", "aee5bab92a176e7cd034e57f46e9df9a9862a71f8f37cad167c6fc74c65f5b4e", "c51f642898c0bacd335fc119da60baae0824f2cde95b0330b56c0553439f0673", "c68ea4d3ba1705da1e0d85da6684ac657912679a649e8868bd850d2c299cce13", "e23d0cc5299223dcc37885dae624f382297717e459ea24053709675a976a3e19"] requests = ["502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e", "7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b", "11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", "9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"] +requests-mock = ["12e17c7ad1397fd1df5ead7727eb3f1bdc9fe1c18293b0492e0e01b57997e38d", "dc9e416a095ee7c3360056990d52e5611fb94469352fc1c2dc85be1ff2189146"] requests-toolbelt = ["42c9c170abc2cacb78b8ab23ac957945c7716249206f90874651971a4acff237", "f6a531936c6fa4c6cfce1b9c10d5c4f498d16528d2a54a22ca00011205a187b5"] scandir = ["2586c94e907d99617887daed6c1d102b5ca28f1085f90446554abf1faf73123e", "2ae41f43797ca0c11591c0c35f2f5875fa99f8797cb1a1fd440497ec0ae4b022", "2b8e3888b11abb2217a32af0766bc06b65cc4a928d8727828ee68af5a967fa6f", "2c712840c2e2ee8dfaf36034080108d30060d759c7b73a01a52251cc8989f11f", "4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae", "67f15b6f83e6507fdc6fca22fedf6ef8b334b399ca27c6b568cbfaa82a364173", "7d2d7a06a252764061a020407b997dd036f7bd6a175a5ba2b345f0a357f0b3f4", "8c5922863e44ffc00c5c693190648daa6d15e7c1207ed02d6f46a8dcc2869d32", "92c85ac42f41ffdc35b6da57ed991575bdbe69db895507af88b9f499b701c188", "b24086f2375c4a094a6b51e78b4cf7ca16c721dcee2eddd7aa6494b42d6d519d", "cb925555f43060a1745d0a321cca94bcea927c50114b623d73179189a4e100ac"] shellingham = ["77d37a4fd287c1e663006f7ecf1b9deca9ad492d0082587bd813c44eb49e4e62", "985b23bbd1feae47ca6a6365eacd314d93d95a8a16f8f346945074c28fe6f3e0"] From 03b81051a9339eda493147dd38c2ec1d05eb3b64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Dufresne?= Date: Thu, 30 May 2019 10:45:48 -0400 Subject: [PATCH 4/4] Fixed py27 compatibility for tests --- tests/repositories/test_legacy_repository.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/tests/repositories/test_legacy_repository.py b/tests/repositories/test_legacy_repository.py index 3b110f9dbcb..82c6b3f7028 100644 --- a/tests/repositories/test_legacy_repository.py +++ b/tests/repositories/test_legacy_repository.py @@ -1,10 +1,11 @@ -from unittest.mock import patch, mock_open +try: + from unittest.mock import mock_open +except ImportError: + from mock import mock_open import pytest -import shutil - import requests_mock - +import shutil try: import urllib.parse as urlparse @@ -288,15 +289,15 @@ def test_repo_get_http_error(): repo._get("/some-package") -def test_repo_download(): +def test_repo_download(mocker): repo = MockRepositoryWithSession() url = "http://foo.bar/some-package/some-package-0.1.tar.gz" dest = "/some/dest.tar.gz" content = b"content" - with requests_mock.Mocker() as m, patch( - "poetry.repositories.legacy_repository.open", mock_open() - ) as mock_file: + mock_file = mocker.patch("poetry.repositories.legacy_repository.open", mock_open()) + + with requests_mock.Mocker() as m: m.get(url, content=content) repo._download(url, dest) mock_file.assert_called_with(dest, "wb")