@@ -482,8 +482,7 @@ def _generate_headers(self, extra_headers=None):
482482 headers .update (extra_headers )
483483 return headers
484484
485- @staticmethod
486- def _convert_tick (tick ):
485+ def _convert_tick (self , tick ):
487486 data = json .loads (tick )
488487 symbol = data .pop ('symbol' )
489488 data = camel_to_underline_obj (data )
@@ -493,29 +492,50 @@ def _convert_tick(tick):
493492 price_items = [('price' , (item + price_base ) / price_offset ) for item in data .pop ('prices' )]
494493 time_items = [('time' , item ) for item in accumulate (data .pop ('times' ))]
495494 volumes = [('volume' , item ) for item in data .pop ('volumes' )]
496- tick_type_items = [('tick_type' , item ) for item in data .pop ('tick_type' )]
497- part_codes = data .pop ('part_code' )
495+ tick_types = data .pop ('tick_type' ) if 'tick_type' in data else None
496+ if tick_types :
497+ tick_type_items = [('tick_type' , item ) for item in tick_types ]
498+ else :
499+ tick_type_items = [('tick_type' , None ) for _ in range (len (time_items ))]
500+ part_codes = data .pop ('part_code' ) if 'part_code' in data else None
498501 if part_codes :
499502 part_code_items = [('part_code' , get_part_code (item )) for item in part_codes ]
500503 part_code_name_items = [('part_code_name' , get_part_code_name (item )) for item in part_codes ]
501504 else :
502505 part_code_items = [('part_code' , None ) for _ in range (len (time_items ))]
503506 part_code_name_items = [('part_code_name' , None ) for _ in range (len (time_items ))]
504-
505- conds = data .pop ('cond' )
507+ conds = data .pop ('cond' ) if 'cond' in data else None
506508 cond_map = get_trade_condition_map (data .get ('quote_level' ))
507509 if conds :
508510 cond_items = [('cond' , get_trade_condition (item , cond_map )) for item in conds ]
509511 else :
510512 cond_items = [('cond' , None ) for _ in range (len (time_items ))]
511513 sn = data .pop ('sn' )
512514 sn_list = [('sn' , sn + i ) for i in range (len (time_items ))]
515+ merged_vols = data .pop ('merged_vols' ) if 'merged_vols' in data else None
516+ if merged_vols :
517+ merged_vols_items = [('merged_vols' , item ) for item in merged_vols ]
518+ else :
519+ merged_vols_items = [('merged_vols' , None ) for _ in range (len (time_items ))]
513520 tick_data = zip_longest (tick_type_items , price_items , volumes , part_code_items ,
514- part_code_name_items , cond_items , time_items , sn_list )
521+ part_code_name_items , cond_items , time_items , sn_list , merged_vols_items )
515522 items = []
516523 for item in tick_data :
517- item_dict = dict (item )
524+ try :
525+ item_dict = dict (item )
526+ except :
527+ self .logger .error ('convert tick error' )
528+ continue
518529 item_dict .update (data )
519- items .append (item_dict )
530+ if item_dict .get ('merged_vols' ):
531+ vols = item_dict .pop ('merged_vols' ).get ('vols' )
532+ for i , vol in enumerate (vols ):
533+ sub_item = dict (item_dict )
534+ sub_item ['sn' ] = sub_item ['sn' ] * 10 + i
535+ sub_item ['volume' ] = vol
536+ items .append (sub_item )
537+ else :
538+ item_dict .pop ('merged_vols' , None )
539+ items .append (item_dict )
520540 return symbol , items
521541
0 commit comments