TL;DR: elasticsearch-py 8 removed RequestsHttpConnection along with the old transport layer. Delete the connection_class=RequestsHttpConnection argument; the v8 client manages connections itself.

```text
ImportError: cannot import name 'RequestsHttpConnection' from 'elasticsearch'
```

## Fix it

1. Remove the import line for RequestsHttpConnection. Expected: no more references.
2. Remove connection_class=RequestsHttpConnection from the Elasticsearch(...) constructor. Expected: constructor takes hosts, auth, and timeout args only.
3. If you set timeouts, rename timeout= to request_timeout= (also changed in v8). Expected: no TypeError.
4. Verify: python -c "from elasticsearch import Elasticsearch; es = Elasticsearch('[host]:9200'); print(es.info())". Expected: cluster info.

## When this applies
- The code imports RequestsHttpConnection and elasticsearch is 8.x.

## When it doesn't
- elasticsearch is 7.x and you want v7 behavior: keep the pin, but 7.x is EOL.
- The import works but auth fails: credential problem, not this.

## Compatibility
- elasticsearch-py >= 8.0. For 7.x, RequestsHttpConnection still exists.

## Why it happens
v8 replaced the urllib3-based transport with ElasticTransport. Connection classes were deleted rather than deprecated, so old code fails at import.

## Edge cases
- Custom connection classes for proxies need rewriting against the new transport API.
- basic_auth=(user, password) replaces http_auth=(user, password) in v8 too; fix both at once.
