From the last 3 Wednesdays, around 8-10pm when I use Fyers API, the connection is broken very frequently. What is going on ? I don't see this problem on Thursdays.
I'm sure this is not rate blocking because I have proper sleeps in place and am using API very sparingly; nowhere near the limit
Sample query:
query = \
{"symbol":symbol,
"resolution":resolution,
"date_format":"1",
"range_from":range_from,
"range_to":range_to,
"cont_flag":1,
"oi_flag":1}
RemoteDisconnected Traceback (most recent call last)
File my_proj\.venv\Lib\site-packages\urllib3\connectionpool.py:791, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)
790 # Make the request on the HTTPConnection object
--> 791 response = self._make_request(
792 conn,
793 method,
794 url,
795 timeout=timeout_obj,
796 body=body,
797 headers=headers,
798 chunked=chunked,
799 retries=retries,
800 response_conn=response_conn,
801 preload_content=preload_content,
802 decode_content=decode_content,
803 **response_kw,
804 )
806 # Everything went great!
File my_proj\.venv\Lib\site-packages\urllib3\connectionpool.py:537, in HTTPConnectionPool._make_request(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)
536 try:
--> 537 response = conn.getresponse()
538 except (BaseSSLError, OSError) as e:
File my_proj\.venv\Lib\site-packages\urllib3\connection.py:461, in HTTPConnection.getresponse(self)
460 # Get the response from http.client.HTTPConnection
--> 461 httplib_response = super().getresponse()
463 try:
File ~\AppData\Local\Programs\Python\Python311\Lib\http\client.py:1378, in HTTPConnection.getresponse(self)
1377 try:
-> 1378 response.begin()
1379 except ConnectionError:
File ~\AppData\Local\Programs\Python\Python311\Lib\http\client.py:318, in HTTPResponse.begin(self)
317 while True:
--> 318 version, status, reason = self._read_status()
319 if status != CONTINUE:
File ~\AppData\Local\Programs\Python\Python311\Lib\http\client.py:287, in HTTPResponse._read_status(self)
284 if not line:
285 # Presumably, the server closed the connection before
286 # sending a valid response.
--> 287 raise RemoteDisconnected("Remote end closed connection without"
288 " response")
289 try:
RemoteDisconnected: Remote end closed connection without response
During handling of the above exception, another exception occurred:
ProtocolError Traceback (most recent call last)
File my_proj\.venv\Lib\site-packages\requests\adapters.py:486, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
485 try:
--> 486 resp = conn.urlopen(
487 method=request.method,
488 url=url,
489 body=request.body,
490 headers=request.headers,
491 redirect=False,
492 assert_same_host=False,
493 preload_content=False,
494 decode_content=False,
495 retries=self.max_retries,
496 timeout=timeout,
497 chunked=chunked,
498 )
500 except (ProtocolError, OSError) as err:
File my_proj\.venv\Lib\site-packages\urllib3\connectionpool.py:845, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)
843 new_e = ProtocolError("Connection aborted.", new_e)
--> 845 retries = retries.increment(
846 method, url, error=new_e, _pool=self, _stacktrace=sys.exc_info()[2]
847 )
848 retries.sleep()
File my_proj\.venv\Lib\site-packages\urllib3\util\retry.py:470, in Retry.increment(self, method, url, response, error, _pool, _stacktrace)
469 if read is False or method is None or not self._is_method_retryable(method):
--> 470 raise reraise(type(error), error, _stacktrace)
471 elif read is not None:
File my_proj\.venv\Lib\site-packages\urllib3\util\util.py:38, in reraise(tp, value, tb)
37 if value.__traceback__ is not tb:
---> 38 raise value.with_traceback(tb)
39 raise value
File my_proj\.venv\Lib\site-packages\urllib3\connectionpool.py:791, in HTTPConnectionPool.urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)
790 # Make the request on the HTTPConnection object
--> 791 response = self._make_request(
792 conn,
793 method,
794 url,
795 timeout=timeout_obj,
796 body=body,
797 headers=headers,
798 chunked=chunked,
799 retries=retries,
800 response_conn=response_conn,
801 preload_content=preload_content,
802 decode_content=decode_content,
803 **response_kw,
804 )
806 # Everything went great!
File my_proj\.venv\Lib\site-packages\urllib3\connectionpool.py:537, in HTTPConnectionPool._make_request(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)
536 try:
--> 537 response = conn.getresponse()
538 except (BaseSSLError, OSError) as e:
File my_proj\.venv\Lib\site-packages\urllib3\connection.py:461, in HTTPConnection.getresponse(self)
460 # Get the response from http.client.HTTPConnection
--> 461 httplib_response = super().getresponse()
463 try:
File ~\AppData\Local\Programs\Python\Python311\Lib\http\client.py:1378, in HTTPConnection.getresponse(self)
1377 try:
-> 1378 response.begin()
1379 except ConnectionError:
File ~\AppData\Local\Programs\Python\Python311\Lib\http\client.py:318, in HTTPResponse.begin(self)
317 while True:
--> 318 version, status, reason = self._read_status()
319 if status != CONTINUE:
File ~\AppData\Local\Programs\Python\Python311\Lib\http\client.py:287, in HTTPResponse._read_status(self)
284 if not line:
285 # Presumably, the server closed the connection before
286 # sending a valid response.
--> 287 raise RemoteDisconnected("Remote end closed connection without"
288 " response")
289 try:
ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
During handling of the above exception, another exception occurred:
ConnectionError Traceback (most recent call last)
File my_proj\.venv\Lib\site-packages\fyers_apiv3\fyersModel.py:108, in FyersServiceSync.get_call(self, api, header, data, data_flag)
107 URL = URL + "?" + url_params
--> 108 response = requests.get(
109 url=URL,
110 headers={
111 "Authorization": header,
112 "Content-Type": self.content,
113 "version": "3"
114 },
115 )
116 return response.json()
File my_proj\.venv\Lib\site-packages\requests\api.py:73, in get(url, params, **kwargs)
63 r"""Sends a GET request.
64
65 :param url: URL for the new :class:`Request` object.
(...)
70 :rtype: requests.Response
71 """
---> 73 return request("get", url, params=params, **kwargs)
File my_proj\.venv\Lib\site-packages\requests\api.py:59, in request(method, url, **kwargs)
58 with sessions.Session() as session:
---> 59 return session.request(method=method, url=url, **kwargs)
File my_proj\.venv\Lib\site-packages\requests\sessions.py:589, in Session.request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
588 send_kwargs.update(settings)
--> 589 resp = self.send(prep, **send_kwargs)
591 return resp
File my_proj\.venv\Lib\site-packages\requests\sessions.py:703, in Session.send(self, request, **kwargs)
702 # Send the request
--> 703 r = adapter.send(request, **kwargs)
705 # Total elapsed time of the request (approximately)
File my_proj\.venv\Lib\site-packages\requests\adapters.py:501, in HTTPAdapter.send(self, request, stream, timeout, verify, cert, proxies)
500 except (ProtocolError, OSError) as err:
--> 501 raise ConnectionError(err, request=request)
503 except MaxRetryError as e:
ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
During handling of the above exception, another exception occurred:
UnboundLocalError Traceback (most recent call last)
File <timed exec>:27
Cell In[2], line 55, in download_opt_data(ticker, resolution, range_from, range_to)
45 query = \
46 {"symbol":symbol,
47 "resolution":resolution,
(...)
51 "cont_flag":1,
52 "oi_flag":1}
54 # print(query)
---> 55 data = fyers.history(query)
56 # print(data)
58 while data == None:
File my_proj\.venv\Lib\site-packages\fyers_apiv3\fyersModel.py:734, in FyersModel.history(self, data)
729 response = self.service.get_async_call(
730 Config.history, self.header, data, data_flag=True
731 )
733 else:
--> 734 response = self.service.get_call(
735 Config.history, self.header, data, data_flag=True
736 )
737 return response
File my_proj\.venv\Lib\site-packages\fyers_apiv3\fyersModel.py:119, in FyersServiceSync.get_call(self, api, header, data, data_flag)
117 except Exception as e:
118 self.api_logger.error(e)
--> 119 self.error_resp["code"] = response.status_code
120 return self.error_resp
UnboundLocalError: cannot access local variable 'response' where it is not associated with a value
Update:
Just got a new error
IncompleteRead Traceback (most recent call last)
File my_proj\.venv\Lib\site-packages\urllib3\response.py:710, in HTTPResponse._error_catcher(self)
709 try:
--> 710 yield
712 except SocketTimeout as e:
713 # FIXME: Ideally we'd like to include the url in the ReadTimeoutError but
714 # there is yet no clean way to get at it from this context.
File my_proj\.venv\Lib\site-packages\urllib3\response.py:1076, in HTTPResponse.read_chunked(self, amt, decode_content)
1075 break
-> 1076 chunk = self._handle_chunk(amt)
1077 decoded = self._decode(
1078 chunk, decode_content=decode_content, flush_decoder=False
1079 )
File my_proj\.venv\Lib\site-packages\urllib3\response.py:1027, in HTTPResponse._handle_chunk(self, amt)
1026 else: # amt > self.chunk_left
-> 1027 returned_chunk = self._fp._safe_read(self.chunk_left) # type: ignore[union-attr]
1028 self._fp._safe_read(2) # type: ignore[union-attr] # Toss the CRLF at the end of the chunk.
File ~\AppData\Local\Programs\Python\Python311\Lib\http\client.py:633, in HTTPResponse._safe_read(self, amt)
632 if len(data) < amt:
--> 633 raise IncompleteRead(data, amt-len(data))
634 return data
IncompleteRead: IncompleteRead(933 bytes read, 8693 more expected)
The above exception was the direct cause of the following exception:
ProtocolError Traceback (most recent call last)
File my_proj\.venv\Lib\site-packages\requests\models.py:816, in Response.iter_content.<locals>.generate()
815 try:
--> 816 yield from self.raw.stream(chunk_size, decode_content=True)
817 except ProtocolError as e:
File my_proj\.venv\Lib\site-packages\urllib3\response.py:933, in HTTPResponse.stream(self, amt, decode_content)
932 if self.chunked and self.supports_chunked_reads():
--> 933 yield from self.read_chunked(amt, decode_content=decode_content)
934 else:
File my_proj\.venv\Lib\site-packages\urllib3\response.py:1061, in HTTPResponse.read_chunked(self, amt, decode_content)
1056 raise BodyNotHttplibCompatible(
1057 "Body should be http.client.HTTPResponse like. "
1058 "It should have have an fp attribute which returns raw chunks."
1059 )
-> 1061 with self._error_catcher():
1062 # Don't bother reading the body of a HEAD request.
1063 if self._original_response and is_response_to_head(self._original_response):
File ~\AppData\Local\Programs\Python\Python311\Lib\contextlib.py:155, in _GeneratorContextManager.__exit__(self, typ, value, traceback)
154 try:
--> 155 self.gen.throw(typ, value, traceback)
156 except StopIteration as exc:
157 # Suppress StopIteration *unless* it's the same exception that
158 # was passed to throw(). This prevents a StopIteration
159 # raised inside the "with" statement from being suppressed.
File my_proj\.venv\Lib\site-packages\urllib3\response.py:727, in HTTPResponse._error_catcher(self)
725 except (HTTPException, OSError) as e:
726 # This includes IncompleteRead.
--> 727 raise ProtocolError(f"Connection broken: {e!r}", e) from e
729 # If no exception is thrown, we should avoid cleaning up
730 # unnecessarily.
ProtocolError: ('Connection broken: IncompleteRead(933 bytes read, 8693 more expected)', IncompleteRead(933 bytes read, 8693 more expected))
During handling of the above exception, another exception occurred:
ChunkedEncodingError Traceback (most recent call last)
File my_proj\.venv\Lib\site-packages\fyers_apiv3\fyersModel.py:108, in FyersServiceSync.get_call(self, api, header, data, data_flag)
107 URL = URL + "?" + url_params
--> 108 response = requests.get(
109 url=URL,
110 headers={
111 "Authorization": header,
112 "Content-Type": self.content,
113 "version": "3"
114 },
115 )
116 return response.json()
File my_proj\.venv\Lib\site-packages\requests\api.py:73, in get(url, params, **kwargs)
63 r"""Sends a GET request.
64
65 :param url: URL for the new :class:`Request` object.
(...)
70 :rtype: requests.Response
71 """
---> 73 return request("get", url, params=params, **kwargs)
File my_proj\.venv\Lib\site-packages\requests\api.py:59, in request(method, url, **kwargs)
58 with sessions.Session() as session:
---> 59 return session.request(method=method, url=url, **kwargs)
File my_proj\.venv\Lib\site-packages\requests\sessions.py:589, in Session.request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
588 send_kwargs.update(settings)
--> 589 resp = self.send(prep, **send_kwargs)
591 return resp
File my_proj\.venv\Lib\site-packages\requests\sessions.py:747, in Session.send(self, request, **kwargs)
746 if not stream:
--> 747 r.content
749 return r
File my_proj\.venv\Lib\site-packages\requests\models.py:899, in Response.content(self)
898 else:
--> 899 self._content = b"".join(self.iter_content(CONTENT_CHUNK_SIZE)) or b""
901 self._content_consumed = True
File my_proj\.venv\Lib\site-packages\requests\models.py:818, in Response.iter_content.<locals>.generate()
817 except ProtocolError as e:
--> 818 raise ChunkedEncodingError(e)
819 except DecodeError as e:
ChunkedEncodingError: ('Connection broken: IncompleteRead(933 bytes read, 8693 more expected)', IncompleteRead(933 bytes read, 8693 more expected))
During handling of the above exception, another exception occurred:
UnboundLocalError Traceback (most recent call last)
File <timed exec>:27
Cell In[2], line 55, in download_opt_data(ticker, resolution, range_from, range_to)
45 query = \
46 {"symbol":symbol,
47 "resolution":resolution,
(...)
51 "cont_flag":1,
52 "oi_flag":1}
54 # print(query)
---> 55 data = fyers.history(query)
56 # print(data)
58 while data == None:
File my_proj\.venv\Lib\site-packages\fyers_apiv3\fyersModel.py:734, in FyersModel.history(self, data)
729 response = self.service.get_async_call(
730 Config.history, self.header, data, data_flag=True
731 )
733 else:
--> 734 response = self.service.get_call(
735 Config.history, self.header, data, data_flag=True
736 )
737 return response
File my_proj\.venv\Lib\site-packages\fyers_apiv3\fyersModel.py:119, in FyersServiceSync.get_call(self, api, header, data, data_flag)
117 except Exception as e:
118 self.api_logger.error(e)
--> 119 self.error_resp["code"] = response.status_code
120 return self.error_resp
UnboundLocalError: cannot access local variable 'response' where it is not associated with a value
Update 2:
ConnectionAbortedError