Skip to content

jsonschema.exceptions.ValidationError: 'XBT' is not of type 'number' #550

@NeutronBlast

Description

@NeutronBlast

Name: 'XBT' is not of type 'number'
Description: This error is generated when I'm going to use Trade_getBucketed in order to get OHLCV data. I've been using Bitmex API for months and I never had issues with this method but it started generating errors today. This my usage:

import bitmex


class Bitmex:
    def __init__(self, api_key, api_secret):
        self.api_key = api_key
        self.api_secret = api_secret
        self.exchange_name_tv = 'BITMEX'

    @staticmethod
    def format_ohlcv(ohlcv_data):
        """
        Formats OHLCV (Open, High, Low, Close, Volume) data into a specific structure.

        Parameters:
        - ohlcv_data (list): List of dictionaries containing OHLCV data.

        Returns:
        - list: Transformed OHLCV data with specific fields (open, close, high, low, volume, time).
        """
        transformed_data = [
            {
                'open': item['open'],
                'close': item['close'],
                'high': item['high'],
                'low': item['low'],
                'volume': item['volume'],
                'time': int(item['timestamp'].timestamp() * 1000)  # Convert to milliseconds
            }
            for item in ohlcv_data
        ]

        return transformed_data

    def get_ohlc(self, ticker, timeframe):
        """
        Retrieves OHLCV (Open, High, Low, Close, Volume) data for a specific ticker and timeframe.

        Parameters:
        - ticker (str): Symbol or identifier of the financial instrument.
        - timeframe (str): Timeframe for the OHLCV data (e.g., '1h', '1d').

        Returns:
        - list: OHLCV data in a specific format after applying formatting.

        Example:
        [{'open': 100, 'close': 110, 'high': 120, 'low': 90, 'volume': 1000, 'time': 1640995200000},
         {'open': 110, 'close': 120, 'high': 130, 'low': 100, 'volume': 1500, 'time': 1641081600000}]

        """
        client = bitmex.bitmex(test=False, api_key=self.api_key, api_secret=self.api_secret)
        result = client.Trade.Trade_getBucketed(binSize=timeframe, symbol=ticker, reverse=True, count=500).result()
        result = self.format_ohlcv(result[0])
        return result

Call:

import os
import unittest

from dotenv import load_dotenv

from exchanges.bitmex.bitmex import Bitmex


class TestBitmex(unittest.TestCase):
    def setUp(self):
        # Load dotenv and create a Bitget object
        load_dotenv()

        self.bitmex = Bitmex(os.getenv('BITMEX_API_KEY'),
                             os.getenv('BITMEX_API_SECRET'))

    def test_get_ohlc(self):
        result = self.bitmex.get_ohlc('.BVOL24H', "1d")
        print(result)
        print(len(result))


if __name__ == '__main__':
    unittest.main()

Traceback of the error:

Traceback (most recent call last):
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\common.py", line 34, in wrapper
    return method(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\validator20.py", line 254, in validate_value_type
    validate_schema_value(
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\ref_validators.py", line 118, in validate_schema_value
    ).validate(value)
      ^^^^^^^^^^^^^^^
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\jsonschema\validators.py", line 438, in validate
    raise error
jsonschema.exceptions.ValidationError: 'XBT' is not of type 'number'

Failed validating 'type' in schema:
    {'default': 'XBT', 'format': 'double', 'type': 'number'}

On instance:
    'XBT'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\tests\test_exchanges\test_bitmex\test_bitmex.py", line 18, in test_get_ohlc
    result = self.bitmex.get_ohlc('.BVOL24H', "1d")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\exchanges\bitmex\bitmex.py", line 52, in get_ohlc
    client = bitmex.bitmex(test=False, api_key=self.api_key, api_secret=self.api_secret)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\bitmex.py", line 35, in bitmex
    return SwaggerClient.from_url(spec_uri, config=config, http_client=request_client)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\bravado\client.py", line 109, in from_url
    return cls.from_spec(spec_dict, spec_url, http_client, config)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\bravado\client.py", line 135, in from_spec
    swagger_spec = Spec.from_dict(
                   ^^^^^^^^^^^^^^^
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\bravado_core\spec.py", line 355, in from_dict
    spec.build()
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\bravado_core\spec.py", line 367, in build
    self._validate_spec()
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\bravado_core\spec.py", line 360, in _validate_spec
    self.resolver = validator20.validate_spec(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\validator20.py", line 186, in validate_spec
    validate_apis(cast("dict[Any, Any]", apis), bound_deref)
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\validator20.py", line 430, in validate_apis
    validate_responses(api_name, oper_name, oper_body["responses"], deref)
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\validator20.py", line 310, in validate_responses
    validate_definition(
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\validator20.py", line 575, in validate_definition
    validate_arrays_in_definition(
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\validator20.py", line 514, in validate_arrays_in_definition
    validate_definition(
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\validator20.py", line 574, in validate_definition
    validate_defaults_in_definition(definition, deref)
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\validator20.py", line 498, in validate_defaults_in_definition
    validate_property_default(property_spec, deref)
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\validator20.py", line 489, in validate_property_default
    validate_value_type(
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\common.py", line 36, in wrapper
    raise SwaggerValidationError(str(e), e).with_traceback(sys.exc_info()[2])
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\common.py", line 34, in wrapper
    return method(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\validator20.py", line 254, in validate_value_type
    validate_schema_value(
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\swagger_spec_validator\ref_validators.py", line 118, in validate_schema_value
    ).validate(value)
      ^^^^^^^^^^^^^^^
  File "C:\Users\Hyper\OneDrive\Documents\GitHub\RTrader-Worker\venv\Lib\site-packages\jsonschema\validators.py", line 438, in validate
    raise error
swagger_spec_validator.common.SwaggerValidationError: ("'XBT' is not of type 'number'\n\nFailed validating 'type' in schema:\n    {'default': 'XBT', 'format': 'double', 'type': 'number'}\n\nOn instance:\n    'XBT'", <ValidationError: "'XBT' is not of type 'number'">)



Ran 1 test in 1.800s

FAILED (errors=1)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions