OctoBot-Trading 2.4.83__tar.gz → 2.4.85__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/CHANGELOG.md +8 -0
  2. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85/OctoBot_Trading.egg-info}/PKG-INFO +2 -2
  3. {OctoBot-Trading-2.4.83/OctoBot_Trading.egg-info → OctoBot-Trading-2.4.85}/PKG-INFO +2 -2
  4. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/README.md +1 -1
  5. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/__init__.py +1 -1
  6. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/__init__.py +0 -4
  7. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/exchange.py +0 -8
  8. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/constants.py +7 -14
  9. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/errors.py +7 -0
  10. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/__init__.py +2 -4
  11. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/types/rest_exchange.py +35 -5
  12. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/util/__init__.py +2 -4
  13. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/util/exchange_util.py +17 -9
  14. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/__init__.py +2 -0
  15. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/config_util.py +12 -0
  16. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/test_tools/exchange_data.py +19 -1
  17. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/util/test_exchange_util.py +6 -22
  18. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/LICENSE +0 -0
  19. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/MANIFEST.in +0 -0
  20. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/OctoBot_Trading.egg-info/SOURCES.txt +0 -0
  21. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/OctoBot_Trading.egg-info/dependency_links.txt +0 -0
  22. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/OctoBot_Trading.egg-info/not-zip-safe +0 -0
  23. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/OctoBot_Trading.egg-info/requires.txt +0 -0
  24. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/OctoBot_Trading.egg-info/top_level.txt +0 -0
  25. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/channels.py +0 -0
  26. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/contracts.py +0 -0
  27. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/modes.py +0 -0
  28. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/orders.py +0 -0
  29. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/portfolio.py +0 -0
  30. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/positions.py +0 -0
  31. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/profitability.py +0 -0
  32. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/storage.py +0 -0
  33. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/symbol_data.py +0 -0
  34. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/trader.py +0 -0
  35. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/api/trades.py +0 -0
  36. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/enums.py +0 -0
  37. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_channel.py +0 -0
  38. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/__init__.py +0 -0
  39. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/contracts/__init__.py +0 -0
  40. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/contracts/contract_factory.py +0 -0
  41. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/contracts/future_contract.py +0 -0
  42. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/contracts/margin_contract.py +0 -0
  43. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/exchange_symbol_data.py +0 -0
  44. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/exchange_symbols_data.py +0 -0
  45. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/__init__.py +0 -0
  46. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/channel/__init__.py +0 -0
  47. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/channel/funding.py +0 -0
  48. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/channel/funding_updater.py +0 -0
  49. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/channel/funding_updater_simulator.py +0 -0
  50. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/funding/funding_manager.py +0 -0
  51. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/kline/__init__.py +0 -0
  52. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/kline/channel/__init__.py +0 -0
  53. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/kline/channel/kline.py +0 -0
  54. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/kline/channel/kline_updater.py +0 -0
  55. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/kline/channel/kline_updater_simulator.py +0 -0
  56. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/kline/kline_manager.py +0 -0
  57. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/__init__.py +0 -0
  58. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/candles_adapter.py +0 -0
  59. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/candles_manager.py +0 -0
  60. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/channel/__init__.py +0 -0
  61. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/channel/ohlcv.py +0 -0
  62. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater.py +0 -0
  63. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/channel/ohlcv_updater_simulator.py +0 -0
  64. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ohlcv/preloaded_candles_manager.py +0 -0
  65. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/order_book/__init__.py +0 -0
  66. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/order_book/channel/__init__.py +0 -0
  67. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/order_book/channel/order_book.py +0 -0
  68. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/order_book/channel/order_book_updater.py +0 -0
  69. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/order_book/channel/order_book_updater_simulator.py +0 -0
  70. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/order_book/order_book_manager.py +0 -0
  71. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/__init__.py +0 -0
  72. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/channel/__init__.py +0 -0
  73. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/channel/price.py +0 -0
  74. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/channel/prices_updater.py +0 -0
  75. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/channel/prices_updater_simulator.py +0 -0
  76. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/price_events_manager.py +0 -0
  77. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/prices/prices_manager.py +0 -0
  78. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/recent_trades/__init__.py +0 -0
  79. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/recent_trades/channel/__init__.py +0 -0
  80. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/recent_trades/channel/recent_trade.py +0 -0
  81. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater.py +0 -0
  82. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/recent_trades/channel/recent_trade_updater_simulator.py +0 -0
  83. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/recent_trades/recent_trades_manager.py +0 -0
  84. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ticker/__init__.py +0 -0
  85. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ticker/channel/__init__.py +0 -0
  86. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ticker/channel/ticker.py +0 -0
  87. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ticker/channel/ticker_updater.py +0 -0
  88. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ticker/channel/ticker_updater_simulator.py +0 -0
  89. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchange_data/ticker/ticker_manager.py +0 -0
  90. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/abstract_exchange.py +0 -0
  91. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/abstract_websocket_exchange.py +0 -0
  92. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/adapters/__init__.py +0 -0
  93. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/adapters/abstract_adapter.py +0 -0
  94. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/config/__init__.py +0 -0
  95. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/config/backtesting_exchange_config.py +0 -0
  96. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/config/exchange_config_data.py +0 -0
  97. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/__init__.py +0 -0
  98. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/__init__.py +0 -0
  99. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/ccxt_adapter.py +0 -0
  100. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/ccxt_client_util.py +0 -0
  101. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/ccxt_clients_cache.py +0 -0
  102. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/ccxt_connector.py +0 -0
  103. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/ccxt_websocket_connector.py +0 -0
  104. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/constants.py +0 -0
  105. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/ccxt/enums.py +0 -0
  106. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/simulator/__init__.py +0 -0
  107. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/simulator/ccxt_client_simulation.py +0 -0
  108. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_adapter.py +0 -0
  109. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/connectors/simulator/exchange_simulator_connector.py +0 -0
  110. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchange_builder.py +0 -0
  111. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchange_channels.py +0 -0
  112. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchange_details.py +0 -0
  113. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchange_factory.py +0 -0
  114. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchange_manager.py +0 -0
  115. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchange_websocket_factory.py +0 -0
  116. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/exchanges.py +0 -0
  117. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/implementations/__init__.py +0 -0
  118. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/implementations/default_rest_exchange.py +0 -0
  119. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/implementations/default_websocket_exchange.py +0 -0
  120. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/implementations/exchange_simulator.py +0 -0
  121. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/traders/__init__.py +0 -0
  122. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/traders/trader.py +0 -0
  123. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/traders/trader_simulator.py +0 -0
  124. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/types/__init__.py +0 -0
  125. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/types/websocket_exchange.py +0 -0
  126. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/util/exchange_market_status_fixer.py +0 -0
  127. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/util/symbol_details.py +0 -0
  128. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/exchanges/util/websockets_util.py +0 -0
  129. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/__init__.py +0 -0
  130. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/abstract_trading_mode.py +0 -0
  131. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/channel/__init__.py +0 -0
  132. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/channel/abstract_mode_consumer.py +0 -0
  133. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/channel/abstract_mode_producer.py +0 -0
  134. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/channel/mode.py +0 -0
  135. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/mode_activity.py +0 -0
  136. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/mode_config.py +0 -0
  137. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/modes_factory.py +0 -0
  138. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/modes_util.py +0 -0
  139. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/__init__.py +0 -0
  140. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/__init__.py +0 -0
  141. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/account_balance.py +0 -0
  142. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/amount.py +0 -0
  143. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/configuration.py +0 -0
  144. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/position.py +0 -0
  145. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/price.py +0 -0
  146. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/run_persistence.py +0 -0
  147. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/trading_signals.py +0 -0
  148. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/basic_keywords/user_inputs.py +0 -0
  149. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/context_management.py +0 -0
  150. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/dsl/__init__.py +0 -0
  151. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/dsl/quantity.py +0 -0
  152. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/script_keywords/dsl/values.py +0 -0
  153. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/scripted_trading_mode/__init__.py +0 -0
  154. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/modes/scripted_trading_mode/abstract_scripted_trading_mode.py +0 -0
  155. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/octobot_channel_consumer.py +0 -0
  156. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/__init__.py +0 -0
  157. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/exchange_personal_data.py +0 -0
  158. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/__init__.py +0 -0
  159. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/channel/__init__.py +0 -0
  160. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/channel/orders.py +0 -0
  161. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/channel/orders_updater.py +0 -0
  162. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/channel/orders_updater_simulator.py +0 -0
  163. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/decimal_order_adapter.py +0 -0
  164. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/groups/__init__.py +0 -0
  165. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/groups/balanced_take_profit_and_stop_order_group.py +0 -0
  166. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/groups/group_util.py +0 -0
  167. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/groups/one_cancels_the_other_order_group.py +0 -0
  168. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/order.py +0 -0
  169. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/order_adapter.py +0 -0
  170. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/order_factory.py +0 -0
  171. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/order_group.py +0 -0
  172. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/order_state.py +0 -0
  173. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/order_util.py +0 -0
  174. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/orders_manager.py +0 -0
  175. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/orders_storage_operations.py +0 -0
  176. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/__init__.py +0 -0
  177. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/cancel_order_state.py +0 -0
  178. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/close_order_state.py +0 -0
  179. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/fill_order_state.py +0 -0
  180. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/open_order_state.py +0 -0
  181. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/order_state_factory.py +0 -0
  182. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/pending_creation_chained_order_state.py +0 -0
  183. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/states/pending_creation_order_state.py +0 -0
  184. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/__init__.py +0 -0
  185. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/__init__.py +0 -0
  186. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/buy_limit_order.py +0 -0
  187. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/limit_order.py +0 -0
  188. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/sell_limit_order.py +0 -0
  189. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/stop_loss_limit_order.py +0 -0
  190. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/stop_loss_order.py +0 -0
  191. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/take_profit_limit_order.py +0 -0
  192. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/limit/take_profit_order.py +0 -0
  193. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/market/__init__.py +0 -0
  194. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/market/buy_market_order.py +0 -0
  195. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/market/market_order.py +0 -0
  196. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/market/sell_market_order.py +0 -0
  197. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/trailing/__init__.py +0 -0
  198. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_limit_order.py +0 -0
  199. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/trailing/trailing_stop_order.py +0 -0
  200. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/unknown_order.py +0 -0
  201. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/orders/types/unsupported_order.py +0 -0
  202. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/__init__.py +0 -0
  203. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/asset.py +0 -0
  204. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/assets/__init__.py +0 -0
  205. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/assets/future_asset.py +0 -0
  206. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/assets/margin_asset.py +0 -0
  207. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/assets/spot_asset.py +0 -0
  208. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/channel/__init__.py +0 -0
  209. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/channel/balance.py +0 -0
  210. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/channel/balance_updater.py +0 -0
  211. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/channel/balance_updater_simulator.py +0 -0
  212. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/history/__init__.py +0 -0
  213. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/history/historical_asset_value.py +0 -0
  214. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/history/historical_asset_value_factory.py +0 -0
  215. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/history/historical_portfolio_value_manager.py +0 -0
  216. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/portfolio.py +0 -0
  217. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/portfolio_factory.py +0 -0
  218. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/portfolio_manager.py +0 -0
  219. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/portfolio_profitability.py +0 -0
  220. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/portfolio_util.py +0 -0
  221. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/portfolio_value_holder.py +0 -0
  222. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/sub_portfolio.py +0 -0
  223. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/types/__init__.py +0 -0
  224. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/types/future_portfolio.py +0 -0
  225. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/types/margin_portfolio.py +0 -0
  226. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/types/spot_portfolio.py +0 -0
  227. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/portfolios/value_converter.py +0 -0
  228. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/__init__.py +0 -0
  229. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/channel/__init__.py +0 -0
  230. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/channel/positions.py +0 -0
  231. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/channel/positions_updater.py +0 -0
  232. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/channel/positions_updater_simulator.py +0 -0
  233. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/position.py +0 -0
  234. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/position_factory.py +0 -0
  235. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/position_state.py +0 -0
  236. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/position_util.py +0 -0
  237. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/positions_manager.py +0 -0
  238. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/states/__init__.py +0 -0
  239. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/states/active_position_state.py +0 -0
  240. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/states/idle_position_state.py +0 -0
  241. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/states/liquidate_position_state.py +0 -0
  242. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/states/position_state_factory.py +0 -0
  243. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/types/__init__.py +0 -0
  244. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/types/inverse_position.py +0 -0
  245. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/positions/types/linear_position.py +0 -0
  246. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/state.py +0 -0
  247. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/__init__.py +0 -0
  248. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/channel/__init__.py +0 -0
  249. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/channel/trades.py +0 -0
  250. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/channel/trades_updater.py +0 -0
  251. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/trade.py +0 -0
  252. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/trade_factory.py +0 -0
  253. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/trade_pnl.py +0 -0
  254. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/trades_manager.py +0 -0
  255. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/trades/trades_util.py +0 -0
  256. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/__init__.py +0 -0
  257. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/transaction.py +0 -0
  258. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/transaction_factory.py +0 -0
  259. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/transactions_manager.py +0 -0
  260. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/types/__init__.py +0 -0
  261. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/types/blockchain_transaction.py +0 -0
  262. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/types/fee_transaction.py +0 -0
  263. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/types/realised_pnl_transaction.py +0 -0
  264. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/personal_data/transactions/types/transfer_transaction.py +0 -0
  265. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/__init__.py +0 -0
  266. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/channel/__init__.py +0 -0
  267. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/channel/remote_trading_signal.py +0 -0
  268. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/channel/remote_trading_signal_channel_factory.py +0 -0
  269. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/channel/signal_producer.py +0 -0
  270. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/signal_creation.py +0 -0
  271. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/trading_signal_bundle_builder.py +0 -0
  272. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/signals/util.py +0 -0
  273. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/__init__.py +0 -0
  274. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/abstract_storage.py +0 -0
  275. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/candles_storage.py +0 -0
  276. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/orders_storage.py +0 -0
  277. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/portfolio_storage.py +0 -0
  278. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/storage_manager.py +0 -0
  279. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/trades_storage.py +0 -0
  280. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/transactions_storage.py +0 -0
  281. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/storage/util.py +0 -0
  282. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/supervisors/__init__.py +0 -0
  283. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/supervisors/abstract_portfolio_supervisor.py +0 -0
  284. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/supervisors/abstract_supervisor.py +0 -0
  285. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/initializable.py +0 -0
  286. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/initialization_util.py +0 -0
  287. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/simulator_updater_utils.py +0 -0
  288. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/test_tools/__init__.py +0 -0
  289. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/test_tools/exchanges_test_tools.py +0 -0
  290. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/test_tools/spot_rest_exchange_test_tools.py +0 -0
  291. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/octobot_trading/util/test_tools/websocket_test_tools.py +0 -0
  292. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/requirements.txt +0 -0
  293. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/setup.cfg +0 -0
  294. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/setup.py +0 -0
  295. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/__init__.py +0 -0
  296. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_channels.py +0 -0
  297. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_exchange.py +0 -0
  298. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_modes.py +0 -0
  299. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_orders.py +0 -0
  300. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_portfolio.py +0 -0
  301. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_profitability.py +0 -0
  302. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_symbol_data.py +0 -0
  303. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_trader.py +0 -0
  304. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/api/test_trades.py +0 -0
  305. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/cli/__init__.py +0 -0
  306. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/__init__.py +0 -0
  307. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/contracts/__init__.py +0 -0
  308. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/contracts/test_future_contract.py +0 -0
  309. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/contracts/test_margin_contract.py +0 -0
  310. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/funding/__init__.py +0 -0
  311. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/funding/test_funding_manager.py +0 -0
  312. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/kline/__init__.py +0 -0
  313. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/kline/test_kline_manager.py +0 -0
  314. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/ohlcv/__init__.py +0 -0
  315. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/ohlcv/test_candles_adapter.py +0 -0
  316. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/ohlcv/test_candles_manager.py +0 -0
  317. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/order_book/__init__.py +0 -0
  318. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/order_book/test_order_book_manager.py +0 -0
  319. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/prices/__init__.py +0 -0
  320. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/prices/test_price_events_manager.py +0 -0
  321. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/prices/test_prices_manager.py +0 -0
  322. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/recent_trades/__init__.py +0 -0
  323. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/recent_trades/test_recent_trades_manager.py +0 -0
  324. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/test_exchange_symbols_data.py +0 -0
  325. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/ticker/__init__.py +0 -0
  326. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchange_data/ticker/test_ticker_manager.py +0 -0
  327. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/__init__.py +0 -0
  328. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/connectors/__init__.py +0 -0
  329. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/connectors/ccxt/__init__.py +0 -0
  330. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/connectors/ccxt/mock_exchanges_data.py +0 -0
  331. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/connectors/ccxt/test_ccxt_connector.py +0 -0
  332. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/implementations/__init__.py +0 -0
  333. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/implementations/test_default_rest_exchange.py +0 -0
  334. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/implementations/test_default_websocket_exchange.py +0 -0
  335. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_abstract_exchange.py +0 -0
  336. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_abstract_websocket_exchange.py +0 -0
  337. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_exchange_builder.py +0 -0
  338. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_exchange_config_data.py +0 -0
  339. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_exchange_factory.py +0 -0
  340. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_exchange_manager.py +0 -0
  341. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_exchange_simulator.py +0 -0
  342. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/test_exchanges.py +0 -0
  343. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/traders/__init__.py +0 -0
  344. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/traders/test_trader.py +0 -0
  345. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/types/__init__.py +0 -0
  346. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/types/test_websocket_exchange.py +0 -0
  347. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/util/__init__.py +0 -0
  348. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/exchanges/util/test_exchange_market_status_fixer.py +0 -0
  349. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/__init__.py +0 -0
  350. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/__init__.py +0 -0
  351. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/basic_keywords/__init__.py +0 -0
  352. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/basic_keywords/test_account_balance.py +0 -0
  353. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/basic_keywords/test_amount.py +0 -0
  354. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/basic_keywords/test_position.py +0 -0
  355. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/basic_keywords/test_price.py +0 -0
  356. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/dsl/__init__.py +0 -0
  357. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/script_keywords/dsl/test_quantity.py +0 -0
  358. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/test_abstract_mode_consumer.py +0 -0
  359. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/test_abstract_trading_mode.py +0 -0
  360. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/modes/test_modes_util.py +0 -0
  361. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/__init__.py +0 -0
  362. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/__init__.py +0 -0
  363. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/groups/__init__.py +0 -0
  364. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/groups/test_balanced_take_profit_and_stop_order_group.py +0 -0
  365. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/groups/test_group_util.py +0 -0
  366. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/groups/test_one_cancels_the_other_order_group.py +0 -0
  367. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/__init__.py +0 -0
  368. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_cancel_order_state.py +0 -0
  369. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_close_order_state.py +0 -0
  370. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_fill_order_state.py +0 -0
  371. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_open_order_state.py +0 -0
  372. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_order_state.py +0 -0
  373. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_order_state_factory.py +0 -0
  374. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_pending_creation_chained_order_state.py +0 -0
  375. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/states/test_pending_creation_order_state.py +0 -0
  376. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_decimal_order_adapter.py +0 -0
  377. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_double_filled_order.py +0 -0
  378. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_order.py +0 -0
  379. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_order_adapter.py +0 -0
  380. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_order_factory.py +0 -0
  381. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_order_util.py +0 -0
  382. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_orders_manager.py +0 -0
  383. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/test_orders_storage_operations.py +0 -0
  384. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/__init__.py +0 -0
  385. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/__init__.py +0 -0
  386. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_buy_limit_order.py +0 -0
  387. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_limit_order.py +0 -0
  388. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_sell_limit_order.py +0 -0
  389. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_stop_loss_limit_order.py +0 -0
  390. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_stop_loss_order.py +0 -0
  391. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_take_profit_limit_order.py +0 -0
  392. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/limit/test_take_profit_order.py +0 -0
  393. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/market/__init__.py +0 -0
  394. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/market/test_buy_market_order.py +0 -0
  395. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/market/test_sell_market_order.py +0 -0
  396. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/test_unknown_order.py +0 -0
  397. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/trailing/__init__.py +0 -0
  398. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/trailing/test_trailing_stop_limit_order.py +0 -0
  399. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/orders/types/trailing/test_trailing_stop_order.py +0 -0
  400. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/__init__.py +0 -0
  401. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/assets/__init__.py +0 -0
  402. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/assets/test_future_asset.py +0 -0
  403. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/assets/test_margin_asset.py +0 -0
  404. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/assets/test_spot_asset.py +0 -0
  405. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/history/__init__.py +0 -0
  406. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/history/test_historical_asset_value_factory.py +0 -0
  407. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/history/test_historical_portfolio_value_manager.py +0 -0
  408. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/test_asset.py +0 -0
  409. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/test_portfolio.py +0 -0
  410. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/test_portfolio_manager.py +0 -0
  411. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/test_portfolio_profitability.py +0 -0
  412. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/test_portfolio_value_holder.py +0 -0
  413. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/test_value_converter.py +0 -0
  414. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/types/__init__.py +0 -0
  415. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/types/test_future_portfolio.py +0 -0
  416. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/types/test_margin_portfolio.py +0 -0
  417. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/portfolios/types/test_spot_portfolio.py +0 -0
  418. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/__init__.py +0 -0
  419. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/channel/__init__.py +0 -0
  420. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/states/__init__.py +0 -0
  421. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/test_position.py +0 -0
  422. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/test_position_factory.py +0 -0
  423. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/test_positions_manager.py +0 -0
  424. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/types/__init__.py +0 -0
  425. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/types/test_inverse_position.py +0 -0
  426. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/positions/types/test_linear_position.py +0 -0
  427. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/trades/__init__.py +0 -0
  428. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/trades/test_trade_factory.py +0 -0
  429. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/trades/test_trade_manager.py +0 -0
  430. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/trades/test_trade_pnl.py +0 -0
  431. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/trades/test_trade_util.py +0 -0
  432. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/transactions/__init__.py +0 -0
  433. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/transactions/test_transaction_factory.py +0 -0
  434. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/personal_data/transactions/test_transactions_manager.py +0 -0
  435. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/signals/__init__.py +0 -0
  436. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/signals/test_trading_signal_bundle_builder.py +0 -0
  437. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/signals/test_util.py +0 -0
  438. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/test_utils/__init__.py +0 -0
  439. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/test_utils/order_util.py +0 -0
  440. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/test_utils/random_numbers.py +0 -0
  441. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/util/__init__.py +0 -0
  442. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests/util/test_config_util.py +0 -0
  443. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/__init__.py +0 -0
  444. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/__init__.py +0 -0
  445. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/real_exchange_tester.py +0 -0
  446. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/real_futures_exchange_tester.py +0 -0
  447. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_ascendex.py +0 -0
  448. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_binance.py +0 -0
  449. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_binance_futures.py +0 -0
  450. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bingx.py +0 -0
  451. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bitfinex.py +0 -0
  452. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bitget.py +0 -0
  453. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bithumb.py +0 -0
  454. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bitso.py +0 -0
  455. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bitstamp.py +0 -0
  456. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bybit.py +0 -0
  457. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_bybit_futures.py +0 -0
  458. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_coinbase.py +0 -0
  459. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_coinex.py +0 -0
  460. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_cryptocom.py +0 -0
  461. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_gateio.py +0 -0
  462. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_hitbtc.py +0 -0
  463. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_hollaex.py +0 -0
  464. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_htx.py +0 -0
  465. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_kraken.py +0 -0
  466. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_kucoin.py +0 -0
  467. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_kucoin_futures.py +0 -0
  468. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_mexc.py +0 -0
  469. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_ndax.py +0 -0
  470. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_okcoin.py +0 -0
  471. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_okx.py +0 -0
  472. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_okx_futures.py +0 -0
  473. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_phemex.py +0 -0
  474. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_poloniex.py +0 -0
  475. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_upbit.py +0 -0
  476. {OctoBot-Trading-2.4.83 → OctoBot-Trading-2.4.85}/tests_additional/real_exchanges/test_wavesexchange.py +0 -0
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [2.4.85] - 2024-05-31
8
+ ### Added
9
+ - [Exchanges] Fix permission issue false positive
10
+
11
+ ## [2.4.84] - 2024-05-26
12
+ ### Added
13
+ - [ExchangeData] IncompatibleAssetDetails
14
+
7
15
  ## [2.4.83] - 2024-05-16
