async def get_last_traded_price(cls, trading_pair: str) -> Decimal: factory = build_coinbase_pro_web_assistant_factory() rest_assistant = await factory.get_rest_assistant() endpoint = f"{CONSTANTS.PRODUCTS_PATH_URL}/{trading_pair}/ticker" request = CoinbaseProRESTRequest(RESTMethod.GET, endpoint=endpoint) response = await rest_assistant.call(request) resp_json = await response.json() return Decimal(resp_json["price"])
def __init__( self, trading_pairs: Optional[List[str]] = None, web_assistants_factory: Optional[WebAssistantsFactory] = None, ): super().__init__(trading_pairs) self._web_assistants_factory = web_assistants_factory or build_coinbase_pro_web_assistant_factory() self._rest_assistant = None
def test_get_snapshot_raises_on_status_code(self, mock_api): url = f"{CONSTANTS.REST_URL}{CONSTANTS.PRODUCTS_PATH_URL}/{self.trading_pair}/book?level=3" resp = self.get_products_book_response_mock() mock_api.get(url, body=json.dumps(resp), status=401) rest_assistant = self.ev_loop.run_until_complete( build_coinbase_pro_web_assistant_factory().get_rest_assistant()) with self.assertRaises(IOError): self.async_run_with_timeout( coroutine=CoinbaseProAPIOrderBookDataSource.get_snapshot( rest_assistant, self.trading_pair))
def test_get_snapshot(self, mock_api): url = f"{CONSTANTS.REST_URL}{CONSTANTS.PRODUCTS_PATH_URL}/{self.trading_pair}/book?level=3" resp = self.get_products_book_response_mock() mock_api.get(url, body=json.dumps(resp)) rest_assistant = self.ev_loop.run_until_complete( build_coinbase_pro_web_assistant_factory().get_rest_assistant()) ret = self.async_run_with_timeout( coroutine=CoinbaseProAPIOrderBookDataSource.get_snapshot( rest_assistant, self.trading_pair)) self.assertEqual(resp, ret) # shallow comparison ok
def setUp(self) -> None: super().setUp() self.mocking_assistant = NetworkMockingAssistant() auth = CoinbaseProAuth(api_key="SomeAPIKey", secret_key="SomeSecretKey", passphrase="SomePassPhrase") web_assistants_factory = build_coinbase_pro_web_assistant_factory(auth) self.data_source = CoinbaseProAPIOrderBookDataSource( trading_pairs=[self.trading_pair], web_assistants_factory=web_assistants_factory ) self.data_source.logger().setLevel(1) self.data_source.logger().addHandler(self) self.log_records = [] self.async_tasks: List[asyncio.Task] = []
async def fetch_trading_pairs() -> List[str]: trading_pair_list = [] try: factory = build_coinbase_pro_web_assistant_factory() rest_assistant = await factory.get_rest_assistant() request = CoinbaseProRESTRequest(RESTMethod.GET, endpoint=CONSTANTS.PRODUCTS_PATH_URL) response = await rest_assistant.call(request) if response.status == 200: markets = await response.json() raw_trading_pairs: List[str] = list(map(lambda details: details.get('id'), markets)) trading_pair_list: List[str] = [] for raw_trading_pair in raw_trading_pairs: trading_pair_list.append(raw_trading_pair) except Exception: # Do nothing if the request fails -- there will be no autocomplete for coinbase trading pairs pass return trading_pair_list