| skipped 9 lines |
10 | 10 | | import ssl |
11 | 11 | | import sys |
12 | 12 | | import tqdm |
| 13 | + | import random |
13 | 14 | | from typing import Tuple, Optional, Dict, List |
14 | 15 | | from urllib.parse import quote |
15 | 16 | | |
| skipped 381 lines |
397 | 398 | | |
398 | 399 | | |
399 | 400 | | def make_site_result( |
400 | | - | site: MaigretSite, username: str, options: QueryOptions, logger |
| 401 | + | site: MaigretSite, username: str, options: QueryOptions, logger, *args, **kwargs |
401 | 402 | | ) -> QueryResultWrapper: |
402 | 403 | | results_site: QueryResultWrapper = {} |
403 | 404 | | |
| skipped 16 lines |
420 | 421 | | |
421 | 422 | | if "url" not in site.__dict__: |
422 | 423 | | logger.error("No URL for site %s", site.name) |
| 424 | + | |
| 425 | + | if kwargs.get('retry') and hasattr(site, "mirrors"): |
| 426 | + | site.url_main = random.choice(site.mirrors) |
| 427 | + | logger.info(f"Use {site.url_main} as a main url of site {site}") |
423 | 428 | | |
424 | 429 | | # URL of user on site (if it exists) |
425 | 430 | | url = site.url.format( |
| skipped 98 lines |
524 | 529 | | async def check_site_for_username( |
525 | 530 | | site, username, options: QueryOptions, logger, query_notify, *args, **kwargs |
526 | 531 | | ) -> Tuple[str, QueryResultWrapper]: |
527 | | - | default_result = make_site_result(site, username, options, logger) |
| 532 | + | default_result = make_site_result(site, username, options, logger, retry=kwargs.get('retry')) |
528 | 533 | | future = default_result.get("future") |
529 | 534 | | if not future: |
530 | 535 | | return site.name, default_result |
| skipped 174 lines |
705 | 710 | | tasks_dict[sitename] = ( |
706 | 711 | | check_site_for_username, |
707 | 712 | | [site, username, options, logger, query_notify], |
708 | | - | {'default': (sitename, default_result)}, |
| 713 | + | {'default': (sitename, default_result), 'retry': retries-attempts+1}, |
709 | 714 | | ) |
710 | 715 | | |
711 | 716 | | cur_results = await executor.run(tasks_dict.values()) |
| skipped 184 lines |