exchanges-wrapper 2.1.46__tar.gz → 2.1.48__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/PKG-INFO +3 -3
  2. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/__init__.py +1 -1
  3. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/exch_srv.py +11 -0
  4. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/pyproject.toml +2 -2
  5. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/LICENSE.md +0 -0
  6. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/README.md +0 -0
  7. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/client.py +0 -0
  8. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/definitions.py +0 -0
  9. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/errors.py +0 -0
  10. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/events.py +0 -0
  11. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/exch_srv_cfg.toml.template +0 -0
  12. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/http_client.py +0 -0
  13. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/lib.py +0 -0
  14. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/martin/__init__.py +0 -0
  15. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/parsers/bitfinex.py +0 -0
  16. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/parsers/bybit.py +0 -0
  17. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/parsers/huobi.py +0 -0
  18. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/parsers/okx.py +0 -0
  19. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/proto/martin.proto +0 -0
  20. {exchanges_wrapper-2.1.46 → exchanges_wrapper-2.1.48}/exchanges_wrapper/web_sockets.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: exchanges-wrapper
3
- Version: 2.1.46
3
+ Version: 2.1.48
4
4
  Summary: REST API and WebSocket asyncio wrapper with grpc powered multiplexer server
5
5
  Author-email: Thomas Marchand <thomas.marchand@tuta.io>, Jerry Fedorenko <jerry.fedorenko@yahoo.com>
6
6
  Requires-Python: >=3.10
@@ -12,10 +12,10 @@ Classifier: Operating System :: Unix
12
12
  Classifier: Operating System :: Microsoft :: Windows
13
13
  Classifier: Operating System :: MacOS
14
14
  License-File: LICENSE.md
15
- Requires-Dist: crypto-ws-api==2.1.6
15
+ Requires-Dist: crypto-ws-api==2.1.8
16
16
  Requires-Dist: pyotp==2.9.0
17
17
  Requires-Dist: simplejson==3.20.2
18
- Requires-Dist: aiohttp~=3.13.3
18
+ Requires-Dist: aiohttp~=3.13.4
19
19
  Requires-Dist: expiringdict~=1.2.2
20
20
  Requires-Dist: betterproto==2.0.0b7
21
21
  Requires-Dist: grpclib~=0.4.8
@@ -12,7 +12,7 @@ __maintainer__ = "Jerry Fedorenko"
12
12
  __contact__ = "https://github.com/DogsTailFarmer"
13
13
  __email__ = "jerry.fedorenko@yahoo.com"
14
14
  __credits__ = ["https://github.com/DanyaSWorlD"]
15
- __version__ = "2.1.46"
15
+ __version__ = "2.1.48"
16
16
 
17
17
  from pathlib import Path
18
18
  import shutil
@@ -39,6 +39,7 @@ from exchanges_wrapper.martin import (
39
39
  OnTickerUpdateResponse,
40
40
  FetchOrderBookResponse,
41
41
  )
42
+ from exchanges_wrapper.errors import RateLimitReached
42
43
  #
43
44
  HEARTBEAT = 1 # sec
44
45
  MAX_QUEUE_SIZE = 100
@@ -137,6 +138,16 @@ class Martin(mr.MartinBase):
137
138
  await OpenClient.get_client(client_id).client.http.close_session()
138
139
  OpenClient.remove_client(client_id)
139
140
  raise GRPCError(status=Status.UNAVAILABLE, message=f"'{open_client.name}' timeout error")
141
+ except RateLimitReached:
142
+ await OpenClient.get_client(client_id).client.http.close_session()
143
+ OpenClient.remove_client(client_id)
144
+ logger.warning(f"OpenClientConnection LOADS for {open_client.name}: {RateLimitReached.message},"
145
+ f" trying some later")
146
+ await asyncio.sleep(HEARTBEAT * 60)
147
+ raise GRPCError(
148
+ status=Status.RESOURCE_EXHAUSTED,
149
+ message=f"'{open_client.name}: {RateLimitReached.message}'"
150
+ )
140
151
  except Exception as ex:
141
152
  logger.warning(f"OpenClientConnection for '{open_client.name}' exception: {ex}")
142
153
  logger.debug(f"Exception traceback: {traceback.format_exc()}")
@@ -20,10 +20,10 @@ dynamic = ["version", "description"]
20
20
  requires-python = ">=3.10"
21
21
 
22
22
  dependencies = [
23
- "crypto-ws-api==2.1.6",
23
+ "crypto-ws-api==2.1.8",
24
24
  "pyotp==2.9.0",
25
25
  "simplejson==3.20.2",
26
- "aiohttp~=3.13.3",
26
+ "aiohttp~=3.13.4",
27
27
  "expiringdict~=1.2.2",
28
28
  "betterproto==2.0.0b7",
29
29
  "grpclib~=0.4.8"