mirror of
https://github.com/aljazceru/bitfinex-api-py.git
synced 2025-12-19 06:44:22 +01:00
Add new packages to setup.py. Add new feature in .on and .once methods in bfxapi.websocket.client.bfx_websocket_client. Fix small typo in __init__.py.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
import traceback, json, asyncio, hmac, hashlib, time, uuid, websockets
|
import traceback, json, asyncio, hmac, hashlib, time, websockets
|
||||||
|
|
||||||
from typing import Literal, TypeVar, Callable, cast
|
from typing import cast
|
||||||
|
|
||||||
from pyee.asyncio import AsyncIOEventEmitter
|
from pyee.asyncio import AsyncIOEventEmitter
|
||||||
|
|
||||||
@@ -10,8 +10,6 @@ from .bfx_websocket_inputs import BfxWebsocketInputs
|
|||||||
from ..handlers import PublicChannelsHandler, AuthenticatedChannelsHandler
|
from ..handlers import PublicChannelsHandler, AuthenticatedChannelsHandler
|
||||||
from ..exceptions import WebsocketAuthenticationRequired, InvalidAuthenticationCredentials, EventNotSupported
|
from ..exceptions import WebsocketAuthenticationRequired, InvalidAuthenticationCredentials, EventNotSupported
|
||||||
|
|
||||||
from ..enums import Channels
|
|
||||||
|
|
||||||
from ...utils.JSONEncoder import JSONEncoder
|
from ...utils.JSONEncoder import JSONEncoder
|
||||||
|
|
||||||
from ...utils.logger import Formatter, CustomLogger
|
from ...utils.logger import Formatter, CustomLogger
|
||||||
@@ -36,28 +34,28 @@ class BfxWebsocketClient(object):
|
|||||||
*AuthenticatedChannelsHandler.EVENTS
|
*AuthenticatedChannelsHandler.EVENTS
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, host, buckets=5, log_level = "WARNING", API_KEY=None, API_SECRET=None, filter=None):
|
def __init__(self, host, API_KEY = None, API_SECRET = None, filter = None, buckets = 5, log_level = "WARNING"):
|
||||||
self.host, self.websocket, self.event_emitter = host, None, AsyncIOEventEmitter()
|
self.host, self.websocket, self.event_emitter = host, None, AsyncIOEventEmitter()
|
||||||
|
|
||||||
self.event_emitter.add_listener("error",
|
|
||||||
lambda exception: self.logger.error(str(exception) + "\n" +
|
|
||||||
str().join(traceback.format_exception(type(exception), exception, exception.__traceback__))[:-1])
|
|
||||||
)
|
|
||||||
|
|
||||||
self.API_KEY, self.API_SECRET, self.filter, self.authentication = API_KEY, API_SECRET, filter, False
|
self.API_KEY, self.API_SECRET, self.filter, self.authentication = API_KEY, API_SECRET, filter, False
|
||||||
|
|
||||||
self.handler = AuthenticatedChannelsHandler(event_emitter=self.event_emitter)
|
self.handler = AuthenticatedChannelsHandler(event_emitter=self.event_emitter)
|
||||||
|
|
||||||
self.buckets = [ BfxWebsocketBucket(self.host, self.event_emitter, self.__bucket_open_signal) for _ in range(buckets) ]
|
|
||||||
|
|
||||||
self.inputs = BfxWebsocketInputs(self.__handle_websocket_input)
|
|
||||||
|
|
||||||
self.logger = CustomLogger("BfxWebsocketClient", logLevel=log_level)
|
self.logger = CustomLogger("BfxWebsocketClient", logLevel=log_level)
|
||||||
|
|
||||||
|
self.event_emitter.add_listener("error",
|
||||||
|
lambda exception: self.logger.error(f"{type(exception).__name__}: {str(exception)}" + "\n" +
|
||||||
|
str().join(traceback.format_exception(type(exception), exception, exception.__traceback__))[:-1])
|
||||||
|
)
|
||||||
|
|
||||||
if buckets > BfxWebsocketClient.MAXIMUM_BUCKETS_AMOUNT:
|
if buckets > BfxWebsocketClient.MAXIMUM_BUCKETS_AMOUNT:
|
||||||
self.logger.warning(f"It is not safe to use more than {BfxWebsocketClient.MAXIMUM_BUCKETS_AMOUNT} buckets from the same \
|
self.logger.warning(f"It is not safe to use more than {BfxWebsocketClient.MAXIMUM_BUCKETS_AMOUNT} buckets from the same \
|
||||||
connection ({buckets} in use), the server could momentarily block the client with <429 Too Many Requests>.")
|
connection ({buckets} in use), the server could momentarily block the client with <429 Too Many Requests>.")
|
||||||
|
|
||||||
|
self.buckets = [ BfxWebsocketBucket(self.host, self.event_emitter, self.__bucket_open_signal) for _ in range(buckets) ]
|
||||||
|
|
||||||
|
self.inputs = BfxWebsocketInputs(self.__handle_websocket_input)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
return asyncio.run(self.start())
|
return asyncio.run(self.start())
|
||||||
|
|
||||||
@@ -136,24 +134,34 @@ class BfxWebsocketClient(object):
|
|||||||
if all(bucket.websocket != None and bucket.websocket.open == True for bucket in self.buckets):
|
if all(bucket.websocket != None and bucket.websocket.open == True for bucket in self.buckets):
|
||||||
self.event_emitter.emit("open")
|
self.event_emitter.emit("open")
|
||||||
|
|
||||||
def on(self, event, callback = None):
|
def on(self, *events, callback = None):
|
||||||
|
for event in events:
|
||||||
if event not in BfxWebsocketClient.EVENTS:
|
if event not in BfxWebsocketClient.EVENTS:
|
||||||
raise EventNotSupported(f"Event <{event}> is not supported. To get a list of available events print BfxWebsocketClient.EVENTS")
|
raise EventNotSupported(f"Event <{event}> is not supported. To get a list of available events print BfxWebsocketClient.EVENTS")
|
||||||
|
|
||||||
if callback != None:
|
if callback != None:
|
||||||
return self.event_emitter.on(event, callback)
|
for event in events:
|
||||||
|
self.event_emitter.on(event, callback)
|
||||||
|
|
||||||
|
if callback == None:
|
||||||
def handler(function):
|
def handler(function):
|
||||||
|
for event in events:
|
||||||
self.event_emitter.on(event, function)
|
self.event_emitter.on(event, function)
|
||||||
|
|
||||||
return handler
|
return handler
|
||||||
|
|
||||||
def once(self, event, callback = None):
|
def once(self, *events, callback = None):
|
||||||
|
for event in events:
|
||||||
if event not in BfxWebsocketClient.EVENTS:
|
if event not in BfxWebsocketClient.EVENTS:
|
||||||
raise EventNotSupported(f"Event <{event}> is not supported. To get a list of available events print BfxWebsocketClient.EVENTS")
|
raise EventNotSupported(f"Event <{event}> is not supported. To get a list of available events print BfxWebsocketClient.EVENTS")
|
||||||
|
|
||||||
if callback != None:
|
if callback != None:
|
||||||
return self.event_emitter.once(event, callback)
|
for event in events:
|
||||||
|
self.event_emitter.once(event, callback)
|
||||||
|
|
||||||
|
if callback == None:
|
||||||
def handler(function):
|
def handler(function):
|
||||||
|
for event in events:
|
||||||
self.event_emitter.once(event, function)
|
self.event_emitter.once(event, function)
|
||||||
|
|
||||||
return handler
|
return handler
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
from .public_channels_handler import PublicChannelsHandler
|
from .public_channels_handler import PublicChannelsHandler
|
||||||
from .authenticated_channels_handler import AuthenticatedChannelsHandler
|
from .authenticated_channels_handler import AuthenticatedChannelsHandler
|
||||||
|
|
||||||
NAME = "handlers"
|
NAME = "handlers"
|
||||||
2
setup.py
2
setup.py
@@ -5,7 +5,7 @@ setup(
|
|||||||
version="3.0.0",
|
version="3.0.0",
|
||||||
packages=[
|
packages=[
|
||||||
"bfxapi", "bfxapi.utils",
|
"bfxapi", "bfxapi.utils",
|
||||||
"bfxapi.websocket",
|
"bfxapi.websocket", "bfxapi.websocket.client", "bfxapi.websocket.handlers",
|
||||||
"bfxapi.rest", "bfxapi.rest.endpoints", "bfxapi.rest.middleware",
|
"bfxapi.rest", "bfxapi.rest.endpoints", "bfxapi.rest.middleware",
|
||||||
],
|
],
|
||||||
url="https://github.com/bitfinexcom/bitfinex-api-py",
|
url="https://github.com/bitfinexcom/bitfinex-api-py",
|
||||||
|
|||||||
Reference in New Issue
Block a user