Skip to content

Commit f8553d7

Browse files
committed
fixed market-inspector serialization issue
refactor serialization functions in utils.py to remove unnecessary deepcopy calls. this change optimizes performance by directly passing the market and spot market dictionaries to the serialization preparation function, eliminating redundant object copying. removed commented-out code related to final conversion of object columns to string for Arrow compatibility, as it is no longer needed.
1 parent af0d477 commit f8553d7

File tree

1 file changed

+12
-29
lines changed

1 file changed

+12
-29
lines changed

src/utils.py

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import os
33
from typing import Optional, Any, Union
44
import pandas as pd
5-
import copy # Added for deepcopy
65

76
import requests
87
from driftpy.decode.utils import decode_name
@@ -289,12 +288,12 @@ def human_amm_df(df):
289288

290289
def serialize_perp_market(market: PerpMarketAccount):
291290
# Prepare market data by stringifying sumtypes and Pubkeys
292-
market_dict_prepared = _prepare_for_serialization(copy.deepcopy(market.__dict__))
293-
amm_dict_prepared = _prepare_for_serialization(copy.deepcopy(market.amm.__dict__))
294-
hist_oracle_data_prepared = _prepare_for_serialization(copy.deepcopy(market.amm.historical_oracle_data.__dict__))
295-
fee_pool_prepared = _prepare_for_serialization(copy.deepcopy(market.amm.fee_pool.__dict__))
296-
insurance_claim_prepared = _prepare_for_serialization(copy.deepcopy(market.insurance_claim.__dict__))
297-
pnl_pool_prepared = _prepare_for_serialization(copy.deepcopy(market.pnl_pool.__dict__))
291+
market_dict_prepared = _prepare_for_serialization(market.__dict__)
292+
amm_dict_prepared = _prepare_for_serialization(market.amm.__dict__)
293+
hist_oracle_data_prepared = _prepare_for_serialization(market.amm.historical_oracle_data.__dict__)
294+
fee_pool_prepared = _prepare_for_serialization(market.amm.fee_pool.__dict__)
295+
insurance_claim_prepared = _prepare_for_serialization(market.insurance_claim.__dict__)
296+
pnl_pool_prepared = _prepare_for_serialization(market.pnl_pool.__dict__)
298297

299298
market_df = pd.json_normalize(market_dict_prepared).drop(['amm', 'insurance_claim', 'pnl_pool'],axis=1, errors='ignore').pipe(human_market_df)
300299
# 'name' is bytes, decode_name handles it; 'pubkey' is already stringified by _prepare_for_serialization if it was a Pubkey object
@@ -319,25 +318,17 @@ def serialize_perp_market(market: PerpMarketAccount):
319318

320319
result_df = pd.concat([market_df, amm_df, amm_hist_oracle_df, market_amm_pool_df, market_if_df, market_pool_df],axis=1)
321320

322-
# Final conversion of object columns to string for Arrow compatibility
323-
for col in result_df.columns:
324-
if result_df[col].dtype == 'object':
325-
try:
326-
result_df[col] = result_df[col].astype(str)
327-
except Exception:
328-
# Fallback if astype(str) fails for any reason on a column
329-
result_df[col] = result_df[col].apply(lambda x: str(x) if pd.notnull(x) else x)
330321
return result_df
331322

332323

333324
def serialize_spot_market(spot_market: SpotMarketAccount):
334325
# Prepare spot_market data
335-
spot_market_dict_prepared = _prepare_for_serialization(copy.deepcopy(spot_market.__dict__))
336-
insurance_fund_prepared = _prepare_for_serialization(copy.deepcopy(spot_market.insurance_fund.__dict__))
337-
hist_oracle_data_prepared = _prepare_for_serialization(copy.deepcopy(spot_market.historical_oracle_data.__dict__))
338-
hist_index_data_prepared = _prepare_for_serialization(copy.deepcopy(spot_market.historical_index_data.__dict__))
339-
revenue_pool_prepared = _prepare_for_serialization(copy.deepcopy(spot_market.revenue_pool.__dict__))
340-
spot_fee_pool_prepared = _prepare_for_serialization(copy.deepcopy(spot_market.spot_fee_pool.__dict__))
326+
spot_market_dict_prepared = _prepare_for_serialization(spot_market.__dict__)
327+
insurance_fund_prepared = _prepare_for_serialization(spot_market.insurance_fund.__dict__)
328+
hist_oracle_data_prepared = _prepare_for_serialization(spot_market.historical_oracle_data.__dict__)
329+
hist_index_data_prepared = _prepare_for_serialization(spot_market.historical_index_data.__dict__)
330+
revenue_pool_prepared = _prepare_for_serialization(spot_market.revenue_pool.__dict__)
331+
spot_fee_pool_prepared = _prepare_for_serialization(spot_market.spot_fee_pool.__dict__)
341332

342333
spot_market_df = pd.json_normalize(spot_market_dict_prepared).drop([
343334
'historical_oracle_data', 'historical_index_data',
@@ -370,12 +361,4 @@ def serialize_spot_market(spot_market: SpotMarketAccount):
370361

371362
result_df = pd.concat([spot_market_df, if_df, hist_oracle_df, hist_index_df, market_pool_df, market_fee_df],axis=1)
372363

373-
# Final conversion of object columns to string for Arrow compatibility
374-
for col in result_df.columns:
375-
if result_df[col].dtype == 'object':
376-
try:
377-
result_df[col] = result_df[col].astype(str)
378-
except Exception:
379-
# Fallback if astype(str) fails for any reason on a column
380-
result_df[col] = result_df[col].apply(lambda x: str(x) if pd.notnull(x) else x)
381364
return result_df

0 commit comments

Comments
 (0)