Skip to content

Commit b496a98

Browse files
authored
Merge pull request #242 from Davi0kProgramsThings/v3.0.2
Merge branch `Davi0kProgramsThings:v3.0.2` into branch `bitfinexcom:master`.
2 parents 52f24ff + 74b6c77 commit b496a98

File tree

10 files changed

+99
-54
lines changed

10 files changed

+99
-54
lines changed

MANIFEST

Lines changed: 0 additions & 38 deletions
This file was deleted.

bfxapi/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "3.0.1"
1+
__version__ = "3.0.2"

bfxapi/rest/_interfaces/rest_auth_endpoints.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ def get_ledgers(
248248

249249
def get_base_margin_info(self) -> BaseMarginInfo:
250250
return serializers.BaseMarginInfo.parse(
251-
*(self._m.post("auth/r/info/margin/base")[1])
251+
*self._m.post("auth/r/info/margin/base")
252252
)
253253

254254
def get_symbol_margin_info(self, symbol: str) -> SymbolMarginInfo:
@@ -551,7 +551,7 @@ def get_funding_trades_history(
551551

552552
def get_funding_info(self, key: str) -> FundingInfo:
553553
return serializers.FundingInfo.parse(
554-
*(self._m.post(f"auth/r/info/funding/{key}")[2])
554+
*self._m.post(f"auth/r/info/funding/{key}")
555555
)
556556

557557
def transfer_between_wallets(

bfxapi/types/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .dataclasses import (
22
BalanceAvailable,
3+
BalanceInfo,
34
BaseMarginInfo,
45
Candle,
56
CurrencyConversion,

bfxapi/types/dataclasses.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ class FundingAutoRenew(_Type):
428428

429429
@dataclass()
430430
class FundingInfo(_Type):
431+
symbol: str
431432
yield_loan: float
432433
yield_lend: float
433434
duration_loan: float
@@ -607,6 +608,12 @@ class DerivativePositionCollateralLimits(_Type):
607608
max_collateral: float
608609

609610

611+
@dataclass
612+
class BalanceInfo(_Type):
613+
aum: float
614+
aum_net: float
615+
616+
610617
# endregion
611618

612619
# region Dataclass definitions for types of merchant use

bfxapi/types/serializers.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -632,7 +632,15 @@
632632
FundingInfo = generate_labeler_serializer(
633633
name="FundingInfo",
634634
klass=dataclasses.FundingInfo,
635-
labels=["yield_loan", "yield_lend", "duration_loan", "duration_lend"],
635+
labels=[
636+
"_PLACEHOLDER",
637+
"symbol",
638+
"yield_loan",
639+
"yield_lend",
640+
"duration_loan",
641+
"duration_lend",
642+
],
643+
flat=True,
636644
)
637645

638646
Wallet = generate_labeler_serializer(
@@ -745,7 +753,15 @@
745753
BaseMarginInfo = generate_labeler_serializer(
746754
name="BaseMarginInfo",
747755
klass=dataclasses.BaseMarginInfo,
748-
labels=["user_pl", "user_swaps", "margin_balance", "margin_net", "margin_min"],
756+
labels=[
757+
"_PLACEHOLDER",
758+
"user_pl",
759+
"user_swaps",
760+
"margin_balance",
761+
"margin_net",
762+
"margin_min",
763+
],
764+
flat=True,
749765
)
750766

751767
PositionClaim = generate_labeler_serializer(
@@ -888,4 +904,10 @@
888904
labels=["min_collateral", "max_collateral"],
889905
)
890906

907+
BalanceInfo = generate_labeler_serializer(
908+
name="BalanceInfo",
909+
klass=dataclasses.BalanceInfo,
910+
labels=["aum", "aum_net"],
911+
)
912+
891913
# endregion

bfxapi/websocket/_event_emitter/bfx_event_emitter.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@
6464
"trade_execution",
6565
"trade_execution_update",
6666
"wallet_update",
67+
"base_margin_info",
68+
"symbol_margin_info",
69+
"funding_info_update",
70+
"balance_update",
6771
"notification",
6872
"on-req-notification",
6973
"ou-req-notification",
@@ -105,7 +109,7 @@ def on(
105109
) -> Union[_Handler, Callable[[_Handler], _Handler]]:
106110
if event not in BfxEventEmitter._EVENTS:
107111
raise UnknownEventError(
108-
f"Can't register to unknown event: <{event}> (to get a full"
112+
f"Can't register to unknown event: <{event}> (to get a full "
109113
"list of available events see https://docs.bitfinex.com/)."
110114
)
111115

bfxapi/websocket/_handlers/auth_events_handler.py

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class AuthEventsHandler:
3333
"flc": "funding_loan_close",
3434
"ws": "wallet_snapshot",
3535
"wu": "wallet_update",
36+
"fiu": "funding_info_update",
37+
"bu": "balance_update",
3638
}
3739

3840
__SERIALIZERS: Dict[Tuple[str, ...], serializers._Serializer] = {
@@ -43,6 +45,8 @@ class AuthEventsHandler:
4345
("fcs", "fcn", "fcu", "fcc"): serializers.FundingCredit,
4446
("fls", "fln", "flu", "flc"): serializers.FundingLoan,
4547
("ws", "wu"): serializers.Wallet,
48+
("fiu",): serializers.FundingInfo,
49+
("bu",): serializers.BalanceInfo,
4650
}
4751

4852
def __init__(self, event_emitter: EventEmitter) -> None:
@@ -51,17 +55,26 @@ def __init__(self, event_emitter: EventEmitter) -> None:
5155
def handle(self, abbrevation: str, stream: Any) -> None:
5256
if abbrevation == "n":
5357
self.__notification(stream)
58+
elif abbrevation == "miu":
59+
if stream[0] == "base":
60+
self.__event_emitter.emit(
61+
"base_margin_info", serializers.BaseMarginInfo.parse(*stream)
62+
)
63+
elif stream[0] == "sym":
64+
self.__event_emitter.emit(
65+
"symbol_margin_info", serializers.SymbolMarginInfo.parse(*stream)
66+
)
67+
else:
68+
for abbrevations, serializer in AuthEventsHandler.__SERIALIZERS.items():
69+
if abbrevation in abbrevations:
70+
event = AuthEventsHandler.__ABBREVIATIONS[abbrevation]
5471

55-
for abbrevations, serializer in AuthEventsHandler.__SERIALIZERS.items():
56-
if abbrevation in abbrevations:
57-
event = AuthEventsHandler.__ABBREVIATIONS[abbrevation]
72+
if all(isinstance(sub_stream, list) for sub_stream in stream):
73+
data = [serializer.parse(*sub_stream) for sub_stream in stream]
74+
else:
75+
data = serializer.parse(*stream)
5876

59-
if all(isinstance(sub_stream, list) for sub_stream in stream):
60-
data = [serializer.parse(*sub_stream) for sub_stream in stream]
61-
else:
62-
data = serializer.parse(*stream)
63-
64-
self.__event_emitter.emit(event, data)
77+
self.__event_emitter.emit(event, data)
6578

6679
def __notification(self, stream: Any) -> None:
6780
event: str = "notification"

examples/websocket/auth/calc.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# python -c "import examples.websocket.auth.calc"
2+
3+
import os
4+
5+
from bfxapi import Client
6+
from bfxapi.types import BaseMarginInfo, FundingInfo, SymbolMarginInfo
7+
8+
bfx = Client(
9+
api_key=os.getenv("BFX_API_KEY"),
10+
api_secret=os.getenv("BFX_API_SECRET"),
11+
)
12+
13+
14+
@bfx.wss.on("authenticated")
15+
async def on_authenticated(_):
16+
await bfx.wss.inputs.calc("margin_base", "margin_sym_tBTCUSD", "funding_sym_fUST")
17+
18+
19+
@bfx.wss.on("base_margin_info")
20+
def on_base_margin_info(data: BaseMarginInfo):
21+
print("Base margin info:", data)
22+
23+
24+
@bfx.wss.on("symbol_margin_info")
25+
def on_symbol_margin_info(data: SymbolMarginInfo):
26+
if data.symbol == "tBTCUSD":
27+
print("Symbol margin info:", data)
28+
29+
30+
@bfx.wss.on("funding_info_update")
31+
def on_funding_info_update(data: FundingInfo):
32+
if data.symbol == "fUST":
33+
print("Funding info update:", data)
34+
35+
36+
bfx.wss.run()

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name="bitfinex-api-py",
5-
version="3.0.1",
5+
version="3.0.2",
66
description="Official Bitfinex Python API",
77
long_description=(
88
"A Python reference implementation of the Bitfinex API "

0 commit comments

Comments
 (0)