Penguin
 · Trader

What's wrong with Fyers Api on Wednesdays

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}

Abhishek

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                    
1
9 replies