-) Use private host for auth-based requests

-) Updated examples
This commit is contained in:
itsdeka
2022-08-22 19:31:16 +02:00
parent 1ca0d871c7
commit 87e7f9820e
26 changed files with 105 additions and 55 deletions

View File

@@ -1,3 +1,6 @@
2.0.2
-) Use private host for auth-based requests
2.0.1 2.0.1
-) Added User Settings Write/Read/Delete endpoints (REST) -) Added User Settings Write/Read/Delete endpoints (REST)
-) Added Balance Available for Orders/Offers endpoint (REST) -) Added Balance Available for Orders/Offers endpoint (REST)

View File

@@ -3,7 +3,7 @@ This module is used to interact with the bitfinex api
""" """
from .version import __version__ from .version import __version__
from .client import Client from .client import Client, PUB_REST_HOST, PUB_WS_HOST, REST_HOST, WS_HOST
from .models import (Order, Trade, OrderBook, Subscription, Wallet, from .models import (Order, Trade, OrderBook, Subscription, Wallet,
Position, FundingLoan, FundingOffer, FundingCredit, Position, FundingLoan, FundingOffer, FundingCredit,
Movement) Movement)

View File

@@ -5,13 +5,13 @@ a websocket client and a rest interface client
# pylint: disable-all # pylint: disable-all
import asyncio
from .websockets.bfx_websocket import BfxWebsocket from .websockets.bfx_websocket import BfxWebsocket
from .rest.bfx_rest import BfxRest from .rest.bfx_rest import BfxRest
REST_HOST = 'https://api-pub.bitfinex.com/v2' REST_HOST = 'https://api.bitfinex.com/v2'
WS_HOST = 'wss://api-pub.bitfinex.com/ws/2' WS_HOST = 'wss://api.bitfinex.com/ws/2'
PUB_REST_HOST = 'https://api-pub.bitfinex.com/v2'
PUB_WS_HOST = 'wss://api-pub.bitfinex.com/ws/2'
class Client: class Client:
""" """

View File

@@ -1,18 +1,20 @@
import os import os
import sys import sys
import asyncio import asyncio
import time
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, WS_HOST, REST_HOST
API_KEY=os.getenv("BFX_KEY") API_KEY=os.getenv("BFX_KEY")
API_SECRET=os.getenv("BFX_SECRET") API_SECRET=os.getenv("BFX_SECRET")
# Create funding requires private hosts
bfx = Client( bfx = Client(
API_KEY=API_KEY, API_KEY=API_KEY,
API_SECRET=API_SECRET, API_SECRET=API_SECRET,
logLevel='DEBUG' logLevel='DEBUG',
ws_host=WS_HOST,
rest_host=REST_HOST
) )
async def create_funding(): async def create_funding():

View File

@@ -3,16 +3,19 @@ import sys
import asyncio import asyncio
import time import time
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, WS_HOST, REST_HOST
from bfxapi.models import OrderType from bfxapi.models import OrderType
API_KEY=os.getenv("BFX_KEY") API_KEY=os.getenv("BFX_KEY")
API_SECRET=os.getenv("BFX_SECRET") API_SECRET=os.getenv("BFX_SECRET")
# Create order requires private hosts
bfx = Client( bfx = Client(
API_KEY=API_KEY, API_KEY=API_KEY,
API_SECRET=API_SECRET, API_SECRET=API_SECRET,
logLevel='DEBUG' logLevel='DEBUG',
ws_host=WS_HOST,
rest_host=REST_HOST
) )
async def create_order(): async def create_order():

View File

@@ -4,15 +4,18 @@ import asyncio
import time import time
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, WS_HOST, REST_HOST
API_KEY=os.getenv("BFX_KEY") API_KEY=os.getenv("BFX_KEY")
API_SECRET=os.getenv("BFX_SECRET") API_SECRET=os.getenv("BFX_SECRET")
# Retrieving authenticated data requires private hosts
bfx = Client( bfx = Client(
API_KEY=API_KEY, API_KEY=API_KEY,
API_SECRET=API_SECRET, API_SECRET=API_SECRET,
logLevel='DEBUG' logLevel='DEBUG',
ws_host=WS_HOST,
rest_host=REST_HOST
) )
now = int(round(time.time() * 1000)) now = int(round(time.time() * 1000))

