The issue is that Infura only exposes the eth_newFilter endpoint via websockets, but you are connecting via https.
Try using a WebsocketProvider when declaring your web3 instance, as shown in the following example:
from web3 import Web3
PROVIDER = "wss://ropsten.infura.io/ws/v3/YOUR-PROJECT-ID"
web3 = Web3(Web3.WebsocketProvider(PROVIDER))
Ok. With this code the parts were errors might occur are very limited.
Make sure providerUrl has the correct value.
I hope you filled contractAddress correctly.
Abi is the bigger problem. Do a console.log of it. I would suggest a JSON.parse on the abi. This might fix the problem.
EDIT: What is your web3 version? Make sure not to use an outdated one.
To connect to a blockchain you need a node which implements the blockchain functionality. Basically it's a client software. There are currently two major client platforms: Geth and Parity. It can be a bit cumbersome to run your own node but in theory anyone can do it.
Infura is a service provider. They basically just provide you with access to one of the ...
You are getting the error The method eth_newFilter does not exist/is not available because you are not using the websocket endpoint from Infura. the eth_newFilter call only exists on websockets.
Change your Infura provider from: