Poetry cannot publish artifacts anymore due to auto update to requests 2.30.0

When doing a publish of an artifact with poetry, it suddenly starts failing due to requests 2.30.0.


`poetry publish -vvv -r $REPOSITRY -u $USERNAME -p $PASSWORD`

## Expected Result

The artifact build in poetry get's published on artifactory.

```
Loading configuration file /opt/app-root/.config/pypoetry/config.toml
Adding repository default-pypi (https://artifactory/artifactory/api/pypi/pypi/simple) and setting it as the default one
Adding repository my-pypi (https://artifactory/artifactory/api/pypi/my-pypi/simple) and setting it as secondary
Deactivating the PyPI repository
Publishing my_artifact (0.2.0) to artifactory
 - Uploading my_artifact-0.2.0-py3-none-any.whl 0%[urllib3.connectionpool] Starting new HTTPS connection (1): artifactory:443
 - Uploading my_artifact-0.2.0-py3-none-any.whl 100%[urllib3.connectionpool] https://artifactory:443 "POST /artifactory/api/pypi/my-pypi HTTP/1.1" 200 0
 - Uploading my_artifact-0.2.0.tar.gz 0%
 - Uploading my_artifact-0.2.0.tar.gz 100%[urllib3.connectionpool] https://artifactory:443 "POST /artifactory/api/pypi/my-pypi HTTP/1.1" 200 0
```

## Actual Result

'poetry install -vv
Using virtualenv: /opt/app-root
Installing dependencies from lock file
Finding the necessary packages for the current system
Package operations: 59 installs, 3 updates, 0 removals, 11 skipped
  • Installing markupsafe (2.1.2)
  • Installing pyparsing (3.0.9)
  • Installing sniffio (1.3.0)
  • Updating urllib3 (1.26.15 -> 2.0.2)
  • Installing alabaster (0.7.13)
  • Installing anyio (3.6.2)
  • Installing babel (2.12.1)
  • Installing docutils (0.17.1)
  • Installing exceptiongroup (1.1.1)
  • Installing h11 (0.14.0)
  • Installing imagesize (1.4.1)
  • Installing iniconfig (2.0.0)
  • Installing jinja2 (3.1.2)
  • Installing lazy-object-proxy (1.9.0)
  • Installing mccabe (0.6.1)
  • Installing pluggy (1.0.0)
  • Installing pycodestyle (2.7.0)
  • Installing pydot (1.4.2)
  • Installing pyflakes (2.3.1)
  • Installing pygments (2.15.1)
  • Updating requests (2.29.0 -> 2.30.0)
  • Installing snowballstemmer (2.2.0)
  • Installing sphinxcontrib-applehelp (1.0.4)
  • Installing sphinxcontrib-devhelp (1.0.2)
  • Installing sphinxcontrib-htmlhelp (2.0.1)
  • Installing sphinxcontrib-jsmath (1.0.1)
  • Installing sphinxcontrib-qthelp (1.0.3)
  • Installing sphinxcontrib-serializinghtml (1.1.5)
  • Installing typing-extensions (4.5.0)
  • Installing wrapt (1.15.0)
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
  • Installing astmonkey (0.3.6)
  • Installing astroid (2.15.4)
  • Installing click (8.1.3)
  • Installing coverage (6.5.0)
  • Installing dill (0.3.6)
  • Installing flake8 (3.9.2)
  • Installing httpcore (0.17.0)
  • Installing isort (5.12.0)
  • Installing mypy-extensions (1.0.0)
  • Installing pathspec (0.11.1)
  • Updating platformdirs (2.6.2 -> 3.5.0)
  • Installing pytest (7.3.1)
  • Installing pyyaml (6.0)
  • Installing sphinx (4.5.0)
  • Installing termcolor (2.3.0)
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
[urllib3.connectionpool] Connection pool is full, discarding connection: artifactory. Connection pool size: 10
  • Installing assertpy (1.1)
  • Installing black (22.3.0)
  • Installing bump2version (1.0.1): Skipped for the following reason: Already installed
  • Installing certifi (2022.12.7): Skipped for the following reason: Already installed
  • Installing charset-normalizer (3.1.0): Skipped for the following reason: Already installed
  • Installing gitchangelog (3.0.4): Skipped for the following reason: Already installed
  • Installing httpx (0.24.0)
  • Installing ict-utils (0.1.1)
  • Installing idna (3.4): Skipped for the following reason: Already installed
  • Installing importlib-metadata (6.6.0): Skipped for the following reason: Already installed
  • Installing invoke (1.7.3)
  • Installing mockito (1.4.0)
  • Installing mutpy (0.6.1)
  • Installing mypy (0.971)
  • Installing nose2 (0.12.0)
  • Installing packaging (23.1): Skipped for the following reason: Already installed
  • Installing pallets-sphinx-themes (2.1.0)
  • Installing ping3 (2.9.3)
  • Installing pylint (2.17.3)
  • Installing pyproject-flake8 (0.0.1a5)
  • Installing pystache (0.6.0): Skipped for the following reason: Already installed
  • Installing pytest-cov (3.0.0)
  • Installing pytest-sugar (0.9.7)
  • Installing tomli (2.0.1): Skipped for the following reason: Already installed
  • Installing tomlkit (0.11.8): Skipped for the following reason: Already installed
  • Installing types-six (1.16.21.8)
  • Installing zipp (3.15.0): Skipped for the following reason: Already installed
