Cache contracts lookup once at startup
							parent
							
								
									9e4786e62f
								
							
						
					
					
						commit
						948ee3cadf
					
				|  | @ -499,15 +499,20 @@ async def option_quoter(client: Client, tickers: List[str]): | |||
|         raise ValueError(f'Option subscription format is (symbol, expiry)') | ||||
| 
 | ||||
|     @async_lifo_cache(maxsize=128) | ||||
|     async def get_contract_by_date(sym_date_pairs: Tuple[Tuple[str, str]]): | ||||
|     async def get_contract_by_date( | ||||
|         sym_date_pairs: Tuple[Tuple[str, str]], | ||||
|         _contract_cache: dict = {} | ||||
|     ): | ||||
|         """For each tuple, | ||||
|         ``(symbol_date_1, symbol_date_2, ... , symbol_date_n)`` | ||||
|         return a contract dict. | ||||
|         """ | ||||
|         symbols, dates = zip(*sym_date_pairs) | ||||
|         contracts = await client.get_all_contracts(symbols) | ||||
|         if not _contract_cache: | ||||
|             contracts = await client.get_all_contracts(symbols) | ||||
|             _contract_cache.update(contracts) | ||||
|         selected = {} | ||||
|         for key, val in contracts.items(): | ||||
|         for key, val in _contract_cache.items(): | ||||
|             if key.expiry in dates: | ||||
|                 selected[key] = val | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue