Currently the python client can't handle Read only mode because our retries are too short. We should handle read only mode as a special case of 503 where we throw a warning but continue to wait for a much longer period (possibly idenfinetely). Currently I believe we crap out after about a 1 minute. While the actual time of read only can be 20 minutes.
This might require us to rethink our exponential back-off to to handle retires differently depending on the error code or wrap the retry in another retry that handles the read only 503 exclusively.