
    Ngj                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlZd dlmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ e
rd dlmZmZ d dlmZ d dl m!Z!m"Z"  ed      Z# G d dejH                        Z%ddZ&ddZ'	 d 	 	 	 	 	 d!dZ(	 	 	 	 	 	 d"dZ)d#dZ*d$dZ+d$dZ,	 	 	 	 	 	 	 	 d%dZ-	 	 	 	 	 	 	 	 	 	 d&dZ.d'd(dZ/d)dZ0	 	 	 	 	 	 	 	 d)dZ1e2dk(  r	  e/         e        yy#  e        w xY w)*    )annotationsN)entry_points)TYPE_CHECKING)BaseRunSpiderCommandScrapyCommandScrapyHelpFormatter)CrawlerProcess)
UsageError)walk_modules)get_project_settingsinside_project)garbage_collect)CallableIterable)	ParamSpec)BaseSettingsSettings_Pc                  (     e Zd Z	 	 	 	 d fdZ xZS )ScrapyArgumentParserc                4    |d d dk(  ry t         |   |      S )N   z-:)super_parse_optional)self
arg_string	__class__s     .lib/python3.12/site-packages/scrapy/cmdline.pyr   z$ScrapyArgumentParser._parse_optional   s&     bq>T!w&z22    )r   strreturnz5tuple[argparse.Action | None, str, str | None] | None)__name__
__module____qualname__r   __classcell__)r   s   @r   r   r      s    33	>3 3r   r   c              #    K   t        |       D ]t  }t        |      j                         D ]V  }t        j                  |      st        |t              s*|j                  |j                  k(  sD|t        t        fvsS| X v y wN)
r   varsvaluesinspectisclass
issubclassr   r#   r"   r   )module_namemoduleobjs      r   _iter_command_classesr0   )   sg      {+<&&(C$sM2NNfoo5/CDD	 ) ,s   A BBB.B=	Bc                    i }t        |       D ]9  }|s|j                  r|j                  j                  d      d   } |       ||<   ; |S )N.)r0   requires_projectr#   split)r.   	inprojectdcmdcmdnames        r   _get_commands_from_moduler:   7   sL    "$A$V,C00nn**3/3GAgJ - Hr   c                .   i }t         j                  dk\  rt        |      }nt               j                  |d      }|D ]S  }|j	                         }t        j                  |      r |       ||j                  <   =t        d|j                          |S )N)   
   )group zInvalid entry point )	sysversion_infor   getloadr*   r+   name	Exception)r6   r>   cmdsepsentry_pointr/   s         r   _get_commands_from_entry_pointsrI   @   s     &(D
7"'n  + ??3%(UD!!"2;3C3C2DEFF  Kr   c                    t        d|      }|j                  t        |             | d   }|r|j                  t        ||             |S )Nscrapy.commandsCOMMANDS_MODULE)r:   updaterI   )settingsr6   rF   cmds_modules       r   _get_commands_dictrP   Q   sJ     %%6	BDKK/	:;,-K-k9EFKr   c                V    d}| dd  D ]  }|j                  d      s| |= |c S |dz  }! y )Nr      -)
startswith)argviargs      r   _pop_command_namerX   \   s=    	AABx~~c"QJ	Q	 
 r   c                r    t         j                  }|rt        d| d| d    d       y t        d| d       y )NzScrapy z - active project: BOT_NAME
z - no active project
)scrapy__version__print)rN   r6   versions      r   _print_headerr`   f   sB      Gy 3HZ4H3ILM 	y 678r   c                P   t        | |       t        d       t        d       t        d       t        | |      }t        |j	                               D ]%  \  }}t        d|dd|j                                 ' |st                t        d       t                t        d       y )	NzUsage:z$  scrapy <command> [options] [args]
zAvailable commands:z  z<13 zG  [ more ]      More commands available when run from project directoryz:Use "scrapy <command> -h" to see more info about a command)r`   r^   rP   sorteditems
short_desc)rN   r6   rF   r9   cmdclasss        r   _print_commandsrg   o   s    (I&	(O	
12	
 h	2D#DJJL173-q!4!4!6 789 2WX	G	
FGr   c                P    t        | |       t        d| d       t        d       y )NzUnknown command: r[   z&Use "scrapy" to see available commands)r`   r^   )rN   r9   r6   s      r   _print_unknown_commandri   ~   s)     (I&	gYb
)*	
23r   c                    	  ||i | y # t         $ r`}t        |      r| j                  t        |             |j                  r| j                          t	        j
                  d       Y d }~y d }~ww xY w)Nr   )r
   r    error
print_helpr@   exit)parserfuncakwes        r   _run_print_helprs      sY    a2 q6LLQ <<s    	A4AA//A4c                *   | t         j                  } |#t               }	 t        j                  d   }||d<   t               }t        ||      }t        |       }|s"t        ||       t        j                  d       n&||vr"t        |||       t        j                  d       ||   }t        t        d| d|j                          d|j                               }|j!                  |j"                  d	       ||_        |j'                  |       |j)                  | d
d        \  }}	t+        ||j,                  |	|       t/        |      |_        t+        |t2        ||	|       t        j                  |j4                         y # t
        $ r Y Yw xY w)NEDITORr   r   zscrapy rb   resolve)formatter_classusageconflict_handlerdescriptioncommand)priorityrR   )args)r@   rU   r   osenvironKeyErrorr   rP   rX   rg   rm   ri   r   r   syntax	long_descsetdictdefault_settingsrN   add_optionsparse_known_argsrs   process_optionsr	   crawler_process_run_commandexitcode)
rU   rN   editorr6   rF   r9   r8   rn   optsr}   s
             r   executer      sj   |xx')	(ZZ)F "(HX Ih	2D%G),		x)<
w-C!+y#**,0"MMO	F S))I>CLOOF((d12h(7JD$FC//t<(2CFL#tT:HHS\\=  		s   F 	FFc                \    |j                   rt        | ||       y | j                  ||       y r'   )profile_run_command_profiledrun)r8   r}   r   s      r   r   r      s#    ||c4.dr   c                8   |j                   r-t        j                  j                  d|j                   d       t	               }t        j                         }|j                  dt               |       |j                   r|j                  |j                          y y )Nz"scrapy: writing cProfile stats to r[   zcmd.run(args, opts))
r   r@   stderrwritelocalscProfileProfilerunctxglobals
dump_stats)r8   r}   r   locps        r   r   r      sp     ||

=dll=MRPQ
(CAHH"GIs3||	T\\" r   __main__)r-   r    r!   zIterable[type[ScrapyCommand]])r.   r    r6   boolr!   dict[str, ScrapyCommand])rK   )r6   r   r>   r    r!   r   )rN   r   r6   r   r!   r   )rU   	list[str]r!   z
str | None)rN   r   r6   r   r!   None)rN   r   r9   r    r6   r   r!   r   )
rn   zargparse.ArgumentParserro   zCallable[_P, None]rp   z_P.argsrq   z	_P.kwargsr!   r   )NN)rU   zlist[str] | NonerN   zSettings | Noner!   r   )r8   r   r}   r   r   zargparse.Namespacer!   r   )3
__future__r   argparser   r*   r~   r@   importlib.metadatar   typingr   r\   scrapy.commandsr   r   r   scrapy.crawlerr	   scrapy.exceptionsr
   scrapy.utils.miscr   scrapy.utils.projectr   r   scrapy.utils.pythonr   collections.abcr   r   typing_extensionsr   scrapy.settingsr   r   r   ArgumentParserr   r0   r:   rI   rP   rX   r`   rg   ri   rs   r   r   r   r"   r?   r   r   <module>r      sj   "    	 
 +    T T ) ( * E /2 ,6	4B3822 3 #4"'+9H44%(4594	4#
 	 	
 
 'T	#		#'	#/A	#		# z	
 	  	s   (C8 8	D