mirror of
https://github.com/aljazceru/bitfinex-api-py.git
synced 2025-12-19 23:04:21 +01:00
Create and use decimal object instead of floats
This commit is contained in:
committed by
Jacob Plaster
parent
8dc745f149
commit
afbb4a670c
@@ -6,5 +6,6 @@ from .client import Client
|
||||
from .models import (Order, Trade, OrderBook, Subscription, Wallet,
|
||||
Position, FundingLoan, FundingOffer, FundingCredit)
|
||||
from .websockets.GenericWebsocket import GenericWebsocket
|
||||
from .utils.Decimal import Decimal
|
||||
|
||||
NAME = 'bfxapi'
|
||||
|
||||
@@ -5,7 +5,6 @@ Module used to describe all of the different data types
|
||||
import time
|
||||
import datetime
|
||||
|
||||
|
||||
class OrderType:
|
||||
"""
|
||||
Enum used to describe all of the different order types available for use
|
||||
|
||||
@@ -5,7 +5,6 @@ Module used to describe all of the different data types
|
||||
import time
|
||||
import datetime
|
||||
|
||||
|
||||
class OrderType:
|
||||
"""
|
||||
Enum used to describe all of the different order types available for use
|
||||
|
||||
@@ -22,11 +22,13 @@ class BfxRest:
|
||||
"""
|
||||
|
||||
def __init__(self, API_KEY, API_SECRET, host='https://api.bitfinex.com/v2', loop=None,
|
||||
logLevel='INFO', *args, **kwargs):
|
||||
logLevel='INFO', parse_float=float, *args, **kwargs):
|
||||
self.loop = loop or asyncio.get_event_loop()
|
||||
self.API_KEY = API_KEY
|
||||
self.API_SECRET = API_SECRET
|
||||
self.host = host
|
||||
# this value can also be set to bfxapi.Decimal for much higher precision
|
||||
self.parse_float = parse_float
|
||||
self.logger = CustomLogger('BfxRest', logLevel=logLevel)
|
||||
|
||||
async def fetch(self, endpoint, params=""):
|
||||
@@ -42,7 +44,8 @@ class BfxRest:
|
||||
if resp.status is not 200:
|
||||
raise Exception('GET {} failed with status {} - {}'
|
||||
.format(url, resp.status, text))
|
||||
return await resp.json()
|
||||
parsed = json.loads(text, parse_float=self.parse_float)
|
||||
return parsed
|
||||
|
||||
async def post(self, endpoint, data={}, params=""):
|
||||
"""
|
||||
@@ -61,7 +64,8 @@ class BfxRest:
|
||||
if resp.status is not 200:
|
||||
raise Exception('POST {} failed with status {} - {}'
|
||||
.format(url, resp.status, text))
|
||||
return await resp.json()
|
||||
parsed = json.loads(text, parse_float=self.parse_float)
|
||||
return parsed
|
||||
|
||||
##################################################
|
||||
# Public Data #
|
||||
|
||||
52
bfxapi/utils/Decimal.py
Normal file
52
bfxapi/utils/Decimal.py
Normal file
@@ -0,0 +1,52 @@
|
||||
import decimal as dec
|
||||
|
||||
class Decimal(dec.Decimal):
|
||||
|
||||
@classmethod
|
||||
def from_float(cls, f):
|
||||
return cls(str(f))
|
||||
|
||||
def __new__(cls, value=0, *args, **kwargs):
|
||||
if isinstance(value, float):
|
||||
value = Decimal.from_float(value)
|
||||
return super(Decimal, cls).__new__(cls, value, *args, **kwargs)
|
||||
|
||||
def __mul__(self, rhs):
|
||||
if isinstance(rhs, float):
|
||||
rhs = Decimal.from_float(rhs)
|
||||
return Decimal(super().__mul__(rhs))
|
||||
|
||||
def __rmul__(self, lhs):
|
||||
return self.__mul__(lhs)
|
||||
|
||||
def __add__(self, rhs):
|
||||
if isinstance(rhs, float):
|
||||
rhs = Decimal.from_float(rhs)
|
||||
return Decimal(super().__add__(rhs))
|
||||
|
||||
def __radd__(self, lhs):
|
||||
return self.__add__(lhs)
|
||||
|
||||
def __sub__(self, rhs):
|
||||
if isinstance(rhs, float):
|
||||
rhs = Decimal.from_float(rhs)
|
||||
return Decimal(super().__sub__(rhs))
|
||||
|
||||
def __rsub__(self, lhs):
|
||||
return self.__sub__(lhs)
|
||||
|
||||
def __truediv__(self, rhs):
|
||||
if isinstance(rhs, float):
|
||||
rhs = Decimal.from_float(rhs)
|
||||
return Decimal(super().__truediv__(rhs))
|
||||
|
||||
def __rtruediv__(self, rhs):
|
||||
return self.__truediv__(rhs)
|
||||
|
||||
def __floordiv__(self, rhs):
|
||||
if isinstance(rhs, float):
|
||||
rhs = Decimal.from_float(rhs)
|
||||
return Decimal(super().__floordiv__(rhs))
|
||||
|
||||
def __rfloordiv__ (self, rhs):
|
||||
return self.__floordiv__(rhs)
|
||||
@@ -7,7 +7,6 @@ import json
|
||||
import time
|
||||
import random
|
||||
|
||||
from decimal import *
|
||||
from .GenericWebsocket import GenericWebsocket, AuthError
|
||||
from .SubscriptionManager import SubscriptionManager
|
||||
from .WalletManager import WalletManager
|
||||
|
||||
Reference in New Issue
Block a user