
    !h"                    R   S r SSKJr  SSKrSSKrSSKrSSKJrJr  SSK	J
r
  SSKJrJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJrJr  SSKJr  SSKJr  SSKJr  SSKJ r J!r!  SSK"J#r#  SSK$J%r%J&r&  SSK'J(r(  SSK)J*r*J+r+  SSK,J-r-  \(       a  SSK.J/r/   " S S5      r0SS jr1SS jr2g)z:Scrapy Shell

See documentation in docs/topics/shell.rst

    )annotationsN)TYPE_CHECKINGAny)is_item)deferthreads)
threadable)
any_to_uri)Crawler)IgnoreRequest)RequestResponse)Settings)Spider)
get_config)DEFAULT_PYTHON_SHELLSstart_python_console)SequenceExclude)deferred_f_from_coro_fmaybe_deferred_to_future)load_object)is_asyncio_reactor_installedset_asyncio_event_loop)open_in_browser)Callablec                      \ rS rSr% \\\\\4r	S\
S'     S     SS jjr     S           SS jjrSS jr\SS j5       r  S         SS	 jjr   S       SS
 jjrSS jrSS jrSS jrSrg)Shell$   ztuple[type, ...]relevant_classesNc                    Xl         U=(       d    S U l        [        UR                  S   5      U l        S U l        [        R                  " 5       (       + U l        X0l	        0 U l
        g )Nc                    g N )xs    S/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/shell.py<lambda> Shell.__init__.<locals>.<lambda>/   s    d    DEFAULT_ITEM_CLASS)crawlerupdate_varsr   settings
item_classspiderr	   isInIOThreadinthreadcodevars)selfr*   r+   r1   s       r%   __init__Shell.__init__'   s\     !(=H >
 	 !,G,<,<=Q,R S%)","9"9";; $	$&	r(   c                   [         R                   " [         R                  [         R                  5        U(       a  U R                  XUS9  OOU(       a  U R                  X$5        O6U(       a  UR                  nU R                  X2U5        OU R                  5         U R                  (       a3  [        [        U R                  [        5       U R                  5      5        g [        5       nSu  px[        R                  R                  S5      n	/ n
U	(       a0  XR                  5       R!                  5       R#                  S5      -  n
O_UR%                  Xx5      (       a1  XR                  Xx5      R                  5       R!                  5       /-  n
OU
[&        R(                  " 5       -  n
U
S/-  n
[+        U R                  XR                  R-                  SS5      S9  g )	N)redirect)r,   shellSCRAPY_PYTHON_SHELL,pythonbanner )shellsr<   )signalSIGINTSIG_IGNfetchrequestpopulate_varsr1   printevalglobalsr2   r   osenvirongetstriplowersplit
has_optionr   keysr   pop)r3   urlrC   responser.   r7   cfgsectionoptionenvr>   s              r%   startShell.start7   sJ    	fmmV^^4JJsXJ6JJw'&&Gx&9 99$tyy')TYY78 ,C1OG**..!67CF))+++-33C8800777399;AACDD/4466xj F 		&x1Lr(   c                  ^ ^^ [        5       (       a$  T R                  R                  S   n[        U5        UU 4S jnT R	                  TT5      nUR                  U5        [        T5      nUR                  U4S j5        U$ )NASYNCIO_EVENT_LOOPc                   > TR                   R                  c   eTR                   R                  R                  T5        g r"   )r*   enginecrawl)_rC   r3   s    r%   crawl_request&Shell._schedule.<locals>.crawl_requestk   s1    <<&&222LL%%g.r(   c                   > U T4$ r"   r#   )r$   r.   s    r%   r&   !Shell._schedule.<locals>.<lambda>s   s	    Fr(   )r   r*   r,   r   _open_spideraddCallback_request_deferred)r3   rC   r.   event_loop_pathr_   d2ds   ```    r%   	_scheduleShell._schedulee   sj    '))"ll334HIO"?3	/ w/
}%g&	+,r(   c                  #    U R                   (       a  g Uc7  U R                  R                   =(       d    U R                  R                  5       nX R                  l         U R                  R                  (       d   e[	        U R                  R                  R                  USS95      I S h  vN   U R                  R                  R                  5         X l         g  N/7f)NF)close_if_idle)r.   r*   _create_spiderr\   r   open_spider_start_request_processing)r3   rC   r.   s      r%   rc   Shell._open_spiderv   s     ;;>\\((IDLL,G,G,IF$||""""&LL++F%+H
 	
 	
 	557		
s   B*C,C-0Cc                   SSK Jn  [        U[        5      (       a  UnOR[	        U5      n[        U4SS0UD6nU(       a#  [        [        SS5      5      UR                  S'   OSUR                  S'   S n[        R                  " [        5         [        R                  " XPR                  Xb5      u  pS S S 5        U R                  XU5        g ! , (       d  f       N!= f)	Nr   )reactordont_filterTi,  i  handle_httpstatus_listhandle_httpstatus_all)twisted.internetrr   
isinstancer   r
   r   rangemeta
contextlibsuppressr   r   blockingCallFromThreadri   rD   )	r3   request_or_urlr.   r7   kwargsrr   rC   rQ   rR   s	            r%   rB   Shell.fetch   s     	-ng..$G^,Cc>t>v>G9H#sO:56 9=45  /&== H 0 	8f5	 0/s   $C
Cc                n   SS K nX@R                  S'   U R                  U R                  S'   U R                  5       U R                  S'   U R                  R                  U R                  S'   X0R                  S'   X R                  S'   XR                  S'   U R
                  (       a  U R                  U R                  S	'   [        U R                  S
'   U R                  U R                  S'   U R                  U R                  5        U R                  (       d  U R                  5       U R                  S'   g g )Nr   scrapyr*   itemr,   r.   rC   rR   rB   viewshelpr<   )r   r2   r*   r-   r,   r0   rB   r   
print_helpr+   r1   get_help)r3   rR   rC   r.   r   s        r%   rD   Shell.populate_vars   s     	$		(#||		) OO-		& $ 5 5		*$		(&		) (		*==!%DIIg+		&!__		'#yy"&--/DIIh r(   c                6    [        U R                  5       5        g r"   )rE   r   )r3   s    r%   r   Shell.print_help   s    dmmor(   c                   / nUR                  S5        UR                  S5        [        U R                  R                  5       5       H5  u  p#U R	                  U5      (       d  M  UR                  SUS SU 35        M7     UR                  S5        U R
                  (       a"  UR                  S5        UR                  S5        UR                  S	5        UR                  S
5        SR                  S U 5       5      $ )NzAvailable Scrapy objects:zJ  scrapy     scrapy module (contains scrapy.Request, scrapy.Selector, etc)z  z<10 zUseful shortcuts:ze  fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)zN  fetch(req)                  Fetch a scrapy.Request and update local objects z0  shelp()           Shell help (print this help)z.  view(response)    View response in a browser
c              3  ,   #    U  H
  nS U 3v   M     g7f)z[s] Nr#   ).0lines     r%   	<genexpr>!Shell.get_help.<locals>.<genexpr>   s     5144v1s   )appendsortedr2   items_is_relevantr0   join)r3   bkvs       r%   r   Shell.get_help   s    	,-	X	
 499??,-DA  ##2aWAaS)* . 	
$%==HHZ HHC 	
CD	AByy51555r(   c                P    [        XR                  5      =(       d    [        U5      $ r"   )rw   r   r   )r3   values     r%   r   Shell._is_relevant   s    %!6!67I75>Ir(   )r1   r*   r0   r-   r.   r+   r2   )NN)r*   r   r+   z'Callable[[dict[str, Any]], None] | Noner1   
str | None)NNNNT)rQ   r   rC   Request | NonerR   Response | Noner.   Spider | Noner7   boolreturnNone)rC   r   r.   r   r   defer.Deferred[Any])rC   r   r.   r   r   r   )NT)
r}   zRequest | strr.   r   r7   r   r~   r   r   r   )NNN)rR   r   rC   r   r.   r   r   r   )r   r   )r   str)r   r   r   r   )__name__
__module____qualname____firstlineno__r   r   r   r   r   r   __annotations__r4   rW   ri   r   rc   rB   rD   r   r   r   __static_attributes__r#   r(   r%   r   r   $   s1   *167Hh)W&W
 @D	'' =' 	'$ "&$( $,,  , "	,
 , , 
