mirror of
				https://github.com/Garmelon/PFERD.git
				synced 2025-10-31 04:42:42 +01:00 
			
		
		
		
	 d5f29f01c5
			
		
	
	d5f29f01c5
	
	
	
		
			
			The switch from crawler-local conductors to a single pferd-global conductor was made to prepare for auth section credential providers.
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from typing import Dict
 | |
| 
 | |
| from rich import print
 | |
| from rich.markup import escape
 | |
| 
 | |
| from .conductor import TerminalConductor
 | |
| from .config import Config
 | |
| from .crawler import Crawler
 | |
| from .crawlers import CRAWLERS
 | |
| 
 | |
| 
 | |
| class PferdLoadException(Exception):
 | |
|     pass
 | |
| 
 | |
| 
 | |
| class Pferd:
 | |
|     def __init__(self, config: Config):
 | |
|         self._config = config
 | |
|         self._conductor = TerminalConductor()
 | |
|         self._crawlers: Dict[str, Crawler] = {}
 | |
| 
 | |
|     def _load_crawlers(self) -> None:
 | |
|         abort = False
 | |
|         for name, section in self._config.crawler_sections():
 | |
|             print(f"[bold bright_cyan]Loading[/] crawler:{escape(name)}")
 | |
|             crawler_type = section.get("type")
 | |
|             crawler_constructor = CRAWLERS.get(crawler_type)
 | |
|             if crawler_constructor is None:
 | |
|                 abort = True
 | |
|                 t = escape(repr(crawler_type))
 | |
|                 print(f"[red]Error: Unknown crawler type {t}")
 | |
|                 continue
 | |
| 
 | |
|             crawler = crawler_constructor(
 | |
|                 name,
 | |
|                 section,
 | |
|                 self._config,
 | |
|                 self._conductor,
 | |
|             )
 | |
|             self._crawlers[name] = crawler
 | |
| 
 | |
|         if abort:
 | |
|             raise PferdLoadException()
 | |
| 
 | |
|     async def run(self) -> None:
 | |
|         try:
 | |
|             self._load_crawlers()
 | |
|         except PferdLoadException:
 | |
|             print("[bold red]Could not initialize PFERD properly")
 | |
|             exit(1)
 | |
| 
 | |
|         for name, crawler in self._crawlers.items():
 | |
|             print()
 | |
|             print(f"[bold bright_cyan]Running[/] crawler:{escape(name)}")
 | |
| 
 | |
|             await crawler.run()
 |