View File

@@ -4,10 +4,13 @@ import asyncio
import time import time
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, PUB_WS_HOST, PUB_REST_HOST
# Retrieving public data requires public hosts
bfx = Client( bfx = Client(
logLevel='DEBUG', logLevel='DEBUG',
ws_host=PUB_WS_HOST,
rest_host=PUB_REST_HOST
) )
now = int(round(time.time() * 1000)) now = int(round(time.time() * 1000))

View File

@@ -3,10 +3,13 @@ import sys
import asyncio import asyncio
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, PUB_WS_HOST, PUB_REST_HOST
# Retrieving seed trades requires public hosts
bfx = Client( bfx = Client(
logLevel='INFO' logLevel='INFO',
ws_host=PUB_WS_HOST,
rest_host=PUB_REST_HOST
) )
async def get_seeds(): async def get_seeds():

View File

@@ -2,15 +2,18 @@ import os
import sys import sys
import asyncio import asyncio
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, WS_HOST, REST_HOST
API_KEY=os.getenv("BFX_KEY") API_KEY=os.getenv("BFX_KEY")
API_SECRET=os.getenv("BFX_SECRET") API_SECRET=os.getenv("BFX_SECRET")
# Submitting invoices requires private hosts
bfx = Client( bfx = Client(
API_KEY=API_KEY, API_KEY=API_KEY,
API_SECRET=API_SECRET, API_SECRET=API_SECRET,
logLevel='DEBUG' logLevel='DEBUG',
ws_host=WS_HOST,
rest_host=REST_HOST
) )
async def run(): async def run():

View File

@@ -1,18 +1,20 @@
import os import os
import sys import sys
import asyncio import asyncio
import time
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, WS_HOST, REST_HOST
API_KEY=os.getenv("BFX_KEY") API_KEY=os.getenv("BFX_KEY")
API_SECRET=os.getenv("BFX_SECRET") API_SECRET=os.getenv("BFX_SECRET")
# Transfer wallet requires private hosts
bfx = Client( bfx = Client(
API_KEY=API_KEY, API_KEY=API_KEY,
API_SECRET=API_SECRET, API_SECRET=API_SECRET,
logLevel='DEBUG' logLevel='DEBUG',
ws_host=WS_HOST,
rest_host=REST_HOST
) )
async def transfer_wallet(): async def transfer_wallet():

View File

@@ -2,15 +2,18 @@ import os
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client, Order from bfxapi import Client, WS_HOST, REST_HOST
API_KEY=os.getenv("BFX_KEY") API_KEY=os.getenv("BFX_KEY")
API_SECRET=os.getenv("BFX_SECRET") API_SECRET=os.getenv("BFX_SECRET")
# Canceling orders requires private hosts
bfx = Client( bfx = Client(
API_KEY=API_KEY, API_KEY=API_KEY,
API_SECRET=API_SECRET, API_SECRET=API_SECRET,
logLevel='DEBUG' logLevel='DEBUG',
ws_host=WS_HOST,
rest_host=REST_HOST
) )
@bfx.ws.on('order_closed') @bfx.ws.on('order_closed')

View File

@@ -2,10 +2,12 @@ import os
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, PUB_WS_HOST, PUB_REST_HOST
bfx = Client( bfx = Client(
logLevel='DEBUG' logLevel='DEBUG',
ws_host=PUB_WS_HOST,
rest_host=PUB_REST_HOST
) )
@bfx.ws.on('error') @bfx.ws.on('error')

View File

