2727import octobot_trading .constants as octobot_trading_constants
2828import octobot_trading .enums as octobot_trading_enums
2929import octobot_trading .personal_data .portfolios .protocol as octobot_trading_portfolios_protocol
30- import octobot_trading .exchanges .util .exchange_data as exchange_data_import
3130
3231
3332logger = octobot_commons_logging .get_logger ("AutomationsProtocol" )
@@ -158,65 +157,6 @@ def _protocol_action_from_flow(
158157 )
159158
160159
161- def _enrich_protocol_assets (
162- base_assets : list [protocol_models .Asset ],
163- portfolio : exchange_data_import .PortfolioDetails ,
164- unit : typing .Optional [str ],
165- ) -> list [protocol_models .Asset ]:
166- enriched : list [protocol_models .Asset ] = []
167- for asset in base_assets :
168- update_fields : dict [str , typing .Any ] = {}
169- if asset .symbol in portfolio .asset_values :
170- update_fields ["value" ] = float (portfolio .asset_values [asset .symbol ])
171- if unit :
172- update_fields ["unit" ] = unit
173- if update_fields :
174- enriched .append (asset .model_copy (update = update_fields ))
175- else :
176- enriched .append (asset )
177- return enriched
178-
179-
180- def _order_summaries_from_open_orders (open_orders : list [dict ]) -> list [protocol_models .OrderSummary ]:
181- order_columns = octobot_trading_enums .ExchangeConstantsOrderColumns
182- summaries : list [protocol_models .OrderSummary ] = []
183- for order in open_orders :
184- inner = order .get (octobot_trading_constants .STORAGE_ORIGIN_VALUE , order )
185- if not isinstance (inner , dict ):
186- inner = order
187- order_id = inner .get (order_columns .EXCHANGE_ID .value ) or inner .get (order_columns .ID .value )
188- symbol = inner .get (order_columns .SYMBOL .value )
189- if order_id is None or symbol is None :
190- continue
191- summaries .append (protocol_models .OrderSummary (id = str (order_id ), symbol = str (symbol )))
192- return summaries
193-
194-
195- def _position_summaries (positions : list [typing .Any ]) -> list [protocol_models .PositionSummary ]:
196- position_columns = octobot_trading_enums .ExchangeConstantsPositionColumns
197- summaries : list [protocol_models .PositionSummary ] = []
198- for position_details in positions :
199- position_dict = position_details .position
200- position_id = position_dict .get (position_columns .ID .value )
201- symbol = position_dict .get (position_columns .SYMBOL .value )
202- if position_id is None or symbol is None :
203- continue
204- summaries .append (protocol_models .PositionSummary (id = str (position_id ), symbol = str (symbol )))
205- return summaries
206-
207-
208- def _trade_summaries (trades : list [dict ]) -> list [protocol_models .TradeSummary ]:
209- order_columns = octobot_trading_enums .ExchangeConstantsOrderColumns
210- summaries : list [protocol_models .TradeSummary ] = []
211- for trade in trades :
212- trade_id = trade .get (order_columns .EXCHANGE_TRADE_ID .value ) or trade .get (order_columns .EXCHANGE_ID .value )
213- symbol = trade .get (order_columns .SYMBOL .value )
214- if trade_id is None or symbol is None :
215- continue
216- summaries .append (protocol_models .TradeSummary (id = str (trade_id ), symbol = str (symbol )))
217- return summaries
218-
219-
220160def _fill_protocol_automation_state (
221161 protocol_automation_state : protocol_models .AutomationState ,
222162 flow_automation_state : flow_entities .AutomationState ,
@@ -247,16 +187,14 @@ def _fill_protocol_automation_state(
247187 exchange_account_ids = [exchange_details .metadata .id ]
248188 # Derive portfolio and trading summaries from automation exchange elements.
249189 exchange_elements = flow_automation_state .automation .exchange_account_elements
250- assets : typing .Optional [list [protocol_models .Asset ]] = None
190+ assets : typing .Optional [list [protocol_models .DetailedAsset ]] = None
251191 orders : typing .Optional [list [protocol_models .OrderSummary ]] = None
252192 trades : typing .Optional [list [protocol_models .TradeSummary ]] = None
253193 positions : typing .Optional [list [protocol_models .PositionSummary ]] = None
254194 if exchange_elements :
255195 portfolio = exchange_elements .portfolio
256196 if portfolio .content :
257- base_assets = octobot_trading_portfolios_protocol .to_protocol_assets (portfolio .content )
258- unit_for_assets = exchange_details .portfolio .unit if exchange_details else None
259- assets = _enrich_protocol_assets (base_assets , portfolio , unit_for_assets )
197+ assets = octobot_trading_portfolios_protocol .to_protocol_assets (portfolio .content )
260198 orders = _order_summaries_from_open_orders (exchange_elements .orders .open_orders ) or None
261199 positions = _position_summaries (exchange_elements .positions ) or None
262200 trades = _trade_summaries (exchange_elements .trades ) or None
@@ -273,3 +211,43 @@ def _fill_protocol_automation_state(
273211 "positions" : positions ,
274212 }
275213 )
214+
215+
216+ def _order_summaries_from_open_orders (open_orders : list [dict ]) -> list [protocol_models .OrderSummary ]:
217+ order_columns = octobot_trading_enums .ExchangeConstantsOrderColumns
218+ summaries : list [protocol_models .OrderSummary ] = []
219+ for order in open_orders :
220+ inner = order .get (octobot_trading_constants .STORAGE_ORIGIN_VALUE , order )
221+ if not isinstance (inner , dict ):
222+ inner = order
223+ order_id = inner .get (order_columns .EXCHANGE_ID .value ) or inner .get (order_columns .ID .value )
224+ symbol = inner .get (order_columns .SYMBOL .value )
225+ if order_id is None or symbol is None :
226+ continue
227+ summaries .append (protocol_models .OrderSummary (id = str (order_id ), symbol = str (symbol )))
228+ return summaries
229+
230+
231+ def _position_summaries (positions : list [typing .Any ]) -> list [protocol_models .PositionSummary ]:
232+ position_columns = octobot_trading_enums .ExchangeConstantsPositionColumns
233+ summaries : list [protocol_models .PositionSummary ] = []
234+ for position_details in positions :
235+ position_dict = position_details .position
236+ position_id = position_dict .get (position_columns .ID .value )
237+ symbol = position_dict .get (position_columns .SYMBOL .value )
238+ if position_id is None or symbol is None :
239+ continue
240+ summaries .append (protocol_models .PositionSummary (id = str (position_id ), symbol = str (symbol )))
241+ return summaries
242+
243+
244+ def _trade_summaries (trades : list [dict ]) -> list [protocol_models .TradeSummary ]:
245+ order_columns = octobot_trading_enums .ExchangeConstantsOrderColumns
246+ summaries : list [protocol_models .TradeSummary ] = []
247+ for trade in trades :
248+ trade_id = trade .get (order_columns .EXCHANGE_TRADE_ID .value ) or trade .get (order_columns .EXCHANGE_ID .value )
249+ symbol = trade .get (order_columns .SYMBOL .value )
250+ if trade_id is None or symbol is None :
251+ continue
252+ summaries .append (protocol_models .TradeSummary (id = str (trade_id ), symbol = str (symbol )))
253+ return summaries
0 commit comments