fix: missing pairs available with default precision

api-breakage
Morty Space 4 years ago
parent 279939f919
commit 7cb325b591
  1. 2
      src/cryptocom/exchange/coins.py
  2. 9
      src/cryptocom/exchange/market.py
  3. 1
      src/cryptocom/exchange/pairs.py
  4. 10
      src/cryptocom/exchange/structs.py
  5. 7
      tests/test_private.py

@ -160,6 +160,7 @@ PERP = Coin("PERP")
PLA = Coin("PLA") PLA = Coin("PLA")
POLS = Coin("POLS") POLS = Coin("POLS")
POLY = Coin("POLY") POLY = Coin("POLY")
POND = Coin("POND")
POWR = Coin("POWR") POWR = Coin("POWR")
PRQ = Coin("PRQ") PRQ = Coin("PRQ")
PYR = Coin("PYR") PYR = Coin("PYR")
@ -211,6 +212,7 @@ TRIBE = Coin("TRIBE")
TRU = Coin("TRU") TRU = Coin("TRU")
TUSD = Coin("TUSD") TUSD = Coin("TUSD")
UMA = Coin("UMA") UMA = Coin("UMA")
UNFI = Coin("UNFI")
UNI = Coin("UNI") UNI = Coin("UNI")
USDC = Coin("USDC") USDC = Coin("USDC")
USDP = Coin("USDP") USDP = Coin("USDP")

@ -4,6 +4,7 @@ from . import pairs
from .api import ApiProvider from .api import ApiProvider
from .structs import ( from .structs import (
Candle, Candle,
DefaultPairDict,
MarketTicker, MarketTicker,
MarketTrade, MarketTrade,
OrderBook, OrderBook,
@ -19,12 +20,16 @@ class Exchange:
def __init__(self, api: ApiProvider = None): def __init__(self, api: ApiProvider = None):
self.api = api or ApiProvider(auth_required=False) self.api = api or ApiProvider(auth_required=False)
self.pairs = {pair.name: pair for pair in pairs.all()} self.pairs = DefaultPairDict(
**{pair.name: pair for pair in pairs.all()}
)
async def sync_pairs(self): async def sync_pairs(self):
"""Use this method to sync pairs if you have issues with missing """Use this method to sync pairs if you have issues with missing
pairs in library side.""" pairs in library side."""
self.pairs = {pair.name: pair for pair in (await self.get_pairs())} self.pairs = DefaultPairDict(
**{pair.name: pair for pair in (await self.get_pairs())}
)
async def get_pairs(self) -> List[Pair]: async def get_pairs(self) -> List[Pair]:
"""List all available market pairs and store to provide pairs info.""" """List all available market pairs and store to provide pairs info."""

@ -207,7 +207,6 @@ KSM_USDT = Pair("KSM_USDT", price_precision=3, quantity_precision=3)
LDO_BTC = Pair("LDO_BTC", price_precision=9, quantity_precision=2) LDO_BTC = Pair("LDO_BTC", price_precision=9, quantity_precision=2)
LDO_USDT = Pair("LDO_USDT", price_precision=4, quantity_precision=2) LDO_USDT = Pair("LDO_USDT", price_precision=4, quantity_precision=2)
LINK_BTC = Pair("LINK_BTC", price_precision=7, quantity_precision=2) LINK_BTC = Pair("LINK_BTC", price_precision=7, quantity_precision=2)
LINK_CRO = Pair("LINK_CRO", price_precision=2, quantity_precision=2)
LINK_USDC = Pair("LINK_USDC", price_precision=3, quantity_precision=3) LINK_USDC = Pair("LINK_USDC", price_precision=3, quantity_precision=3)
LINK_USDT = Pair("LINK_USDT", price_precision=3, quantity_precision=2) LINK_USDT = Pair("LINK_USDT", price_precision=3, quantity_precision=2)
LPT_USDC = Pair("LPT_USDC", price_precision=3, quantity_precision=3) LPT_USDC = Pair("LPT_USDC", price_precision=3, quantity_precision=3)

@ -49,6 +49,16 @@ class Pair:
return self.name.__hash__() return self.name.__hash__()
class DefaultPairDict(dict):
"""Use default precision for old missing pairs."""
def __getitem__(self, name: str) -> Pair:
try:
return super().__getitem__(name)
except KeyError:
return Pair(name, 8, 8)
@dataclass @dataclass
class MarketTicker: class MarketTicker:
pair: Pair pair: Pair

@ -55,6 +55,13 @@ async def test_account_get_balance(account: cro.Account):
assert coin in local_coins assert coin in local_coins
@pytest.mark.asyncio
async def test_missing_old_pairs(account: cro.Account):
missing_pair = account.pairs["LINK_CRO"]
assert missing_pair.price_precision == 8
assert missing_pair.quantity_precision == 8
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_deposit_withdrawal_history( async def test_deposit_withdrawal_history(
account: cro.Account, exchange: cro.Exchange account: cro.Account, exchange: cro.Exchange

Loading…
Cancel
Save