8
16
  ### Updated
9
17
  - [Orders] log unparsable orders
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.83
3
+ Version: 2.4.85
4
4
  Summary: OctoBot project trading package
5
5
  Home-page: https://github.com/Drakkar-Software/OctoBot-Trading
6
6
  Author: Drakkar-Software
@@ -16,7 +16,7 @@ Classifier: Operating System :: POSIX
16
16
  Requires-Python: >=3.8
17
17
  License-File: LICENSE
18
18
 
19
- # OctoBot-Trading [2.4.83](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.85](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
20
20
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/903b6b22bceb4661b608a86fea655f69)](https://app.codacy.com/gh/Drakkar-Software/OctoBot-Trading?utm_source=github.com&utm_medium=referral&utm_content=Drakkar-Software/OctoBot-Trading&utm_campaign=Badge_Grade_Dashboard)
21
21
  [![PyPI](https://img.shields.io/pypi/v/OctoBot-Trading.svg)](https://pypi.python.org/pypi/OctoBot-Trading/)
22
22
  [![Coverage Status](https://coveralls.io/repos/github/Drakkar-Software/OctoBot-Trading/badge.svg?branch=master)](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: OctoBot-Trading
3
- Version: 2.4.83
3
+ Version: 2.4.85
4
4
  Summary: OctoBot project trading package
5
5
  Home-page: https://github.com/Drakkar-Software/OctoBot-Trading
6
6
  Author: Drakkar-Software
@@ -16,7 +16,7 @@ Classifier: Operating System :: POSIX
16
16
  Requires-Python: >=3.8
17
17
  License-File: LICENSE
18
18
 
19
- # OctoBot-Trading [2.4.83](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
19
+ # OctoBot-Trading [2.4.85](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
20
20
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/903b6b22bceb4661b608a86fea655f69)](https://app.codacy.com/gh/Drakkar-Software/OctoBot-Trading?utm_source=github.com&utm_medium=referral&utm_content=Drakkar-Software/OctoBot-Trading&utm_campaign=Badge_Grade_Dashboard)
21
21
  [![PyPI](https://img.shields.io/pypi/v/OctoBot-Trading.svg)](https://pypi.python.org/pypi/OctoBot-Trading/)
22
22
  [![Coverage Status](https://coveralls.io/repos/github/Drakkar-Software/OctoBot-Trading/badge.svg?branch=master)](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
@@ -1,4 +1,4 @@
1
- # OctoBot-Trading [2.4.83](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
1
+ # OctoBot-Trading [2.4.85](https://github.com/Drakkar-Software/OctoBot-Trading/blob/master/CHANGELOG.md)
2
2
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/903b6b22bceb4661b608a86fea655f69)](https://app.codacy.com/gh/Drakkar-Software/OctoBot-Trading?utm_source=github.com&utm_medium=referral&utm_content=Drakkar-Software/OctoBot-Trading&utm_campaign=Badge_Grade_Dashboard)
3
3
  [![PyPI](https://img.shields.io/pypi/v/OctoBot-Trading.svg)](https://pypi.python.org/pypi/OctoBot-Trading/)
4
4
  [![Coverage Status](https://coveralls.io/repos/github/Drakkar-Software/OctoBot-Trading/badge.svg?branch=master)](https://coveralls.io/github/Drakkar-Software/OctoBot-Trading?branch=master)
@@ -15,4 +15,4 @@
15
15
  # License along with this library.
16
16
 
17
17
  PROJECT_NAME = "OctoBot-Trading"
18
- VERSION = "2.4.83" # major.minor.revision
18
+ VERSION = "2.4.85" # major.minor.revision
@@ -120,8 +120,6 @@ from octobot_trading.api.exchange import (
120
120
  get_enabled_exchanges_names,
121
121
  get_auto_filled_exchange_names,
122
122
  get_exchange_details,
123
- is_api_permission_error,
124
- is_exchange_rules_compliancy_error,
125
123
  cancel_ccxt_throttle_task,
126
124
  stop_exchange,
127
125
  )
@@ -301,8 +299,6 @@ __all__ = [
301
299
  "get_enabled_exchanges_names",
302
300
  "get_auto_filled_exchange_names",
303
301
  "get_exchange_details",
304
- "is_api_permission_error",
305
- "is_exchange_rules_compliancy_error",
306
302
  "cancel_ccxt_throttle_task",
307
303
  "stop_exchange",
308
304
  "get_trading_modes",
@@ -322,14 +322,6 @@ async def get_exchange_details(
322
322
  )
323
323
 
324
324
 
325
- def is_api_permission_error(error: BaseException) -> bool:
326
- return exchanges.is_api_permission_error(error)
327
-
328
-
329
- def is_exchange_rules_compliancy_error(error: BaseException) -> bool:
330
- return exchanges.is_exchange_rules_compliancy_error(error)
331
-
332
-
333
325
  def cancel_ccxt_throttle_task():
334
326
  for task in asyncio.all_tasks():
335
327
  # manually cancel ccxt async throttle task since it apparently can't be cancelled otherwise
@@ -126,26 +126,19 @@ SIMULATOR_TESTED_EXCHANGES = sorted(["bitfinex2", "bithumb", "bitstamp", "bittre
126
126
  "hitbtc", "kraken", "poloniex", "bitso", "ndax", "upbit",
127
127
  "wavesexchange"])
128
128
 
129
- # when ccxt is raising ccxt.ExchangeError instead of ccxt.AuthenticationError on api key permissions issue
130
- EXCHANGE_PERMISSION_ERRORS: typing.List[typing.Iterable[str]] = [
131
- # OKX ex: okx {"msg":"API key doesn't exist","code":"50119"}
132
- ("api", "key"),
133
-
134
- # Binance ex: DDoSProtection('binance {"code":-2015,"msg":"Invalid API-key, IP, or permissions for action."}')
135
- ("key", "permissions for action"),
136
-
137
- # coinbase ex: coinbase {"error":"PERMISSION_DENIED",
138
- # "error_details":"Missing required scopes","message":"Missing required scopes"}
139
- ("permission_denied", "required scopes"),
140
- ("missing required scopes"),
141
- ]
142
-
143
129
  # text content of errors due to exchange compliancy rules
130
+ # Warning: should never be a false positive
144
131
  EXCHANGE_COMPLIANCY_ERRORS: typing.List[typing.Iterable[str]] = [
145
132
  # OKX ex: Trading of this pair or contract is restricted due to local compliance requirements
146
133
  ("restricted", "compliance"),
147
134
  ]
148
135
 
136
+ # text content of errors due to exchange local account permissions (ex: accounts from X country can't trade XYZ)
137
+ EXCHANGE_ACCOUNT_TRADED_SYMBOL_PERMISSION_ERRORS: typing.List[typing.Iterable[str]] = [
138
+ # Binance ex: InvalidOrder binance {"code":-2010,"msg":"This symbol is not permitted for this account."}
139
+ ("symbol", "not permitted", "for this account"),
140
+ ]
141
+
149
142
  CONFIG_DEFAULT_FEES = 0.001
150
143
  CONFIG_DEFAULT_SIMULATOR_FEES = 0
151
144
 
@@ -117,6 +117,13 @@ class ExchangeCompliancyError(Exception):
117
117
  """
118
118
 
119
119
 
120
+ class ExchangeAccountSymbolPermissionError(Exception):
121
+ """
122
+ Raised when an exchange failed to execute the given request because of allowed traded symbols
123
+ on the current user account
124
+ """
125
+
126
+
120
127
  class PortfolioNegativeValueError(Exception):
121
128
  """
122
129
  Raised when the portfolio is being updated with a negative value
@@ -62,6 +62,7 @@ from octobot_trading.exchanges.util import (
62
62
  log_time_sync_error,
63
63
  get_partners_explanation_message,
64
64
  get_enabled_exchanges,
65
+ exchange_error_translator,
65
66
  is_compatible_account,
66
67
  get_historical_ohlcv,
67
68
  get_exchange_type,
@@ -76,8 +77,6 @@ from octobot_trading.exchanges.util import (
76
77
  get_local_exchange_manager,
77
78
  get_auto_filled_exchange_names,
78
79
  get_exchange_details,
79
- is_api_permission_error,
80
- is_exchange_rules_compliancy_error,
81
80
  is_error_on_this_type,
82
81
  force_disable_web_socket,
83
82
  check_web_socket_config,
@@ -149,6 +148,7 @@ __all__ = [
149
148
  "log_time_sync_error",
150
149
  "get_partners_explanation_message",
151
150
  "get_enabled_exchanges",
151
+ "exchange_error_translator",
152
152
  "is_compatible_account",
153
153
  "get_historical_ohlcv",
154
154
  "get_exchange_type",
@@ -163,8 +163,6 @@ __all__ = [
163
163
  "get_local_exchange_manager",
164
164
  "get_auto_filled_exchange_names",
165
165
  "get_exchange_details",
166
- "is_api_permission_error",
167
- "is_exchange_rules_compliancy_error",
168
166
  "is_error_on_this_type",
169
167
  "AbstractExchange",
170
168
  "is_channel_managed_by_websocket",
@@ -91,6 +91,14 @@ class RestExchange(abstract_exchange.AbstractExchange):
91
91
 
92
92
  # text content of errors due to orders not found errors
93
93
  EXCHANGE_ORDER_NOT_FOUND_ERRORS: typing.List[typing.Iterable[str]] = []
94
+ # when ccxt is raising ccxt.ExchangeError instead of ccxt.AuthenticationError on api key permissions issue
95
+ # text content of errors due to api key permissions issues
96
+ EXCHANGE_PERMISSION_ERRORS: typing.List[typing.Iterable[str]] = []
97
+ # text content of errors due to account compliancy issues
98
+ EXCHANGE_COMPLIANCY_ERRORS: typing.List[typing.Iterable[str]] = []
99
+ # text content of errors due to exchange local account permissions (ex: accounts from X country can't trade XYZ)
100
+ # text content of errors due to traded assets for account
101
+ EXCHANGE_ACCOUNT_TRADED_SYMBOL_PERMISSION_ERRORS: typing.List[typing.Iterable[str]] = []
94
102
 
95
103
  DEFAULT_CONNECTOR_CLASS = ccxt_connector.CCXTConnector
96
104
 
@@ -207,7 +215,7 @@ class RestExchange(abstract_exchange.AbstractExchange):
207
215
  except ccxt.DDoSProtection as e:
208
216
  # raised upon rate limit issues, last response data might have details on what is happening
209
217
  # ensure this is not a permission error (can happen on binance)
210
- if exchanges_util.is_api_permission_error(e):
218
+ if self.is_api_permission_error(e):
211
219
  # invalid api key or missing trading rights
212
220
  raise errors.AuthenticationError(
213
221
  f"Error when handling order {e}. Please make sure that trading permissions are on for this API key."
@@ -215,18 +223,20 @@ class RestExchange(abstract_exchange.AbstractExchange):
215
223
  if self.should_log_on_ddos_exception(e):
216
224
  self.connector.log_ddos_error(e)
217
225
  raise errors.FailedRequest(f"Failed to order operation: {e.__class__.__name__} {e}") from e
226
+ except errors.ExchangeAccountSymbolPermissionError:
227
+ raise
218
228
  except Exception as e:
219
229
  if not self.is_market_open_for_order_type(symbol, order_type):
220
230
  raise errors.UnavailableOrderTypeForMarketError(
221
231
  f"Error when handling order {e}. "
222
232
  f"Exchange currently refuses to create orders of type {order_type} on {symbol}."
223
233
  ) from e
224
- if exchanges_util.is_api_permission_error(e):
234
+ if self.is_api_permission_error(e):
225
235
  # invalid api key or missing trading rights
226
236
  raise errors.AuthenticationError(
227
237
  f"Error when handling order {e}. Please make sure that trading permissions are on for this API key."
228
238
  ) from e
229
- if exchanges_util.is_exchange_rules_compliancy_error(e):
239
+ if self.is_exchange_rules_compliancy_error(e):
230
240
  raise errors.ExchangeCompliancyError(
231
241
  f"Error when handling order {e}. Exchange is refusing this order request on this account because "
232
242
  f"of its compliancy requirements."
@@ -273,9 +283,14 @@ class RestExchange(abstract_exchange.AbstractExchange):
273
283
  stop_price=stop_price, side=side,
274
284
  current_price=current_price,
275
285
  reduce_only=reduce_only, params=params)
276
- except (ccxt.InvalidOrder, ccxt.BadRequest) as e:
286
+ except (ccxt.InvalidOrder, ccxt.BadRequest) as err:
287
+ if self.is_exchange_account_traded_symbol_permission_error(err):
288
+ # exchange won't let this order create: raise
289
+ raise errors.ExchangeAccountSymbolPermissionError(
290
+ f"Error when creating {symbol} {order_type} order on {self.exchange_manager.exchange_name}: {err}"
291
+ ) from err
277
292
  # can be raised when exchange precision/limits rules change
278
- self.logger.debug(f"Failed to create order ({e}) : order_type: {order_type}, symbol: {symbol}. "
293
+ self.logger.debug(f"Failed to create order ({err}) : order_type: {order_type}, symbol: {symbol}. "
279
294
  f"This might be due to an update on {self.name} market rules. Fetching updated rules.")
280
295
  await self.connector.load_symbol_markets(reload=True, market_filter=self.exchange_manager.market_filter)
281
296
  # retry order creation with updated markets (ccxt will use the updated market values)
@@ -886,6 +901,21 @@ class RestExchange(abstract_exchange.AbstractExchange):
886
901
  return exchanges_util.is_error_on_this_type(error, self.EXCHANGE_ORDER_NOT_FOUND_ERRORS)
887
902
  return False
888
903
 
904
+ def is_api_permission_error(self, error: BaseException) -> bool:
905
+ if self.EXCHANGE_PERMISSION_ERRORS:
906
+ return exchanges_util.is_error_on_this_type(error, self.EXCHANGE_PERMISSION_ERRORS)
907
+ return False
908
+
909
+ def is_exchange_rules_compliancy_error(self, error: BaseException) -> bool:
910
+ if self.EXCHANGE_COMPLIANCY_ERRORS:
911
+ return exchanges_util.is_error_on_this_type(error, self.EXCHANGE_COMPLIANCY_ERRORS)
912
+ return False
913
+
914
+ def is_exchange_account_traded_symbol_permission_error(self, error: BaseException) -> bool:
915
+ if self.EXCHANGE_ACCOUNT_TRADED_SYMBOL_PERMISSION_ERRORS:
916
+ return exchanges_util.is_error_on_this_type(error, self.EXCHANGE_ACCOUNT_TRADED_SYMBOL_PERMISSION_ERRORS)
917
+ return False
918
+
889
919
  """
890
920
  Auto fetched and filled exchanges
891
921
  """
@@ -31,6 +31,7 @@ from octobot_trading.exchanges.util.exchange_util import (
31
31
  get_partners_explanation_message,
32
32
  get_enabled_exchanges,
33
33
  get_local_exchange_manager,
34
+ exchange_error_translator,
34
35
  is_compatible_account,
35
36
  get_historical_ohlcv,
36
37
  get_exchange_type,
@@ -44,8 +45,6 @@ from octobot_trading.exchanges.util.exchange_util import (
44
45
  get_exchange_class_from_name,
45
46
  get_auto_filled_exchange_names,
46
47
  get_exchange_details,
47
- is_api_permission_error,
48
- is_exchange_rules_compliancy_error,
49
48
  is_error_on_this_type,
50
49
  )
51
50
  from octobot_trading.exchanges.util import websockets_util
@@ -66,6 +65,7 @@ __all__ = [
66
65
  "get_partners_explanation_message",
67
66
  "get_enabled_exchanges",
68
67
  "get_local_exchange_manager",
68
+ "exchange_error_translator",
69
69
  "is_compatible_account",
70
70
  "get_historical_ohlcv",
71
71
  "get_exchange_type",
@@ -79,8 +79,6 @@ __all__ = [
79
79
  "get_exchange_class_from_name",
80
80
  "get_auto_filled_exchange_names",
81
81
  "get_exchange_details",
82
- "is_api_permission_error",
83
- "is_exchange_rules_compliancy_error",
84
82
  "is_error_on_this_type",
85
83
  "force_disable_web_socket",
86
84
  "check_web_socket_config",
@@ -28,6 +28,7 @@ import octobot_commons.tentacles_management as tentacles_management
28
28
  import octobot_tentacles_manager.api as api
29
29
 
30
30
  import octobot_trading.enums as enums
31
+ import octobot_trading.errors as errors
31
32
  import octobot_trading.constants as constants
32
33
  import octobot_trading.exchanges.types as exchanges_types
33
34
  import octobot_trading.exchanges.implementations as exchanges_implementations
@@ -228,7 +229,8 @@ async def get_local_exchange_manager(
228
229
  .disable_trading_mode() \
229
230
  .build()
230
231
  try:
231
- yield exchange_manager
232
+ with exchange_error_translator(exchange_manager):
233
+ yield exchange_manager
232
234
  finally:
233
235
  # do not log stopping message
234
236
  logger = exchange_manager.exchange.connector.logger
@@ -238,6 +240,20 @@ async def get_local_exchange_manager(
238
240
  logger.disable(False)
239
241
 
240
242
 
243
+ @contextlib.contextmanager
244
+ def exchange_error_translator(exchange_manager):
245
+ try:
246
+ yield
247
+ except ccxt.ExchangeError as err:
248
+ # convert permission and compliancy errors while the exchange manager still exists and can be used
249
+ if exchange_manager.exchange.is_api_permission_error(err):
250
+ raise errors.AuthenticationError(f"{err} ({err.__class__})") from err
251
+ if exchange_manager.exchange.is_exchange_rules_compliancy_error(err):
252
+ raise errors.ExchangeCompliancyError(f"{err} ({err.__class__})") from err
253
+ # default raise
254
+ raise
255
+
256
+
241
257
  async def is_compatible_account(exchange_name: str, exchange_config: dict, tentacles_setup_config, is_sandboxed: bool) \
242
258
  -> (bool, bool, str):
243
259
  """
@@ -428,14 +444,6 @@ def get_associated_symbol(exchange_manager, asset: str, target_asset: str) -> (t
428
444
  return symbol, is_reversed_symbol
429
445
 
430
446
 
431
- def is_api_permission_error(error: BaseException) -> bool:
432
- return is_error_on_this_type(error, constants.EXCHANGE_PERMISSION_ERRORS)
433
-
434
-
435
- def is_exchange_rules_compliancy_error(error: BaseException) -> bool:
436
- return is_error_on_this_type(error, constants.EXCHANGE_COMPLIANCY_ERRORS)
437
-
438
-
439
447
  def is_error_on_this_type(error: BaseException, descriptions: typing.List[typing.Iterable[str]]) -> bool:
440
448
  lower_error = str(error).lower()
441
449
  for identifiers in descriptions:
@@ -38,6 +38,7 @@ from octobot_trading.util.config_util import (
38
38
  is_trader_simulator_enabled,
39
39
  is_trade_history_loading_enabled,
40
40
  is_currency_enabled,
41
+ is_symbol_disabled,
41
42
  get_symbols,
42
43
  get_symbol_trading_type,
43
44
  get_symbol_types_counts,
@@ -59,6 +60,7 @@ __all__ = [
59
60
  "is_trader_simulator_enabled",
60
61
  "is_trade_history_loading_enabled",
61
62
  "is_currency_enabled",
63
+ "is_symbol_disabled",
62
64
  "get_symbols",
63
65
  "get_symbol_trading_type",
64
66
  "get_symbol_types_counts",
@@ -52,6 +52,18 @@ def is_currency_enabled(config, currency, default_value) -> bool:
52
52
  return default_value
53
53
 
54
54
 
55
+ def is_symbol_disabled(config, symbol) -> bool:
56
+ for currency_details in config[commons_constants.CONFIG_CRYPTO_CURRENCIES].values():
57
+ for pair in currency_details[commons_constants.CONFIG_CRYPTO_PAIRS]:
58
+ if (
59
+ symbol == symbol_util.parse_symbol(pair).base
60
+ and currency_details.get(commons_constants.CONFIG_ENABLED_OPTION, True) is False
61
+ ):
62
+ return True
63
+ return False
64
+
65
+
66
+
55
67
  def get_symbols(config, enabled_only) -> list:
56
68
  if commons_constants.CONFIG_CRYPTO_CURRENCIES in config \
57
69
  and isinstance(config[commons_constants.CONFIG_CRYPTO_CURRENCIES], dict):
@@ -14,12 +14,20 @@
14
14
  # You should have received a copy of the GNU Lesser General Public
15
15
  # License along with this library.
16
16
  import dataclasses
17
-
17
+ import typing
18
18
 
19
19
  import octobot_commons.dataclasses
20
20
  import octobot_trading.exchanges
21
21
 
22
22
 
23
+ @dataclasses.dataclass
24
+ class IncompatibleAssetDetails(
25
+ octobot_commons.dataclasses.FlexibleDataclass, octobot_commons.dataclasses.UpdatableDataclass
26
+ ):
27
+ symbol: str = ""
28
+ updated_at: float = 0
29
+
30
+
23
31
  @dataclasses.dataclass
24
32
  class ExchangeAuthDetails(octobot_commons.dataclasses.FlexibleDataclass, octobot_commons.dataclasses.UpdatableDataclass):
25
33
  api_key: str = ""
@@ -29,6 +37,16 @@ class ExchangeAuthDetails(octobot_commons.dataclasses.FlexibleDataclass, octobot
29
37
  sandboxed: bool = False
30
38
  broker_enabled: bool = False
31
39
  encrypted: str = ""
40
+ exchange_account_id: typing.Union[str, None] = None
41
+ incompatible_assets: typing.Union[list[IncompatibleAssetDetails], None] = dataclasses.field(default_factory=list)
42
+
43
+ # pylint: disable=E1134
44
+ def __post_init__(self):
45
+ if self.incompatible_assets and isinstance(self.incompatible_assets[0], dict):
46
+ self.incompatible_assets = (
47
+ [IncompatibleAssetDetails.from_dict(asset) for asset in self.incompatible_assets]
48
+ if self.incompatible_assets else []
49
+ )
32
50
 
33
51
 
34
52
  @dataclasses.dataclass
@@ -244,26 +244,10 @@ async def test_get_exchange_details(tentacles_setup_config, supported_exchanges)
244
244
  get_tentacle_config_mock.assert_called_once()
245
245
 
246
246
 
247
- def test_is_api_permission_error():
248
- with mock.patch.object(exchange_util, "is_error_on_this_type") as is_error_on_this_type_mock:
249
- err = Exception("plop")
250
- exchanges.is_api_permission_error(err)
251
- is_error_on_this_type_mock.assert_called_once_with(
252
- err, constants.EXCHANGE_PERMISSION_ERRORS
253
- )
254
-
255
-
256
- def test_is_exchange_rules_compliancy_error():
257
- with mock.patch.object(exchange_util, "is_error_on_this_type") as is_error_on_this_type_mock:
258
- err = Exception("plop")
259
- exchanges.is_exchange_rules_compliancy_error(err)
260
- is_error_on_this_type_mock.assert_called_once_with(
261
- err, constants.EXCHANGE_COMPLIANCY_ERRORS
262
- )
263
-
264
-
265
247
  def test_is_error_on_this_type():
266
- assert exchange_util.is_error_on_this_type(Exception("plop"), constants.EXCHANGE_PERMISSION_ERRORS) is False
267
- assert exchange_util.is_error_on_this_type(Exception("api key"), constants.EXCHANGE_PERMISSION_ERRORS) is True
268
- assert exchange_util.is_error_on_this_type(Exception("api"), constants.EXCHANGE_PERMISSION_ERRORS) is False
269
- assert exchange_util.is_error_on_this_type(Exception("api"), constants.EXCHANGE_COMPLIANCY_ERRORS) is False
248
+ errors = [("api", "key", "doesn't exist"),]
249
+
250
+ assert exchange_util.is_error_on_this_type(Exception("plop"), errors) is False
251
+ assert exchange_util.is_error_on_this_type(Exception("api key doesn't exist"), errors) is True
252
+ assert exchange_util.is_error_on_this_type(Exception("api"), errors) is False
253
+ assert exchange_util.is_error_on_this_type(Exception("api"), errors) is False