From 9c3ee2a72b11dab3f151b686896362e307d91c8b Mon Sep 17 00:00:00 2001 From: Dan Ryan Date: Fri, 5 Jul 2019 02:55:47 -0400 Subject: [PATCH] Get rid of devpi Signed-off-by: Dan Ryan --- Pipfile.lock | 324 +----------------------- pipenv/core.py | 221 +++++++--------- pytest.ini | 2 +- tests/integration/conftest.py | 117 ++------- tests/integration/test_install_basic.py | 10 +- tests/integration/test_lock.py | 10 +- 6 files changed, 117 insertions(+), 567 deletions(-) diff --git a/Pipfile.lock b/Pipfile.lock index f70c7ca1..b2586e8d 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "44189c3f4dc6499d20a5c0b5d1f875b0dc242943175e3e38a6e9719fc5860f7d" + "sha256": "f4d89c0aab5c4e865f8c96ba24613fb1e66bae803a3ceaeadb6abf0061898091" }, "pipfile-spec": 6, "requires": {}, @@ -37,29 +37,6 @@ ], "version": "==1.4.3" }, - "argon2-cffi": { - "hashes": [ - "sha256:1029fef2f7808a89e3baa306f5ace36e768a2d847ee7b056399adcd7707f6256", - "sha256:206857d870c6ca3c92514ca70a3c371be47383f7ae6a448f5a16aa17baa550ba", - "sha256:3558a7e22b886efad0c99b23b9be24880213b4e2d1630095459978cfcae570e2", - "sha256:457fd6de741859aa91c750ffad97f12675c4356047e43392c5fb21f5d9f48b24", - "sha256:4a1daa9f6960cdbdb865efcabac4158693459f52e7582c9f8a7c92dc61cdc8e1", - "sha256:4bfb603184ea678563c0f1f1872367e81a3d2b70646a627d38ccede68d7b9194", - "sha256:5d7493ed10e384b84b6dac862fe96c443297a25b991a8364d94a67b6cd1e9569", - "sha256:5fb080047517add8d27baeb38a314814b5ab9c72630606788909b3f60a8f054a", - "sha256:7453b16496b5629005a43c5f5707ef8a31fcfa5bb0ed34b5ba7b86a3cc9d02f2", - "sha256:81548a27b919861040cb928a350733f4f9455dd67c7d1ba92eb5960a1d7f8b26", - "sha256:84fd768d523f87097d572cdfb98e868cdbdc8e80e3d444787fd32e7f6ae25b02", - "sha256:8b4cf6c0298f33b92fcd50f19899175b7421690fc8bc6ac68368320c158cbf51", - "sha256:af6a4799411eee3f7133fead973727f5fefacd18ea23f51039e70cae51ceb109", - "sha256:df7d60a4cf58dc08319fedc0506b42ec0fa5221c6e1f9e2e89fcddff92507390", - "sha256:f9072e9f70185a57e36228d34aad4bb644e6a8b4fd6a45f856c666f38f6de96c", - "sha256:fbae1d08b52f9a791500c650ab51ba00e374eaeccb5dbaa41b99dab4fd4115e8", - "sha256:fe91e3bd95aeae70366693dcc970db03a71619d19df6fbaabf662c3b3c54cdf8", - "sha256:fec86ee6f913154846171f66ee30c893c0cde3d434911f8b31c1f84a9aea410e" - ], - "version": "==19.1.0" - }, "arpeggio": { "hashes": [ "sha256:a5258b84f76661d558492fa87e42db634df143685a0e51802d59cae7daad8732", @@ -135,39 +112,6 @@ ], "version": "==2019.6.16" }, - "cffi": { - "hashes": [ - "sha256:041c81822e9f84b1d9c401182e174996f0bae9991f33725d059b771744290774", - "sha256:046ef9a22f5d3eed06334d01b1e836977eeef500d9b78e9ef693f9380ad0b83d", - "sha256:066bc4c7895c91812eff46f4b1c285220947d4aa46fa0a2651ff85f2afae9c90", - "sha256:066c7ff148ae33040c01058662d6752fd73fbc8e64787229ea8498c7d7f4041b", - "sha256:2444d0c61f03dcd26dbf7600cf64354376ee579acad77aef459e34efcb438c63", - "sha256:300832850b8f7967e278870c5d51e3819b9aad8f0a2c8dbe39ab11f119237f45", - "sha256:34c77afe85b6b9e967bd8154e3855e847b70ca42043db6ad17f26899a3df1b25", - "sha256:46de5fa00f7ac09f020729148ff632819649b3e05a007d286242c4882f7b1dc3", - "sha256:4aa8ee7ba27c472d429b980c51e714a24f47ca296d53f4d7868075b175866f4b", - "sha256:4d0004eb4351e35ed950c14c11e734182591465a33e960a4ab5e8d4f04d72647", - "sha256:4e3d3f31a1e202b0f5a35ba3bc4eb41e2fc2b11c1eff38b362de710bcffb5016", - "sha256:50bec6d35e6b1aaeb17f7c4e2b9374ebf95a8975d57863546fa83e8d31bdb8c4", - "sha256:55cad9a6df1e2a1d62063f79d0881a414a906a6962bc160ac968cc03ed3efcfb", - "sha256:5662ad4e4e84f1eaa8efce5da695c5d2e229c563f9d5ce5b0113f71321bcf753", - "sha256:59b4dc008f98fc6ee2bb4fd7fc786a8d70000d058c2bbe2698275bc53a8d3fa7", - "sha256:73e1ffefe05e4ccd7bcea61af76f36077b914f92b76f95ccf00b0c1b9186f3f9", - "sha256:a1f0fd46eba2d71ce1589f7e50a9e2ffaeb739fb2c11e8192aa2b45d5f6cc41f", - "sha256:a2e85dc204556657661051ff4bab75a84e968669765c8a2cd425918699c3d0e8", - "sha256:a5457d47dfff24882a21492e5815f891c0ca35fefae8aa742c6c263dac16ef1f", - "sha256:a8dccd61d52a8dae4a825cdbb7735da530179fea472903eb871a5513b5abbfdc", - "sha256:ae61af521ed676cf16ae94f30fe202781a38d7178b6b4ab622e4eec8cefaff42", - "sha256:b012a5edb48288f77a63dba0840c92d0504aa215612da4541b7b42d849bc83a3", - "sha256:d2c5cfa536227f57f97c92ac30c8109688ace8fa4ac086d19d0af47d134e2909", - "sha256:d42b5796e20aacc9d15e66befb7a345454eef794fdb0737d1af593447c6c8f45", - "sha256:dee54f5d30d775f525894d67b1495625dd9322945e7fee00731952e0368ff42d", - "sha256:e070535507bd6aa07124258171be2ee8dfc19119c28ca94c9dfb7efd23564512", - "sha256:e1ff2748c84d97b065cc95429814cdba39bcbd77c9c85c89344b317dc0d9cbff", - "sha256:ed851c75d1e0e043cbf5ca9a8e1b13c4c90f3fbd863dacb01c0808e2b5204201" - ], - "version": "==1.12.3" - }, "chardet": { "hashes": [ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", @@ -221,27 +165,6 @@ ], "version": "==4.4.0" }, - "devpi-client": { - "hashes": [ - "sha256:05398402d4335a8173d9118df409d16e085a6dacf54300851212d2f6370e1497", - "sha256:e9e19e87c61a75bc93137553db69554c69efb82cfc7ee83e0305cf6abfc91aa0" - ], - "version": "==4.4.0" - }, - "devpi-common": { - "hashes": [ - "sha256:2c7a6471c0f5b07ac9257adec3b3c3a89193ee672fdeb0a6f29487dc9d675e0c", - "sha256:c743abd38447258e27cdb733fa905c275e5dd3eeae25bab9ff59182a1083ed91" - ], - "version": "==3.3.2" - }, - "devpi-server": { - "hashes": [ - "sha256:96ab6390ea8aa2e80b4acdcf8e37f105af6ce7d0cb4efa18ba82de8e8b6c91ad", - "sha256:e92de95c869927ba628d25b024c460b63740d52ebba11dae79146d8cc3b6a033" - ], - "version": "==4.9.0" - }, "docutils": { "hashes": [ "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6", @@ -276,13 +199,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.6.0" }, - "filelock": { - "hashes": [ - "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59", - "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836" - ], - "version": "==3.0.12" - }, "flake8": { "hashes": [ "sha256:859996073f341f2670741b51ec1e67a01da142831aa1fdc6242dbf88dffbe661", @@ -337,14 +253,6 @@ "markers": "python_version < '3.2'", "version": "==3.2.0" }, - "hupper": { - "hashes": [ - "sha256:5869ec2a46ba8ad481b0a27ca68f3e01dc7d3424925b7c872d9fcdff44b43442", - "sha256:8532d116fef1f89add74dbd8d5e6541cb3278b04f4fe9780a1356cb6adba1141" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.8.1" - }, "idna": { "hashes": [ "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", @@ -506,31 +414,6 @@ "ref": "a2ba0b30c86339cae5ef3a03046fc9c583452c40", "version": "==0.3.1.dev0" }, - "passlib": { - "extras": [ - "argon2" - ], - "hashes": [ - "sha256:3d948f64138c25633613f303bcc471126eae67c04d5e3f6b7b8ce6242f8653e0", - "sha256:43526aea08fa32c6b6dbbbe9963c4c767285b78147b7437597f992812f69d280" - ], - "version": "==1.7.1" - }, - "pastedeploy": { - "hashes": [ - "sha256:d423fb9d51fdcf853aa4ff43ac7ec469b643ea19590f67488122d6d0d772350a", - "sha256:fe53697ec2754703096b75d0ba29112b0590b4ce46726fe4f9408fd006e4eefc" - ], - "version": "==2.0.1" - }, - "path.py": { - "hashes": [ - "sha256:de7cd643affbc23e56533a6e8d551ecdee4983501a08c24e4e71565202d8cdaa", - "sha256:ea40833e76c50485fffd3e094d52e9e8701ba8c62a3b8f67c655c28a9538aac1" - ], - "index": "pypi", - "version": "==11.5.2" - }, "pathlib2": { "hashes": [ "sha256:25199318e8cc3c25dcb45cbe084cc061051336d5a9ea2a12448d3d8cb748f742", @@ -561,22 +444,6 @@ ], "version": "==1.5.0.1" }, - "plaster": { - "hashes": [ - "sha256:215c921a438b5349931fd7df9a5a11a3572947f20f4bc6dd622ac08f1c3ba249", - "sha256:8351c7c7efdf33084c1de88dd0f422cbe7342534537b553c49b857b12d98c8c3" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.0" - }, - "plaster-pastedeploy": { - "hashes": [ - "sha256:391d93a4e1ff81fc3bae27508ebb765b61f1724ae6169f83577f06b6357be7fd", - "sha256:7c8aa37c917b615c70bf942b24dc1e0455c49f62f1a2214b1a0dd98871644bbb" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==0.7" - }, "pluggy": { "hashes": [ "sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc", @@ -585,21 +452,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.12.0" }, - "psutil": { - "hashes": [ - "sha256:028a1ec3c6197eadd11e7b46e8cc2f0720dc18ac6d7aabdb8e8c0d6c9704f000", - "sha256:503e4b20fa9d3342bcf58191bbc20a4a5ef79ca7df8972e6197cc14c5513e73d", - "sha256:863a85c1c0a5103a12c05a35e59d336e1d665747e531256e061213e2e90f63f3", - "sha256:954f782608bfef9ae9f78e660e065bd8ffcfaea780f9f2c8a133bb7cb9e826d7", - "sha256:b6e08f965a305cd84c2d07409bc16fbef4417d67b70c53b299116c5b895e3f45", - "sha256:bc96d437dfbb8865fc8828cf363450001cb04056bbdcdd6fc152c436c8a74c61", - "sha256:cf49178021075d47c61c03c0229ac0c60d5e2830f8cab19e2d88e579b18cdb76", - "sha256:d5350cb66690915d60f8b233180f1e49938756fb2d501c93c44f8fb5b970cc63", - "sha256:eba238cf1989dfff7d483c029acb0ac4fcbfc15de295d682901f0e2497e6781a" - ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==5.6.3" - }, "py": { "hashes": [ "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa", @@ -616,12 +468,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.5.0" }, - "pycparser": { - "hashes": [ - "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3" - ], - "version": "==2.19" - }, "pyflakes": { "hashes": [ "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0", @@ -646,14 +492,6 @@ "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==2.4.0" }, - "pyramid": { - "hashes": [ - "sha256:51bf64647345237c00d2fe558935e0e4938c156e29f17e203457fd8e1d757dc7", - "sha256:d80ccb8cfa550139b50801591d4ca8a5575334adb493c402fce2312f55d07d66" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.10.4" - }, "pytest": { "hashes": [ "sha256:4a784f1d4f2ef198fe9b7aef793e9fa1a3b2f84e822d9b3a64a181293a572d45", @@ -662,24 +500,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==4.6.3" }, - "pytest-devpi-server": { - "hashes": [ - "sha256:1e1a4f4783f6833e49ae72956e68694b26de85e094d39c9cc6e5900774ecf2b9", - "sha256:a8f37e448d0a8c11c10f51b48a2bae4007431786223c39c3e22343e41f3aa8ee", - "sha256:c54e2ad77f9e2031d0284038b2bd1044debfcd1965be81c3d990df39e80503a3", - "sha256:d5e06acdd89966417d781d93cd08a2f1c21265bc06d5e4c1dd9309cdd0af988f" - ], - "version": "==1.7.0" - }, - "pytest-fixture-config": { - "hashes": [ - "sha256:1413e5e2c6572a3d7709de7ad69dc35004393d777a7883c8431b6f78a2e28fd0", - "sha256:41a17417721f6862ce6b40e3280fddd8e1659b2c306ec46b237d7021fec5218e", - "sha256:9bda6a817a3ac91a118dd42274cb3cc42dc0290a11317a7217d17eaae82800c5", - "sha256:a0e35e239e70fa12614bbe9ca51d3238fbeb89519deb80cd365b487665a666b0" - ], - "version": "==1.7.0" - }, "pytest-forked": { "hashes": [ "sha256:5fe33fbd07d7b1302c95310803a5e5726a4ff7f19d5a542b7ce57c76fed8135f", @@ -691,24 +511,6 @@ "editable": true, "path": "./tests/pytest-pypi" }, - "pytest-server-fixtures": { - "hashes": [ - "sha256:0fa5b1be6a84180e50ff91a58580e81ad3eb45828878a07942fbe384fcd86d1f", - "sha256:3d93f2ca4bb0a949a55cbdd3598fc44bc3199277dd6b31be39df7f7ebb7a3280", - "sha256:42a6020e60fd0c362dae0a594777b85e6b4a6d84ff3972ac3261e7de5f2f27fc", - "sha256:716e8911e0184d0fd41aa04c2980f04f7bf1d603d90d40de4817b8d6f7b5c7d6" - ], - "version": "==1.7.0" - }, - "pytest-shutil": { - "hashes": [ - "sha256:03c67282a0c520a790ca8db6f65e18851fae3786f45e3ae34e8d9fccbf266a72", - "sha256:343a6902a8ed0cbd29cf8954e2726382228a2ad2f5f7eac589b0d0dff878d806", - "sha256:b3568a675cb092c9b15c789ebd3046b79cfaca476868939748729d14557a98ff", - "sha256:d8165261de76e7508505c341d94c02b113dc963f274543abca74dbfabd021261" - ], - "version": "==1.7.0" - }, "pytest-tap": { "hashes": [ "sha256:3b05ec931424bbe44e944726b68f7ef185bb6d25ce9ce21ac52c9af7ffa9b506", @@ -724,14 +526,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==1.29.0" }, - "python-dateutil": { - "hashes": [ - "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", - "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==2.8.0" - }, "pytz": { "hashes": [ "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda", @@ -746,13 +540,6 @@ ], "version": "==24.0" }, - "repoze.lru": { - "hashes": [ - "sha256:0429a75e19380e4ed50c0694e26ac8819b4ea7851ee1fc7583c8572db80aff77", - "sha256:f77bf0e1096ea445beadd35f3479c5cff2aa1efe604a133e67150bc8630a62ea" - ], - "version": "==0.7" - }, "requests": { "hashes": [ "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", @@ -784,30 +571,6 @@ "index": "pypi", "version": "==0.14.0" }, - "ruamel.yaml": { - "hashes": [ - "sha256:17dbf6b7362e7aee8494f7a0f5cffd44902a6331fe89ef0853b855a7930ab845", - "sha256:23731c9efb79f3f5609dedffeb6c5c47a68125fd3d4b157d9fc71b1cd49076a9", - "sha256:2bbdd598ae57bac20968cf9028cc67d37d83bdb7942a94b9478110bc72193148", - "sha256:34586084cdd60845a3e1bece2b58f0a889be25450db8cc0ea143ddf0f40557a2", - "sha256:35957fedbb287b01313bb5c556ffdc70c0277c3500213b5e73dfd8716f748d77", - "sha256:414cb87a40974a575830b406ffab4ab8c6cbd82eeb73abd2a9d1397c1f0223e1", - "sha256:428775be75db68d908b17e4e8dda424c410222f170dc173246aa63e972d094b3", - "sha256:514f670f7d36519bda504d507edfe63e3c20489f86c86d42bc4d9a6dbdf82c7b", - "sha256:5cb962c1ac6887c5da29138fbbe3b4b7705372eb54e599907fa63d4cd743246d", - "sha256:5f6e30282cf70fb7754e1a5f101e27b5240009766376e131b31ab49f14fe81be", - "sha256:86f8e010af6af0b4f42de2d0d9b19cb441e61d3416082186f9dd03c8552d13ad", - "sha256:8d47ed1e557d546bd2dfe54f504d7274274602ff7a0652cde84c258ad6c2d96d", - "sha256:98668876720bce1ac08562d8b93a564a80e3397e442c7ea19cebdcdf73da7f74", - "sha256:9e1f0ddc18d8355dcf5586a5d90417df56074f237812b8682a93b62cca9d2043", - "sha256:a7bc812a72a79d6b7dbb96fa5bee3950464b65ec055d3abc4db6572f2373a95c", - "sha256:b72e13f9f206ee103247b07afd5a39c8b1aa98e8eba80ddba184d030337220ba", - "sha256:bcff8ea9d916789e85e24beed8830c157fb8bc7c313e554733a8151540e66c01", - "sha256:c76e78b3bab652069b8d6f7889b0e72f3455c2b854b2e0a8818393d149ad0a0d" - ], - "markers": "python_version >= '3.5'", - "version": "==0.15.97" - }, "scandir": { "hashes": [ "sha256:2586c94e907d99617887daed6c1d102b5ca28f1085f90446554abf1faf73123e", @@ -878,12 +641,6 @@ "markers": "sys_platform == 'linux'", "version": "==0.8.5" }, - "strictyaml": { - "hashes": [ - "sha256:06d7100587695a0edfabd772a6c6fb69071fc38c413df599e22dfd40e52f5fad" - ], - "version": "==1.0.1" - }, "tap.py": { "hashes": [ "sha256:8ad62ba6898fcef4913c67d468d0c4beae3109b74c03363538145e31b1840b29", @@ -912,14 +669,6 @@ ], "version": "==19.2.0" }, - "tox": { - "hashes": [ - "sha256:f5c8e446b51edd2ea97df31d4ded8c8b72e7d6c619519da6bb6084b9dd5770f9", - "sha256:f87fd33892a2df0950e5e034def9468988b8d008c7e9416be665fcc0dd45b14f" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==3.12.1" - }, "tqdm": { "hashes": [ "sha256:14a285392c32b6f8222ecfbcd217838f88e11630affe9006cd0e94c7eff3cb61", @@ -928,13 +677,6 @@ "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==4.32.2" }, - "translationstring": { - "hashes": [ - "sha256:4ee44cfa58c52ade8910ea0ebc3d2d84bdcad9fa0422405b1801ec9b9a65b72d", - "sha256:e26c7bf383413234ed442e0980a2ebe192b95e3745288a8fd2805156d27515b4" - ], - "version": "==1.3" - }, "twine": { "hashes": [ "sha256:0fb0bfa3df4f62076cab5def36b1a71a2e4acb4d1fa5c97475b048117b1a6446", @@ -960,13 +702,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' and python_version < '4'", "version": "==1.25.3" }, - "venusian": { - "hashes": [ - "sha256:2f2d077a1eedc3fda40425f65687c8c494da7e83d7c23bc2c4d1a40eb3ca5b6d", - "sha256:64ec8285b80b110d0ae5db4280e90e31848a59db98db1aba4d7d46f48ce91e3e" - ], - "version": "==1.2.0" - }, "virtualenv": { "hashes": [ "sha256:b7335cddd9260a3dd214b73a2521ffc09647bde3e9457fcca31dc3be3999d04a", @@ -983,13 +718,6 @@ "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.5.3" }, - "waitress": { - "hashes": [ - "sha256:4e2a6e6fca56d6d3c279f68a2b2cc9b4798d834ea3c3a9db3e2b76b6d66f4526", - "sha256:90fe750cd40b282fae877d3c866255d485de18e8a232e93de42ebd9fb750eebb" - ], - "version": "==1.3.0" - }, "wcwidth": { "hashes": [ "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e", @@ -1004,14 +732,6 @@ ], "version": "==0.5.1" }, - "webob": { - "hashes": [ - "sha256:05aaab7975e0ee8af2026325d656e5ce14a71f1883c52276181821d6d5bf7086", - "sha256:36db8203c67023d68c1b00208a7bf55e3b10de2aa317555740add29c619de12b" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==1.8.5" - }, "werkzeug": { "hashes": [ "sha256:865856ebb55c4dcd0630cdd8f3331a1847a819dda7e8c750d3db6f2aa6c0209c", @@ -1027,48 +747,6 @@ ], "markers": "python_version >= '2.7'", "version": "==0.5.1" - }, - "zope.deprecation": { - "hashes": [ - "sha256:0d453338f04bacf91bbfba545d8bcdf529aa829e67b705eac8c1a7fdce66e2df", - "sha256:f1480b74995958b24ce37b0ef04d3663d2683e5d6debc96726eff18acf4ea113" - ], - "version": "==4.4.0" - }, - "zope.interface": { - "hashes": [ - "sha256:086707e0f413ff8800d9c4bc26e174f7ee4c9c8b0302fbad68d083071822316c", - "sha256:1157b1ec2a1f5bf45668421e3955c60c610e31913cc695b407a574efdbae1f7b", - "sha256:11ebddf765bff3bbe8dbce10c86884d87f90ed66ee410a7e6c392086e2c63d02", - "sha256:14b242d53f6f35c2d07aa2c0e13ccb710392bcd203e1b82a1828d216f6f6b11f", - "sha256:1b3d0dcabc7c90b470e59e38a9acaa361be43b3a6ea644c0063951964717f0e5", - "sha256:20a12ab46a7e72b89ce0671e7d7a6c3c1ca2c2766ac98112f78c5bddaa6e4375", - "sha256:298f82c0ab1b182bd1f34f347ea97dde0fffb9ecf850ecf7f8904b8442a07487", - "sha256:2f6175722da6f23dbfc76c26c241b67b020e1e83ec7fe93c9e5d3dd18667ada2", - "sha256:3b877de633a0f6d81b600624ff9137312d8b1d0f517064dfc39999352ab659f0", - "sha256:4265681e77f5ac5bac0905812b828c9fe1ce80c6f3e3f8574acfb5643aeabc5b", - "sha256:550695c4e7313555549aa1cdb978dc9413d61307531f123558e438871a883d63", - "sha256:5f4d42baed3a14c290a078e2696c5f565501abde1b2f3f1a1c0a94fbf6fbcc39", - "sha256:62dd71dbed8cc6a18379700701d959307823b3b2451bdc018594c48956ace745", - "sha256:7040547e5b882349c0a2cc9b50674b1745db551f330746af434aad4f09fba2cc", - "sha256:7e099fde2cce8b29434684f82977db4e24f0efa8b0508179fce1602d103296a2", - "sha256:7e5c9a5012b2b33e87980cee7d1c82412b2ebabcb5862d53413ba1a2cfde23aa", - "sha256:81295629128f929e73be4ccfdd943a0906e5fe3cdb0d43ff1e5144d16fbb52b1", - "sha256:95cc574b0b83b85be9917d37cd2fad0ce5a0d21b024e1a5804d044aabea636fc", - "sha256:968d5c5702da15c5bf8e4a6e4b67a4d92164e334e9c0b6acf080106678230b98", - "sha256:9e998ba87df77a85c7bed53240a7257afe51a07ee6bc3445a0bf841886da0b97", - "sha256:a0c39e2535a7e9c195af956610dba5a1073071d2d85e9d2e5d789463f63e52ab", - "sha256:a15e75d284178afe529a536b0e8b28b7e107ef39626a7809b4ee64ff3abc9127", - "sha256:a6a6ff82f5f9b9702478035d8f6fb6903885653bff7ec3a1e011edc9b1a7168d", - "sha256:b639f72b95389620c1f881d94739c614d385406ab1d6926a9ffe1c8abbea23fe", - "sha256:bad44274b151d46619a7567010f7cde23a908c6faa84b97598fd2f474a0c6891", - "sha256:bbcef00d09a30948756c5968863316c949d9cedbc7aabac5e8f0ffbdb632e5f1", - "sha256:d788a3999014ddf416f2dc454efa4a5dbeda657c6aba031cf363741273804c6b", - "sha256:eed88ae03e1ef3a75a0e96a55a99d7937ed03e53d0cffc2451c208db445a2966", - "sha256:f99451f3a579e73b5dd58b1b08d1179791d49084371d9a47baad3b22417f0317" - ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", - "version": "==4.6.0" } } } diff --git a/pipenv/core.py b/pipenv/core.py index b5bad11a..49b27afe 100644 --- a/pipenv/core.py +++ b/pipenv/core.py @@ -37,14 +37,15 @@ from .utils import ( get_canonical_names, is_pinned, is_pypi_url, is_required_version, is_star, is_valid_url, parse_indexes, pep423_name, prepare_pip_source_args, proper_case, python_version, venv_resolve_deps, run_command, - is_python_command, find_python, make_posix, interrupt_handled_subprocess + is_python_command, find_python, make_posix, interrupt_handled_subprocess, + get_indexes_from_requirement, get_source_list, get_project_index, ) if is_type_checking(): - from typing import Dict, List, Mapping, Optional, Union + from typing import Dict, List, Mapping, Optional, Union, Text from pipenv.vendor.requirementslib.models.requirements import Requirement - TSourceDict = Dict[str, Union[str, bool]] + TSourceDict = Dict[Text, Union[Text, bool]] # Packages that should be ignored later. @@ -690,8 +691,10 @@ def _cleanup_procs(procs, failed_deps_queue, retry=True): def batch_install(deps_list, procs, failed_deps_queue, requirements_dir, no_deps=True, ignore_hashes=False, allow_global=False, blocking=False, pypi_mirror=None, - retry=True): + retry=True, sequential_deps=None): from .vendor.requirementslib.models.utils import strip_extras_markers_from_requirement + if sequential_deps is None: + sequential_deps = [] failed = (not retry) install_deps = not no_deps if not failed: @@ -699,31 +702,30 @@ def batch_install(deps_list, procs, failed_deps_queue, else: label = INSTALL_LABEL2 + deps_to_install = deps_list[:] + deps_to_install.extend(sequential_deps) + sequential_dep_names = [d.name for d in sequential_deps] + deps_list_bar = progress.bar( - deps_list, width=32, + deps_to_install, width=32, label=label ) + + indexes = [] trusted_hosts = [] # Install these because for dep in deps_list_bar: + extra_indexes = [] if dep.req.req: dep.req.req = strip_extras_markers_from_requirement(dep.req.req) if dep.markers: dep.markers = str(strip_extras_markers_from_requirement(dep.get_markers())) - index = None - if dep.index: - index = project.find_source(dep.index) - indexes.append(index) - if not index.get("verify_ssl", False): - trusted_hosts.append(urllib3_util.parse_url(index.get("url")).host) # Install the module. is_artifact = False if no_deps: link = getattr(dep.req, "link", None) - is_wheel = False - if link: - is_wheel = link.is_wheel + is_wheel = getattr(link, "is_wheel", False) if link else False if dep.is_file_or_url and (dep.is_direct_url or any( dep.req.uri.endswith(ext) for ext in ["zip", "tar.gz"] )): @@ -734,12 +736,6 @@ def batch_install(deps_list, procs, failed_deps_queue, install_deps = True no_deps = False - extra_indexes = [] - if not index and indexes: - index = next(iter(indexes)) - if len(indexes) > 1: - extra_indexes = indexes[1:] - with vistir.contextmanagers.temp_environ(): if not allow_global: os.environ["PIP_USER"] = vistir.compat.fs_str("0") @@ -754,7 +750,7 @@ def batch_install(deps_list, procs, failed_deps_queue, allow_global=allow_global, no_deps=not install_deps, block=any([dep.editable, dep.is_vcs, blocking]), - index=index, + index=dep.index, requirements_dir=requirements_dir, pypi_mirror=pypi_mirror, trusted_hosts=trusted_hosts, @@ -762,11 +758,13 @@ def batch_install(deps_list, procs, failed_deps_queue, use_pep517=not failed, ) c.dep = dep - if dep.is_vcs or dep.editable: + # if dep.is_vcs or dep.editable: + is_sequential = sequential_deps and dep.name in sequential_dep_names + if is_sequential: c.block() procs.put(c) - if procs.full() or procs.qsize() == len(deps_list): + if procs.full() or procs.qsize() == len(deps_list) or is_sequential: _cleanup_procs(procs, failed_deps_queue, retry=retry) @@ -834,20 +832,33 @@ def do_install_dependencies( failed_deps_queue = queue.Queue() if skip_lock: ignore_hashes = True - + editable_or_vcs_deps = [dep for dep in deps_list if (dep.editable or dep.vcs)] + normal_deps = [dep for dep in deps_list if not (dep.editable or dep.vcs)] install_kwargs = { "no_deps": no_deps, "ignore_hashes": ignore_hashes, "allow_global": allow_global, - "blocking": not concurrent, "pypi_mirror": pypi_mirror + "blocking": not concurrent, "pypi_mirror": pypi_mirror, + "sequential_deps": editable_or_vcs_deps } - # with project.environment.activated(): batch_install( - deps_list, procs, failed_deps_queue, requirements_dir, **install_kwargs + normal_deps, procs, failed_deps_queue, requirements_dir, **install_kwargs ) if not procs.empty(): _cleanup_procs(procs, failed_deps_queue) + # click.echo(crayons.normal( + # decode_for_output("Installing editable and vcs dependencies…"), bold=True + # )) + + # install_kwargs.update({"blocking": True}) + # # XXX: All failed and editable/vcs deps should be installed in sequential mode! + # procs = queue.Queue(maxsize=1) + # batch_install( + # editable_or_vcs_deps, procs, failed_deps_queue, requirements_dir, + # **install_kwargs + # ) + # Iterate over the hopefully-poorly-packaged dependencies… if not failed_deps_queue.empty(): click.echo( @@ -857,10 +868,7 @@ def do_install_dependencies( while not failed_deps_queue.empty(): failed_dep = failed_deps_queue.get() retry_list.append(failed_dep) - install_kwargs.update({ - "retry": False, - "blocking": True, - }) + install_kwargs.update({"retry": False}) batch_install( retry_list, procs, failed_deps_queue, requirements_dir, **install_kwargs ) @@ -1323,54 +1331,6 @@ def get_pip_args( return list(vistir.misc.dedup(arg_set)) -def get_project_index(index=None, trusted_hosts=None): - # type: (Optional[Union[str, TSourceDict]], Optional[List[str]]) -> TSourceDict - from .vendor.urllib3.util import parse_url - if trusted_hosts is None: - trusted_hosts = [] - if isinstance(index, vistir.compat.Mapping): - return index - try: - source = project.find_source(index) - except SourceNotFound: - index_url = parse_url(index) - src_name = project.src_name_from_url(index) - verify_ssl = index_url.host not in trusted_hosts - source = {"url": index, "verify_ssl": verify_ssl, "name": src_name} - return source - - -def get_source_list( - index=None, # type: Optional[Union[str, TSourceDict]] - extra_indexes=None, # type: Optional[List[str]] - trusted_hosts=None, # type: Optional[List[str]] - pypi_mirror=None, # type: Optional[str] -): - # type: (...) -> List[TSourceDict] - sources = [] # type: List[TSourceDict] - if index: - sources.append(get_project_index(index)) - if extra_indexes: - if isinstance(extra_indexes, six.string_types): - extra_indexes = [extra_indexes,] - for source in extra_indexes: - extra_src = get_project_index(source) - if not sources or extra_src["url"] != sources[0]["url"]: - sources.append(extra_src) - else: - for source in project.pipfile_sources: - if not sources or source["url"] != sources[0]["url"]: - sources.append(source) - if not sources: - sources = project.pipfile_sources - if pypi_mirror: - sources = [ - create_mirror_source(pypi_mirror) if is_pypi_url(source["url"]) else source - for source in sources - ] - return sources - - def get_requirement_line( requirement, # type: Requirement src_dir=None, # type: Optional[str] @@ -1452,8 +1412,7 @@ def pip_install( trusted_hosts.extend(os.environ.get("PIP_TRUSTED_HOSTS", [])) if not allow_global: - src_dir = project.virtualenv_src_location - # src_dir = os.getenv("PIP_SRC", os.getenv("PIP_SRC_DIR", project.virtualenv_src_location)) + src_dir = os.getenv("PIP_SRC", os.getenv("PIP_SRC_DIR", project.virtualenv_src_location)) else: src_dir = os.getenv("PIP_SRC", os.getenv("PIP_SRC_DIR")) if requirement: @@ -1462,16 +1421,26 @@ def pip_install( elif not (requirement.is_vcs or requirement.editable or requirement.vcs): ignore_hashes = False line = None - if requirement.vcs: - line = requirement.line_instance.get_line( - with_prefix=True, with_hashes=False, with_markers=True, as_list=True - ) - else: - r = write_requirement_to_file( - requirement, requirements_dir=requirements_dir, src_dir=src_dir, - include_hashes=not ignore_hashes - ) # Try installing for each source in project.sources. + if not index and requirement.index: + index = requirement.index + if index and not extra_indexes: + extra_indexes = list(project.sources) + if requirement and requirement.vcs or requirement.editable: + requirement.index = None + # Install dependencies when a package is a non-editable VCS dependency. + # Don't specify a source directory when using --system. + if not requirement.editable and no_deps is not True: + # Leave this off becauase old lockfiles don't have all deps included + # TODO: When can it be turned back on? + no_deps = False + elif requirement.editable and no_deps is None: + no_deps = True + + r = write_requirement_to_file( + requirement, requirements_dir=requirements_dir, src_dir=src_dir, + include_hashes=not ignore_hashes + ) sources = get_source_list( index, extra_indexes=extra_indexes, trusted_hosts=trusted_hosts, pypi_mirror=pypi_mirror @@ -1481,22 +1450,13 @@ def pip_install( if "--hash" not in fh.read(): ignore_hashes = True if environments.is_verbose(): - piplogger.setLevel(logging.INFO) + piplogger.setLevel(logging.WARN) if requirement: click.echo( crayons.normal("Installing {0!r}".format(requirement.name), bold=True), err=True, ) - if requirement and requirement.vcs: - # Install dependencies when a package is a non-editable VCS dependency. - # Don't specify a source directory when using --system. - if not requirement.editable and no_deps is not True: - # Leave this off becauase old lockfiles don't have all deps included - # TODO: When can it be turned back on? - no_deps = False - elif requirement.editable and no_deps is None: - no_deps = True pip_command = [which_pip(allow_global=allow_global), "install"] pip_args = get_pip_args( pre=pre, verbose=environments.is_verbose(), upgrade=True, @@ -2068,7 +2028,7 @@ def do_install( from .vendor.requirementslib.models.requirements import Requirement # make a tuple of (display_name, entry) - pkg_list = packages + ["-e {0}".format(pkg) for pkg in editable_packages] + pkg_list = packages + ['-e {0}'.format(pkg) for pkg in editable_packages] if not system and not project.virtualenv_exists: do_init( dev=dev, @@ -2123,21 +2083,33 @@ def do_install( pypi_mirror=pypi_mirror, ) if not c.ok: - sp.write_err(vistir.compat.fs_str( - "{0}: {1}".format( - crayons.red("WARNING"), - "Failed installing package {0}".format(pkg_line) + sp.write_err(u"{0}: {1}".format( + crayons.red("WARNING"), + vistir.compat.fs_str("Failed installing package {0}".format(pkg_line))) + ) + sp.write_err( + vistir.compat.fs_str(u"Error text: {0}".format(c.out)) + ) + sp.write_err( + vistir.compat.fs_str(u"{0}".format(c.err)) + ) + sp.write_err( + u"{0} An error occurred while installing {1}!".format( + crayons.red(u"Error: ", bold=True), crayons.green(pkg_line) ), - )) - sp.write_err(vistir.compat.fs_str( - "Error text: {0}".format(c.out) - )) - sp.write_err(vistir.compat.fs_str( - "{0}".format(c.err) - )) - raise RuntimeError(c.err) - if environments.is_verbose(): - click.echo(crayons.blue(format_pip_output(c.out))) + ) + sp.write_err(crayons.blue(vistir.compat.fs_str(format_pip_error(c.err)))) + if environments.is_verbose(): + sp.write_err(crayons.blue(vistir.compat.fs_str(format_pip_output(c.out)))) + if "setup.py egg_info" in c.err: + sp.write_err(vistir.compat.fs_str( + "This is likely caused by a bug in {0}. " + "Report this to its maintainers.".format( + crayons.green(pkg_requirement.name) + ) + )) + sp.red.fail(environments.PIPENV_SPINNER_FAIL_TEXT.format("Installation Failed")) + sys.exit(1) except (ValueError, RuntimeError) as e: sp.write_err(vistir.compat.fs_str( "{0}: {1}".format(crayons.red("WARNING"), e), @@ -2145,7 +2117,7 @@ def do_install( sp.red.fail(environments.PIPENV_SPINNER_FAIL_TEXT.format( "Installation Failed", )) - # sys.exit(1) + sys.exit(1) # Warn if --editable wasn't passed. if pkg_requirement.is_vcs and not pkg_requirement.editable and not PIPENV_RESOLVE_VCS: sp.write_err( @@ -2157,23 +2129,6 @@ def do_install( crayons.red("$ pipenv lock"), ) ) - # Ensure that package was successfully installed. - if c.return_code != 0: - sp.write_err(vistir.compat.fs_str( - "{0} An error occurred while installing {1}!".format( - crayons.red("Error: ", bold=True), crayons.green(pkg_line) - ), - )) - sp.write_err(vistir.compat.fs_str(crayons.blue(format_pip_error(c.err)))) - if "setup.py egg_info" in c.err: - sp.write_err(vistir.compat.fs_str( - "This is likely caused by a bug in {0}. " - "Report this to its maintainers.".format( - crayons.green(pkg_requirement.name) - ) - )) - sp.fail(environments.PIPENV_SPINNER_FAIL_TEXT.format("Installation Failed")) - sys.exit(1) sp.write(vistir.compat.fs_str( u"{0} {1} {2} {3}{4}".format( crayons.normal(u"Adding", bold=True), diff --git a/pytest.ini b/pytest.ini index 8bbd0208..da966ec9 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,6 +1,6 @@ [pytest] addopts = -ra -n auto -plugins = pytest_devpi_server xdist +plugins = xdist testpaths = tests ; Add vendor and patched in addition to the default list of ignored dirs ; Additionally, ignore tasks, news, test subdirectories and peeps directory diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index e5088d19..3579cd84 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -24,8 +24,7 @@ from pipenv.vendor.vistir.path import mkdir_p, create_tracked_tempdir, handle_re from pipenv._compat import Path from pipenv.exceptions import VirtualenvActivationException from pipenv.vendor import delegator, toml, tomlkit -from pytest_pypi.app import prepare_fixtures -from _pytest_devpi_server import DevpiServer as _DevpiServer +from pytest_pypi.app import prepare_fixtures, prepare_packages as prepare_pypi_packages log = logging.getLogger(__name__) warnings.simplefilter("default", category=ResourceWarning) @@ -43,78 +42,6 @@ class ServerNotDead(Exception): pass -class DevpiServer(_DevpiServer): - - term_signal = signal.SIGTERM if not os.name == "nt" else signal.CTRL_C_EVENT - kill_signal = signal.SIGKILL if not os.name == "nt" else signal.CTRL_BREAK_EVENT - - def _find_and_kill(self, retries, signal): - log.debug("Killing server running at {}:{} using signal {}".format(self.hostname, self.port, signal)) - for _ in range(retries): - cd_path = "/" - pids = [] - netstat_cmd = "" - if sys.platform == "darwin": - netstat_cmd = "lsof -n -i:{} | grep LISTEN | awk '{{ print $2 }}'".format(self.port) - elif sys.platform == "linux": - netstat_cmd = ("netstat -anp 2>/dev/null | grep %s:%s | grep LISTEN | " - "awk '{ print $7 }' | cut -d'/' -f1" % (socket.gethostbyname(self.hostname), self.port)) - else: - procs = self.run("tasklist /NH /FI devpi-server.exe", capture=True) - pids = [ - task.strip().split()[1] for task in procs.strip().splitlines() - if "No tasks are running" not in task.strip() - ] - if netstat_cmd: - pids = [ - p.strip() for p in - self.run(netstat_cmd, capture=True, cd=cd_path).split('\n') - if p.strip() - ] - - if not pids: - # No PIDs remaining, server has died. - break - - for pid in pids: - try: - pid = int(pid) - except ValueError: - log.error("Can't determine port, process shutting down or owned by someone else") - else: - try: - os.kill(pid, signal) - except OSError as oe: - if oe.errno == errno.ESRCH: # Process doesn't appear to exist. - log.error("For some reason couldn't find PID {} to kill.".format(p)) - else: - raise - self.run("taskkill /f /pid %s" % pid, capture=False, check_rc=False) - time.sleep(self.kill_retry_delay) - else: - raise ServerNotDead("Server not dead after %d retries" % retries) - - def kill(self, retries=5): - """Kill all running versions of this server. - Just killing the thread.server pid isn't good enough, it may have spawned children. - """ - # Prevent traceback printed when the server goes away as we kill it - if self.server: - self.server.exit = True - - if self.dead: - return - - try: - self._find_and_kill(retries, self.term_signal) - except ServerNotDead: - log.error("Server not dead after %d retries, trying with SIGKILL" % retries) - try: - self._find_and_kill(retries, self.kill_signal) - except ServerNotDead: - log.error("Server still not dead, giving up") - - def check_internet(): has_internet = False for url in ("http://httpbin.org/ip", "http://clients3.google.com/generate_204"): @@ -174,18 +101,7 @@ TESTS_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) PYPI_VENDOR_DIR = os.path.join(TESTS_ROOT, 'pypi') WE_HAVE_HG = check_for_mercurial() prepare_fixtures(os.path.join(PYPI_VENDOR_DIR, "fixtures")) - - -@pytest.fixture(scope="session") -def pipenv_devpi_server(): - with DevpiServer(offline=False) as server: - server.start() - server.api("index", "-c", "pipenv", "bases=root/pypi", "volatile=False") - server.index = "pipenv" - for path in Path(PYPI_VENDOR_DIR).iterdir(): - if path.is_dir(): - server.api("upload", "--from-dir", path.as_posix()) - yield server +prepare_pypi_packages(PYPI_VENDOR_DIR) def pytest_runtest_setup(item): @@ -263,7 +179,7 @@ def isolate(create_tmpdir): fp.write( b"[user]\n\tname = pipenv\n\temail = pipenv@pipenv.org\n" ) - os.environ["GIT_CONFIG"] = fs_str(git_config_file) + # os.environ["GIT_CONFIG"] = fs_str(git_config_file) os.environ["GIT_CONFIG_NOSYSTEM"] = fs_str("1") os.environ["GIT_AUTHOR_NAME"] = fs_str("pipenv") os.environ["GIT_AUTHOR_EMAIL"] = fs_str("pipenv@pipenv.org") @@ -409,7 +325,7 @@ class _PipenvInstance(object): self.pipfile_path = None self.chdir = chdir - if self.pypi: + if self.pypi and "PIPENV_PYPI_URL" not in os.environ: os.environ['PIPENV_PYPI_URL'] = fs_str('{0}'.format(self.pypi)) # os.environ['PIPENV_PYPI_URL'] = fs_str('{0}'.format(self.pypi.url)) # os.environ['PIPENV_TEST_INDEX'] = fs_str('{0}/simple'.format(self.pypi.url)) @@ -512,16 +428,17 @@ def pip_src_dir(request, vistir_tmpdir): @pytest.fixture() -def PipenvInstance(pip_src_dir, monkeypatch, pipenv_devpi_server, pypi): +def PipenvInstance(pip_src_dir, monkeypatch, pypi): with temp_environ(), monkeypatch.context() as m: m.setattr(shutil, "rmtree", _rmtree_func) original_umask = os.umask(0o007) - os.environ["PIPENV_NOSPIN"] = fs_str("1") - os.environ["CI"] = fs_str("1") - os.environ['PIPENV_DONT_USE_PYENV'] = fs_str('1') - os.environ["PIPENV_TEST_INDEX"] = "{0}/{1}/{2}/+simple".format(pipenv_devpi_server.uri, pipenv_devpi_server.user, pipenv_devpi_server.index) - os.environ["PIPENV_PYPI_INDEX"] = pipenv_devpi_server.index - os.environ["ARTIFACT_PYPI_URL"] = pypi.url + m.setenv("PIPENV_NOSPIN", fs_str("1")) + m.setenv("CI", fs_str("1")) + m.setenv('PIPENV_DONT_USE_PYENV', fs_str('1')) + m.setenv("PIPENV_TEST_INDEX", "{0}/simple".format(pypi.url)) + m.setenv("PIPENV_PYPI_INDEX", "simple") + m.setenv("ARTIFACT_PYPI_URL", pypi.url) + m.setenv("PIPENV_PYPI_URL", pypi.url) warnings.simplefilter("ignore", category=ResourceWarning) warnings.filterwarnings("ignore", category=ResourceWarning, message="unclosed.*") try: @@ -531,13 +448,15 @@ def PipenvInstance(pip_src_dir, monkeypatch, pipenv_devpi_server, pypi): @pytest.fixture() -def PipenvInstance_NoPyPI(monkeypatch, pip_src_dir): +def PipenvInstance_NoPyPI(monkeypatch, pip_src_dir, pypi): with temp_environ(), monkeypatch.context() as m: m.setattr(shutil, "rmtree", _rmtree_func) original_umask = os.umask(0o007) - os.environ["PIPENV_NOSPIN"] = fs_str("1") - os.environ["CI"] = fs_str("1") - os.environ['PIPENV_DONT_USE_PYENV'] = fs_str('1') + m.setenv("PIPENV_NOSPIN", fs_str("1")) + m.setenv("CI", fs_str("1")) + m.setenv('PIPENV_DONT_USE_PYENV', fs_str('1')) + m.setenv("PIPENV_TEST_INDEX", "{0}/simple".format(pypi.url)) + m.setenv("ARTIFACT_PYPI_URL", pypi.url) warnings.simplefilter("ignore", category=ResourceWarning) warnings.filterwarnings("ignore", category=ResourceWarning, message="unclosed.*") try: diff --git a/tests/integration/test_install_basic.py b/tests/integration/test_install_basic.py index 6d9f1368..c2709f85 100644 --- a/tests/integration/test_install_basic.py +++ b/tests/integration/test_install_basic.py @@ -348,7 +348,7 @@ def test_install_does_not_extrapolate_environ(PipenvInstance): f.write( """ [[source]] -url = '${PYPI_URL}/${PIPENV_PYPI_INDEX}/+simple' +url = '${PYPI_URL}/simple' verify_ssl = true name = 'mockpi' """ @@ -357,14 +357,14 @@ name = 'mockpi' # Ensure simple install does not extrapolate. c = p.pipenv("install") assert c.return_code == 0 - assert p.pipfile["source"][0]["url"] == "${PYPI_URL}/${PIPENV_PYPI_INDEX}/+simple" - assert p.lockfile["_meta"]["sources"][0]["url"] == "${PYPI_URL}/${PIPENV_PYPI_INDEX}/+simple" + assert p.pipfile["source"][0]["url"] == "${PYPI_URL}/simple" + assert p.lockfile["_meta"]["sources"][0]["url"] == "${PYPI_URL}/simple" # Ensure package install does not extrapolate. c = p.pipenv("install six") assert c.return_code == 0 - assert p.pipfile["source"][0]["url"] == "${PYPI_URL}/${PIPENV_PYPI_INDEX}/+simple" - assert p.lockfile["_meta"]["sources"][0]["url"] == "${PYPI_URL}/${PIPENV_PYPI_INDEX}/+simple" + assert p.pipfile["source"][0]["url"] == "${PYPI_URL}/simple" + assert p.lockfile["_meta"]["sources"][0]["url"] == "${PYPI_URL}/simple" @pytest.mark.editable diff --git a/tests/integration/test_lock.py b/tests/integration/test_lock.py index a69d580e..4c227395 100644 --- a/tests/integration/test_lock.py +++ b/tests/integration/test_lock.py @@ -393,16 +393,15 @@ def test_lock_updated_source(PipenvInstance): with open(p.pipfile_path, 'w') as f: contents = """ [[source]] -url = "{url}/${{MY_ENV_VAR}}/+simple" +url = "{url}/${{MY_ENV_VAR}}" [packages] requests = "==2.14.0" """.strip().format(url=p.pypi) - # """.strip().format(url=pypi.url) f.write(contents) with temp_environ(): - os.environ['MY_ENV_VAR'] = p.index + os.environ['MY_ENV_VAR'] = 'simple' c = p.pipenv('lock') assert c.return_code == 0 assert 'requests' in p.lockfile['default'] @@ -410,12 +409,11 @@ requests = "==2.14.0" with open(p.pipfile_path, 'w') as f: contents = """ [[source]] -url = "{url}" +url = "{url}/simple" [packages] requests = "==2.14.0" - """.strip().format(url=p.index_url) - # """.strip().format(url=pypi.url) + """.strip().format(url=p.pypi) f.write(contents) c = p.pipenv('lock')