Connection pool is full, discarding connection: artifactory. Connection pool size: 10
Connection pool is full, discarding connection: artifactory. Connection pool size: 10
Connection pool is full, discarding connection: artifactory. Connection pool size: 10
Connection pool is full, discarding connection: artifactory. Connection pool size: 10
Connection pool is full, discarding connection: artifactory. Connection pool size: 10
Warning: The file chosen for install of requests 2.30.0 (requests-2.30.0-py3-none-any.whl) is yanked. Reason for being yanked: Broken responses when reading compressed content through urllib3
Installing the current project:my_artifact (0.2.0)
ImportError
  cannot import name 'appengine' from 'requests.packages.urllib3.contrib' (/opt/app-root/lib64/python3.9/site-packages/urllib3/contrib/__init__.py)
  at /opt/app-root/lib64/python3.9/site-packages/requests_toolbelt/_compat.py:48 in <module>
       44│ if requests.__build__ < 0x021000:
       45│     gaecontrib = None
       46│ else:
       47│     try:
    →  48│         from requests.packages.urllib3.contrib import appengine as gaecontrib
       49│     except ImportError:
       50│         from urllib3.contrib import appengine as gaecontrib
       51│ 
       52│ PY3 = sys.version_info > (3, 0)
The following error occurred when trying to handle this error:
  Stack trace:
  14  /opt/app-root/lib64/python3.9/site-packages/cleo/application.py:327 in run
       325│ 
       326│             try:
     → 327│                 exit_code = self._run(io)
       328│             except BrokenPipeError:
       329│                 # If we are piped to another process, it may close early and send a
  13  /opt/app-root/lib64/python3.9/site-packages/poetry/console/application.py:190 in _run
       188│         self._load_plugins(io)
       189│ 
     → 190│         exit_code: int = super()._run(io)
       191│         return exit_code
       192│ 
  12  /opt/app-root/lib64/python3.9/site-packages/cleo/application.py:431 in _run
       429│             io.input.interactive(interactive)
       430│ 
     → 431│         exit_code = self._run_command(command, io)
       432│         self._running_command = None
       433│ 
  11  /opt/app-root/lib64/python3.9/site-packages/cleo/application.py:473 in _run_command
       471│ 
       472│         if error is not None:
     → 473│             raise error
       474│ 
       475│         return terminate_event.exit_code
  10  /opt/app-root/lib64/python3.9/site-packages/cleo/application.py:457 in _run_command
       [455](https://git/business-intelligence/modules/ict-proxy/-/jobs/743695#L455)│ 
       456│             if command_event.command_should_run():
     → 457│                 exit_code = command.run(io)
       458│             else:
       459│                 exit_code = ConsoleCommandEvent.RETURN_CODE_DISABLED
   9  /opt/app-root/lib64/python3.9/site-packages/cleo/commands/base_command.py:119 in run
       117│         io.input.validate()
       118│ 
     → 119│         status_code = self.execute(io)
       120│ 
       121│         if status_code is None:
   8  /opt/app-root/lib64/python3.9/site-packages/cleo/commands/command.py:62 in execute
        60│ 
        61│         try:
     →  62│             return self.handle()
        63│         except KeyboardInterrupt:
        64│             return 1
   7  /opt/app-root/lib64/python3.9/site-packages/poetry/console/commands/publish.py:50 in handle
        48│ 
        49│     def handle(self) -> int:
     →  50│         from poetry.publishing.publisher import Publisher
        51│ 
        52│         publisher = Publisher(self.poetry, self.io)
   6  /opt/app-root/lib64/python3.9/site-packages/poetry/publishing/__init__.py:3 in <module>
         1│ from __future__ import annotations
         2│ 
     →   3│ from poetry.publishing.publisher import Publisher
         4│ 
         5│ 
   5  /opt/app-root/lib64/python3.9/site-packages/poetry/publishing/publisher.py:7 in <module>
         5│ from typing import TYPE_CHECKING
         6│ 
     →   7│ from poetry.publishing.uploader import Uploader
         8│ from poetry.utils.authenticator import Authenticator
         9│ 
   4  /opt/app-root/lib64/python3.9/site-packages/poetry/publishing/uploader.py:17 in <module>
        15│ from requests.exceptions import ConnectionError
        16│ from requests.exceptions import HTTPError
     →  17│ from requests_toolbelt import user_agent
        18│ from requests_toolbelt.multipart import MultipartEncoder
        19│ from requests_toolbelt.multipart import MultipartEncoderMonitor
   3  /opt/app-root/lib64/python3.9/site-packages/requests_toolbelt/__init__.py:12 in <module>
        10│ """
        11│ 
     →  12│ from .adapters import SSLAdapter, SourceAddressAdapter
        13│ from .auth.guess import GuessAuth
        14│ from .multipart import (
   2  /opt/app-root/lib64/python3.9/site-packages/requests_toolbelt/adapters/__init__.py:12 in <module>
        10│ """
        11│ 
     →  12│ from .ssl import SSLAdapter
        13│ from .source import SourceAddressAdapter
        14│ 
   1  /opt/app-root/lib64/python3.9/site-packages/requests_toolbelt/adapters/ssl.py:16 in <module>
        14│ from requests.adapters import HTTPAdapter
        15│ 
     →  16│ from .._compat import poolmanager
        17│ 
        18│ 
  ImportError
  cannot import name 'appengine' from 'urllib3.contrib' (/opt/app-root/lib64/python3.9/site-packages/urllib3/contrib/__init__.py)
  at /opt/app-root/lib64/python3.9/site-packages/requests_toolbelt/_compat.py:50 in <module>
       46│ else:
       47│     try:
       48│         from requests.packages.urllib3.contrib import appengine as gaecontrib
       49│     except ImportError:
    →  50│         from urllib3.contrib import appengine as gaecontrib
       51│ 
       52│ PY3 = sys.version_info > (3, 0)
       53│ 
       54│ if PY3:
Cleaning up project directory and file based variables
00:00
ERROR: Job failed: command terminated with exit code 1'

## Reproduction Steps

```bash
poetry publish -vvv -r $REPOSITRY -u $USERNAME -p $PASSWORD
```

## Workaorund

Define request dependency in the poetry pyproject.toml file to take any version higher than 2.28.2 except the yanked 2.30.0, you can do this as follow:

`requests = "^2.28.2, !=2.30.0"`

## System Information

- python 3.9
- requests 2.30.0
- poetry 1.4.2



Hi there, I have the exact same issue here.

You can work it around by defining the request dependency as follow in your pyproject.toml:

`requests = "^2.28.2, !=2.30.0"`

This allows poetry to take any version higher than 2.28.2 except the yanked 2.30.0.

The problem is a combination of dependencies. Namely urllib3>2.0 with requests_toolbelt<1.0. You can use requests 2.30.0 with requests_toolbelt>=1.0 and urllib3>=2.0; or requests 2.30 with toolbelt before 1.0 and urllib3 before 2.0. I suspect poetry is ready for urllib3 2.0 and hasn't updated it's toolbelt dependency 

Requests 2.30.0 has been unyanked, I hope that this solves the issue at hand (beyond the fixes provided in upgraded dependencies as has been noted above by @sigmavirus24). Going to close this issue optimistically, if things aren't fixed completely please provide more context and I'll reopen.

Got this error when trying to run `poetry publish --build`:
`cannot import name 'appengine' from 'urllib3.contrib'`

It uses urllib3 2.0.2 and requests 2.30.0

Two comments above yours explains the problem: https://github.com/psf/requests/issues/6441#issuecomment-1534752003

> Requests 2.30.0 has been unyanked, I hope that this solves the issue at hand (beyond the fixes provided in upgraded dependencies as has been noted above by @sigmavirus24). Going to close this issue optimistically, if things aren't fixed completely please provide more context and I'll reopen.

In my case it didn't solve the issue even when it uses the latest request library I think it has to be fixed in poetry also but not sure...

> You can work it around by defining the request dependency as follow in your pyproject.toml:
> 
> `requests = "^2.28.2, !=2.30.0"`
> 
> This allows poetry to take any version higher than 2.28.2 except the yanked 2.30.0.

I'm getting the same error with requests- 2.31.0

requests 2.31.0 seems fine

![2023-07-12_14-49](https://github.com/psf/requests/assets/14293802/257be033-8e6e-4fb7-8216-dfb2fa7fa6c4)

and as long as i pin `urllib3` to `1.26.x`, versions of `requests` and `requests-toolbelt` don't matter :thinking: 

@zachliu same. I had to pin urllib3 to 1.26.16 (version <2.0.0) in my poetry and It worked out without any issues. 

can someone help me with this?  I've tried pinning `urllib3` and `requests-toolbelt` in my pyproject.toml but still seeing the same issue.
```
[tool.poetry.dependencies]
python = "^3.8"
python-dateutil = ">=2.5.3"
setuptools = ">=21.0.0"
urllib3 = "1.26.15"
requests-toolbelt = "0.10.1"
```
Is this the right place to set the dependencies?  Is there something else I should try?  It looks like it is picking up `requests 2.31.0` in the poetry.lock.

@apapia you have python version set to "^3.8", what version does your project eventually run on? I'd try something like
`python = ">=3.8,<=3.9"`. In my project I have config set like this

```
[tool.poetry.dependencies]
python = ">=3.7,<3.9"
urllib3 = "1.26.16"
requests = "^2.23.0"
requests_toolbelt = "^1.0.0"
importlib_metadata = "4.13.0"
```


`python 3.9.13` and `poetry 1.1.15`

try upgrading poetry to 1.5.1

@asheth-godaddy it worked!  thank you!