,\"  $ !%	6%6 6 	6
 6 
6: %)"& $	2!2  2 	2
 
2.60Jr(   r   c                    [         R                  " [         R                  5      n[        UR                  5      R                  XS9  [         R                   " [         R                  U5        g)z*Open a shell to inspect the given response)rR   r.   N)r?   	getsignalr@   r   r*   rW   )rR   r.   sigint_handlers      r%   inspect_responser      sD     %%fmm4N	&..A
MM&--0r(   c                  ^ ^^ T R                   mT R                  mSU UU4S jjn[        R                  " 5       nUR	                  U5        T R                   (       a  UR                  T R                   5        T R                  (       a  UR                  T R                  5        UR                   UR                  sT l         T l        U$ )a  Wrap a request inside a Deferred.

This function is harmful, do not use it until you know what you are doing.

This returns a Deferred whose first pair of callbacks are the request
callback and errback. The Deferred also triggers when the request
callback/errback is executed (i.e. when the request is downloaded)

WARNING: Do not call request.replace() until after the deferred is called.
c                $   > TTl         TTl        U $ r"   )callbackerrback)resultrC   request_callbackrequest_errbacks    r%   _restore_callbacks-_request_deferred.<locals>._restore_callbacks   s    +)r(   )r   r   r   r   )r   r   r   DeferredaddBothrd   
addErrback)rC   r   rh   r   r   s   `  @@r%   re   re      s     ''ooO 
 #^^-AII !	g&&'	W__%()

AII%GgoHr(   )rR   r   r.   r   r   r   )rC   r   r   r   )3__doc__
__future__r   rz   rH   r?   typingr   r   itemadapterr   rv   r   r   twisted.pythonr	   	w3lib.urlr
   scrapy.crawlerr   scrapy.exceptionsr   scrapy.httpr   r   scrapy.settingsr   scrapy.spidersr   scrapy.utils.confr   scrapy.utils.consoler   r   scrapy.utils.datatypesr   scrapy.utils.deferr   r   scrapy.utils.miscr   scrapy.utils.reactorr   r   scrapy.utils.responser   collections.abcr   r   r   re   r#   r(   r%   <module>r      sj    #  	  %  + %   " + ) $ ! ( L 2 O ) U 1(pJ pJf1r(   