1
0

nordnet_client is now gated behind soft import

This commit is contained in:
Jon Michael Aanes 2024-08-02 07:44:21 +02:00
parent 3eead4bd35
commit e5ba8f371f
Signed by: Jmaa
SSH Key Fingerprint: SHA256:Ab0GfHGCblESJx7JRE4fj4bFy/KRpeLhi41y4pF3sNA
4 changed files with 36 additions and 12 deletions

View File

@ -55,20 +55,31 @@ __all__ = [
'static', 'static',
] ]
import importlib
import logging import logging
from . import ( from . import (
data, data,
defi_kraken,
defi_kucoin,
defi_partisia_blockchain,
static, static,
) )
from ._version import __version__ from ._version import __version__
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
try:
from . import investbank_nordnet def load_backend(name: str) -> object | None:
except ImportError: try:
logger.exception('Could not import %s. Are module requirements installed?', 'fin_depo.investbank_nordnet') return importlib.import_module(f'{__name__}.{name}')
except Exception:
logger.exception(
'Backend %s could not be imported? Are all module dependencies installed?',
name,
)
return None
# Import modules
defi_kraken = load_backend('defi_kraken')
defi_kucoin = load_backend('defi_kucoin')
investbank_nordnet = load_backend('investbank_nordnet')
defi_partisia_blockchain = load_backend('defi_partisia_blockchain')

View File

@ -139,7 +139,10 @@ class KucoinDepoFetcher(DepoFetcher):
return self._get_order_details(response['orderId'], input_asset, output_asset) return self._get_order_details(response['orderId'], input_asset, output_asset)
def _get_order_details( def _get_order_details(
self, order_id: str, input_asset: fin_defs.Asset, output_asset: fin_defs.Asset, self,
order_id: str,
input_asset: fin_defs.Asset,
output_asset: fin_defs.Asset,
) -> TradeOrderDetails: ) -> TradeOrderDetails:
"""Determine the order details for the order with the given id. """Determine the order details for the order with the given id.
@ -164,14 +167,19 @@ class KucoinDepoFetcher(DepoFetcher):
fee_asset=fin_defs.WELL_KNOWN_SYMBOLS[order_details['feeCurrency']], fee_asset=fin_defs.WELL_KNOWN_SYMBOLS[order_details['feeCurrency']],
fee_amount=Decimal(order_details['fee']), fee_amount=Decimal(order_details['fee']),
executed_time=datetime.datetime.fromtimestamp( executed_time=datetime.datetime.fromtimestamp(
order_details['createdAt'] / 1000, tz=datetime.UTC, order_details['createdAt'] / 1000,
tz=datetime.UTC,
), ),
order_id=order_id, order_id=order_id,
raw_order_details=order_details, raw_order_details=order_details,
) )
def _get_order_with_retries( def _get_order_with_retries(
self, order_id: str, *, num_retries: int, sleep_between_tries: float = 1.0, self,
order_id: str,
*,
num_retries: int,
sleep_between_tries: float = 1.0,
) -> dict: ) -> dict:
"""Get the order details from KuCoin backend. """Get the order details from KuCoin backend.

View File

@ -30,7 +30,11 @@ def asset_from_instrument(instrument: Instrument) -> fin_defs.Asset | None:
return None return None
symbol = instrument.symbol symbol = instrument.symbol
exchange_id = instrument.tradables[0].mic exchange_id = instrument.tradables[0].mic
return fin_defs.Stock(symbol, fin_defs.EXCHANGES_BY_IDS[exchange_id], nordnet_id = instrument.instrument_id) return fin_defs.Stock(
symbol,
fin_defs.EXCHANGES_BY_IDS[exchange_id],
nordnet_id=instrument.instrument_id,
)
EMPTY_DICT: Mapping[str, str | int] = frozendict() EMPTY_DICT: Mapping[str, str | int] = frozendict()

View File

@ -7,7 +7,8 @@ import fin_depo
def test_get_depo(): def test_get_depo():
fetcher = fin_depo.static.StaticDepoFetcher( fetcher = fin_depo.static.StaticDepoFetcher(
'Test', {fin_defs.BTC: Decimal(1000), fin_defs.USD: Decimal(2000)}, 'Test',
{fin_defs.BTC: Decimal(1000), fin_defs.USD: Decimal(2000)},
) )
depo = fetcher.get_depo() depo = fetcher.get_depo()