@@ -2,7 +2,7 @@ import os
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client, Order from bfxapi import Client, WS_HOST, REST_HOST
API_KEY=os.getenv("BFX_KEY") API_KEY=os.getenv("BFX_KEY")
API_SECRET=os.getenv("BFX_SECRET") API_SECRET=os.getenv("BFX_SECRET")
@@ -11,6 +11,8 @@ bfx = Client(
API_KEY=API_KEY, API_KEY=API_KEY,
API_SECRET=API_SECRET, API_SECRET=API_SECRET,
logLevel='DEBUG', logLevel='DEBUG',
ws_host=WS_HOST,
rest_host=REST_HOST,
dead_man_switch=True, # <-- kill all orders if this connection drops dead_man_switch=True, # <-- kill all orders if this connection drops
channel_filter=['wallet'] # <-- only receive wallet updates channel_filter=['wallet'] # <-- only receive wallet updates
) )

View File

@@ -1,13 +1,15 @@
import os
import sys import sys
import time import time
from collections import OrderedDict from collections import OrderedDict
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, PUB_WS_HOST, PUB_REST_HOST
# Retrieving orderbook requires public hosts
bfx = Client( bfx = Client(
manageOrderBooks=True manageOrderBooks=True,
ws_host=PUB_WS_HOST,
rest_host=PUB_REST_HOST
) )
class OrderBook: class OrderBook:

View File

