11from asyncio import FIRST_COMPLETED , ensure_future , wait
2+ from beartype .typing import Dict , List , Union
23
34from more_itertools import chunked
45from tqdm import tqdm
@@ -20,7 +21,7 @@ def __init__(
2021 self .real_start = real_start
2122 self .mute = mute
2223
23- self .results = []
24+ self .results = None
2425 self .task_iterator = self .generate_a_task ()
2526 self .tasks = set ()
2627
@@ -44,10 +45,10 @@ def generate_a_task(self):
4445 for batch in batches :
4546 yield ensure_future (self .srh .single_request ("batch" , batch ))
4647
47- def batch_command_label (self , i , item ):
48+ def batch_command_label (self , i : int , item ) -> str :
4849 return f"cmd{ i :010} "
4950
50- async def run (self ):
51+ async def run (self ) -> Union [ Dict , List ] :
5152 self .top_up_tasks ()
5253
5354 with self .get_pbar () as pbar :
@@ -64,7 +65,7 @@ async def run(self):
6465
6566 return self .results
6667
67- def top_up_tasks (self ):
68+ def top_up_tasks (self ) -> None :
6869 """Добавляем в self.tasks столько задач, сколько свободных слотов для
6970 запросов есть сейчас в self.srh."""
7071
@@ -75,7 +76,7 @@ def top_up_tasks(self):
7576 except StopIteration :
7677 break
7778
78- def process_done_tasks (self , done ) -> int :
79+ def process_done_tasks (self , done : list ) -> int :
7980 """Извлечь результаты из списка законченных задач
8081 и вернуть кол-во извлеченных элементов."""
8182
@@ -84,7 +85,9 @@ def process_done_tasks(self, done) -> int:
8485 batch_response = done_task .result ()
8586 extracted = ServerResponseParser (batch_response ).extract_results ()
8687
87- if isinstance (extracted , list ):
88+ if self .results is None :
89+ self .results = extracted
90+ elif isinstance (extracted , list ):
8891 self .results .extend (extracted )
8992 elif isinstance (extracted , dict ):
9093 self .results .update (extracted )
@@ -120,7 +123,6 @@ class MultipleServerRequestHandlerPreserveIDs(MultipleServerRequestHandler):
120123 def __init__ (self , bitrix , method , item_list , ID_field ):
121124 super ().__init__ (bitrix , method , item_list )
122125 self .ID_field = ID_field
123- self .results = {}
124126
125127 def batch_command_label (self , i , item ):
126128 return item [self .ID_field ]
0 commit comments