[+] improve tickers storage in DB
This commit is contained in:
		
							parent
							
								
									027475e4b3
								
							
						
					
					
						commit
						070a63222c
					
				
							
								
								
									
										12
									
								
								deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/app.py
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										12
									
								
								deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/async_api/app.py
									
									
									
									
										vendored
									
									
								
							| @ -5,7 +5,7 @@ import logging | |||||||
| from ..tickers_retrieval.emcont import Emcont | from ..tickers_retrieval.emcont import Emcont | ||||||
| from ..tickers.models import Ticker | from ..tickers.models import Ticker | ||||||
| from ..tickers.settings import Settings as ModelsSettings | from ..tickers.settings import Settings as ModelsSettings | ||||||
| from ..tickers.logic import ticker_store_multiple | from ..tickers.logic import ticker_store_multiple, markets_get_by_symbol | ||||||
| import sqlalchemy.ext.asyncio | import sqlalchemy.ext.asyncio | ||||||
| from sqlalchemy.ext.asyncio import AsyncSession | from sqlalchemy.ext.asyncio import AsyncSession | ||||||
| from sqlalchemy.ext.asyncio import async_sessionmaker | from sqlalchemy.ext.asyncio import async_sessionmaker | ||||||
| @ -27,11 +27,19 @@ async def run() -> None: | |||||||
| 		timestamp: datetime.datetime, | 		timestamp: datetime.datetime, | ||||||
| 		session: 'async_sessionmaker[AsyncSession]', | 		session: 'async_sessionmaker[AsyncSession]', | ||||||
| 	) -> None: | 	) -> None: | ||||||
|  | 		markets = await markets_get_by_symbol( | ||||||
|  | 			session, | ||||||
|  | 			set([ | ||||||
|  | 				rate.symbol | ||||||
|  | 				for rate in rates | ||||||
|  | 			]), | ||||||
|  | 		) | ||||||
|  | 
 | ||||||
| 		await ticker_store_multiple( | 		await ticker_store_multiple( | ||||||
| 			session, | 			session, | ||||||
| 			[ | 			[ | ||||||
| 				Ticker( | 				Ticker( | ||||||
| 					id=-1, | 					id=markets[rate.symbol].id, | ||||||
| 					timestamp=timestamp, | 					timestamp=timestamp, | ||||||
| 					value=rate.value, | 					value=rate.value, | ||||||
| 				) | 				) | ||||||
|  | |||||||
							
								
								
									
										21
									
								
								deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/logic.py
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										21
									
								
								deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/logic.py
									
									
									
									
										vendored
									
									
								
							| @ -1,7 +1,26 @@ | |||||||
| from sqlalchemy.ext.asyncio import AsyncSession | from sqlalchemy.ext.asyncio import AsyncSession | ||||||
| from sqlalchemy.ext.asyncio import async_sessionmaker | from sqlalchemy.ext.asyncio import async_sessionmaker | ||||||
| 
 | 
 | ||||||
| from .models import Ticker | from .models import Ticker, Market | ||||||
|  | from .utils import get_or_create | ||||||
|  | 
 | ||||||
|  | async def markets_get_by_symbol( | ||||||
|  | 	session: 'async_sessionmaker[AsyncSession]', | ||||||
|  | 	symbols: set[str], | ||||||
|  | ) -> dict[str, Market]: | ||||||
|  | 	res : dict[str, Market] = dict() | ||||||
|  | 
 | ||||||
|  | 	async with session() as active_session: | ||||||
|  | 		async with active_session.begin() as transaction: | ||||||
|  | 			for o in symbols: | ||||||
|  | 				m = (await get_or_create( | ||||||
|  | 					active_session, | ||||||
|  | 					Market, | ||||||
|  | 					name=o, | ||||||
|  | 				))[0] | ||||||
|  | 				res[o] = m | ||||||
|  | 
 | ||||||
|  | 	return res | ||||||
| 
 | 
 | ||||||
| async def ticker_store_multiple( | async def ticker_store_multiple( | ||||||
| 	session: 'async_sessionmaker[AsyncSession]', | 	session: 'async_sessionmaker[AsyncSession]', | ||||||
|  | |||||||
							
								
								
									
										3
									
								
								deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/utils.py
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										3
									
								
								deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers/utils.py
									
									
									
									
										vendored
									
									
								
							| @ -23,7 +23,8 @@ async def get_or_create( | |||||||
| 			) | 			) | ||||||
| 		) | 		) | ||||||
| 
 | 
 | ||||||
| 		row = res.one() | 		row = res.one()[0] | ||||||
|  | 
 | ||||||
| 		assert isinstance(row, model) | 		assert isinstance(row, model) | ||||||
| 
 | 
 | ||||||
| 		return row | 		return row | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user