@@ -8,11 +8,9 @@ bfx ws instances to comply with the open subscriptions number constraint (max. 2
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
import asyncio import asyncio
import json
from datetime import datetime
from functools import partial from functools import partial
import websockets as ws import websockets as ws
from bfxapi import Client from bfxapi import Client, PUB_WS_HOST, PUB_REST_HOST
import math import math
import random import random
@@ -27,7 +25,7 @@ def get_random_list_of_tickers():
class Instance: class Instance:
def __init__(self, _id): def __init__(self, _id):
self.id = _id self.id = _id
self.bfx = Client(logLevel='INFO') self.bfx = Client(logLevel='INFO', ws_host=PUB_WS_HOST, rest_host=PUB_REST_HOST)
self.subscriptions = {'trades': {}, 'ticker': {}} self.subscriptions = {'trades': {}, 'ticker': {}}
self.is_ready = False self.is_ready = False

View File

@@ -1,11 +1,13 @@
import os
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, PUB_WS_HOST, PUB_REST_HOST
# Retrieving orderbook requires public hosts
bfx = Client( bfx = Client(
logLevel='INFO' manageOrderBooks=True,
ws_host=PUB_WS_HOST,
rest_host=PUB_REST_HOST
) )
@bfx.ws.on('error') @bfx.ws.on('error')

View File

@@ -2,15 +2,18 @@ import os
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client, Order from bfxapi import Client, Order, WS_HOST, REST_HOST
API_KEY=os.getenv("BFX_KEY") API_KEY=os.getenv("BFX_KEY")
API_SECRET=os.getenv("BFX_SECRET") API_SECRET=os.getenv("BFX_SECRET")
# Sending order requires private hosts
bfx = Client( bfx = Client(
API_KEY=API_KEY, API_KEY=API_KEY,
API_SECRET=API_SECRET, API_SECRET=API_SECRET,
logLevel='DEBUG' logLevel='DEBUG',
ws_host=WS_HOST,
rest_host=REST_HOST
) )
@bfx.ws.on('order_snapshot') @bfx.ws.on('order_snapshot')

View File

@@ -1,11 +1,12 @@
import os
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, PUB_WS_HOST, PUB_REST_HOST
bfx = Client( bfx = Client(
logLevel='DEBUG', logLevel='DEBUG',
ws_host=PUB_WS_HOST,
rest_host=PUB_REST_HOST
) )
@bfx.ws.on('order_book_snapshot') @bfx.ws.on('order_book_snapshot')

View File

@@ -1,11 +1,13 @@
import os
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, PUB_WS_HOST, PUB_REST_HOST
# Retrieving derivative status requires public hosts
bfx = Client( bfx = Client(
logLevel='INFO' logLevel='DEBUG',
ws_host=PUB_WS_HOST,
rest_host=PUB_REST_HOST
) )
@bfx.ws.on('error') @bfx.ws.on('error')

View File

@@ -2,10 +2,13 @@ import os
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, PUB_WS_HOST, PUB_REST_HOST
# Retrieving trades/candles requires public hosts
bfx = Client( bfx = Client(
logLevel='DEBUG', logLevel='DEBUG',
ws_host=PUB_WS_HOST,
rest_host=PUB_REST_HOST,
# Verifies that the local orderbook is up to date # Verifies that the local orderbook is up to date
# with the bitfinex servers # with the bitfinex servers
manageOrderBooks=True manageOrderBooks=True

View File

@@ -1,11 +1,13 @@
import os
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, PUB_WS_HOST, PUB_REST_HOST
# Retrieving tickers requires public hosts
bfx = Client( bfx = Client(
logLevel='DEBUG' logLevel='DEBUG',
ws_host=PUB_WS_HOST,
rest_host=PUB_REST_HOST
) )
@bfx.ws.on('error') @bfx.ws.on('error')

View File

@@ -1,11 +1,13 @@
import os
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, PUB_WS_HOST, PUB_REST_HOST
# Retrieving trades/candles requires public hosts
bfx = Client( bfx = Client(
logLevel='DEBUG' logLevel='DEBUG',
ws_host=PUB_WS_HOST,
rest_host=PUB_REST_HOST
) )
@bfx.ws.on('error') @bfx.ws.on('error')

View File

@@ -2,15 +2,18 @@ import os
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client, Order from bfxapi import Client, Order, WS_HOST, REST_HOST
API_KEY=os.getenv("BFX_KEY") API_KEY=os.getenv("BFX_KEY")
API_SECRET=os.getenv("BFX_SECRET") API_SECRET=os.getenv("BFX_SECRET")
# Update order requires private hosts
bfx = Client( bfx = Client(
API_KEY=API_KEY, API_KEY=API_KEY,
API_SECRET=API_SECRET, API_SECRET=API_SECRET,
logLevel='DEBUG' logLevel='INFO',
ws_host=WS_HOST,
rest_host=REST_HOST
) )
@bfx.ws.on('order_update') @bfx.ws.on('order_update')

View File

@@ -1,15 +1,18 @@
import os import os
import sys import sys
sys.path.append('../../../') sys.path.append('../../../')
from bfxapi import Client from bfxapi import Client, WS_HOST, REST_HOST
API_KEY=os.getenv("BFX_KEY") API_KEY=os.getenv("BFX_KEY")
API_SECRET=os.getenv("BFX_SECRET") API_SECRET=os.getenv("BFX_SECRET")
# Checking wallet balances requires private hosts
bfx = Client( bfx = Client(
API_KEY=API_KEY, API_KEY=API_KEY,
API_SECRET=API_SECRET, API_SECRET=API_SECRET,
logLevel='INFO' logLevel='INFO',
ws_host=WS_HOST,
rest_host=REST_HOST
) )
@bfx.ws.on('wallet_snapshot') @bfx.ws.on('wallet_snapshot')

View File

@@ -2,4 +2,4 @@
This module contains the current version of the bfxapi lib This module contains the current version of the bfxapi lib
""" """
__version__ = '2.0.1' __version__ = '2.0.2'

View File

@@ -187,7 +187,7 @@ class BfxWebsocket(GenericWebsocket):
- `unsubscribed` (Subscription): A channel has been un-subscribed - `unsubscribed` (Subscription): A channel has been un-subscribed
""" """
def __init__(self, API_KEY=None, API_SECRET=None, host='wss://api-pub.bitfinex.com/ws/2', def __init__(self, host, API_KEY=None, API_SECRET=None,
manageOrderBooks=False, dead_man_switch=False, ws_capacity=25, logLevel='INFO', parse_float=float, manageOrderBooks=False, dead_man_switch=False, ws_capacity=25, logLevel='INFO', parse_float=float,
channel_filter=[], *args, **kwargs): channel_filter=[], *args, **kwargs):
self.API_KEY = API_KEY self.API_KEY = API_KEY