
    !h                        S SK Jr  S SKrS SKJr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	\
5      r " S
 S\
5      r " S S\
5      r " S S\
5      r " S S\
5      rg)    )annotationsN)AnyCallable)ItemAdapteris_item)Contract)ContractFail)Requestc                  &    \ rS rSrSrSrSS jrSrg)UrlContract   zJContract to set the url of the request (mandatory)
@url http://scrapy.org
urlc                *    U R                   S   US'   U$ )Nr   r   )argsselfr   s     _/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/contracts/default.pyadjust_request_argsUrlContract.adjust_request_args   s    iilU     Nr   dict[str, Any]returnr   __name__
__module____qualname____firstlineno____doc__namer   __static_attributes__r   r   r   r   r      s     Dr   r   c                  &    \ rS rSrSrSrSS jrSrg) CallbackKeywordArgumentsContract   zContract to set the keyword arguments for the request.
The value should be a JSON-encoded dictionary, e.g.:

@cb_kwargs {"arg1": "some value"}
	cb_kwargsc                j    [         R                  " SR                  U R                  5      5      US'   U$ )N r&   jsonloadsjoinr   r   s     r   r   4CallbackKeywordArgumentsContract.adjust_request_args#   s'     JJsxx		':;[r   r   Nr   r   r   r   r   r$   r$      s     Dr   r$   c                  &    \ rS rSrSrSrSS jrSrg)MetadataContract(   zContract to set metadata arguments for the request.
The value should be JSON-encoded dictionary, e.g.:

@meta {"arg1": "some value"}
metac                j    [         R                  " SR                  U R                  5      5      US'   U$ )Nr(   r1   r)   r   s     r   r   $MetadataContract.adjust_request_args1   s&    zz#((499"56Vr   r   Nr   r   r   r   r   r/   r/   (   s     Dr   r/   c                  \   ^  \ rS rSr% SrSrS S \\S.rS\S'   SU 4S	 jjr	SS
 jr
SrU =r$ )ReturnsContract6   zContract to check the output of a callback

general form:
@returns request(s)/item(s) [min=1 [max]]

e.g.:
@returns request
@returns request 2
@returns request 2 10
@returns request 0 10
returnsc                "    [        U [        5      $ N
isinstancer
   xs    r   <lambda>ReturnsContract.<lambda>E   s    Z73r   c                "    [        U [        5      $ r9   r:   r<   s    r   r>   r?   F   s    jG4r   )requestrequestsitemitemsz'dict[str | None, Callable[[Any], bool]]object_type_verifiersc                  > [         TU ]  " U0 UD6  [        U R                  5      S;  a!  [	        S[        U R                  5       35      eU R                  S   =(       d    S U l        U R                  U R
                     U l         [        U R                  S   5      U l	         [        U R                  S   5      U l        g ! [         a
    SU l	         N2f = f! [         a    [        S5      U l         g f = f)N)         z5Incorrect argument quantity: expected 1, 2 or 3, got r   rG   rH   inf)super__init__lenr   
ValueErrorobj_namerE   obj_type_verifierint	min_bound
IndexError	max_boundfloat)r   r   kwargs	__class__s      r   rL   ReturnsContract.__init__K   s    $)&)tyy>*GDIIGWX  		!,!%!;!;DMM!J	$'		!$5DN	*$'		!$5DN	  	DN	
  	*"5\DN	*s$   C &C CCC87C8c                   SnU H   nU R                  U5      (       d  M  US-  nM"     U R                  Us=:*  =(       a    U R                  :*  Os  nU(       di  U R                  U R                  :X  a  [        U R                  5      nOU R                   SU R                   3n[	        SU SU R
                   SU 35      eg )Nr   rG   z..z	Returned r(   z, expected )rP   rR   rT   strr	   rO   )r   outputoccurrencesr=   	assertionexpecteds         r   post_processReturnsContract.post_process_   s    A%%a((q   NNkCCT^^C	~~/t~~."nn-R/?@K=$--H:N  r   )rT   rR   rO   rP   )r   r   rV   r   r[   z	list[Any]r   None)r   r   r   r   r    r!   r   rE   __annotations__rL   r_   r"   __classcell__)rW   s   @r   r5   r5   6   s;    
 D34	FB *( r   r5   c                  &    \ rS rSrSrSrSS jrSrg)ScrapesContractr   zSContract to check presence of fields in scraped items
@scrapes page_name page_body
scrapesc                    U Hg  n[        U5      (       d  M  U R                   Vs/ s H  o3[        U5      ;  d  M  UPM     nnU(       d  MJ  SR                  U5      n[	        SU 35      e   g s  snf )Nz, zMissing fields: )r   r   r   r,   r	   )r   r[   r=   argmissingmissing_fieldss         r   r_   ScrapesContract.post_processy   s`    Aqzz*.))Q)3+a.7P3)Q7%)YYw%7N&)9.9I'JKK Qs
   A/A/r   Nra   )r   r   r   r   r    r!   r_   r"   r   r   r   rf   rf   r   s     DLr   rf   )
__future__r   r*   typingr   r   itemadapterr   r   scrapy.contractsr   scrapy.exceptionsr	   scrapy.httpr
   r   r$   r/   r5   rf   r   r   r   <module>rt      sY    "    , % * 	( 	x x 9h 9xLh Lr   