Earlier, an assert statement assert key not in self.wrapper.pnlKey2ReqId was causing the AssertionError when reqPnL is called second time for same set of inputs. This update avoids the error and returns existing PnL class object if already subscribed.
Minimum reproducible example
from ib_async import IB
import time
ib = IB()
account = "DUXXXXXXX"
ib.connect(clientId=5)
ib.sleep()
data=ib.reqPnL(account)
ib.sleep()
#Do something with data and for whatever reason, call ib.reqPnL again
data = ib.reqPnL(account) #This line causes the error
ib.sleep()
This creates error as follows
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\algoBot\pnlTrial.py", line 11, in <module>
data = ib.reqPnL(account)
^^^^^^^^^^^^^^^^^^
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python312\Lib\site-packages\ib_async\ib.py", line 951, in reqPnL
assert key not in self.wrapper.pnlKey2ReqId
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError
Even though calling ib.reqPnL() multiple times is not a sensible choice, this can be done accidentally by someone assuming ib.reqPnL to have same behavior as reqMktData or other requests. These other request methods generate no error and hence the reqPnL should also be consistent with other methods.
Earlier, an assert statement
assert key not in self.wrapper.pnlKey2ReqId
was causing theAssertionError
whenreqPnL
is called second time for same set of inputs. This update avoids the error and returns existingPnL
class object if already subscribed.Minimum reproducible example
This creates error as follows
Even though calling
ib.reqPnL()
multiple times is not a sensible choice, this can be done accidentally by someone assumingib.reqPnL
to have same behavior asreqMktData
or other requests. These other request methods generate no error and hence thereqPnL
should also be consistent with other methods.Hence, proposing the change.