
    3 d                         d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	  G d de          Z
 G d d	e          Z G d
 de          Z G d de          ZdS )    N)ItemAdapteris_item)Contract)ContractFail)Requestc                       e Zd ZdZdZd ZdS )UrlContractzRContract to set the url of the request (mandatory)
    @url http://scrapy.org
    urlc                 &    | j         d         |d<   |S )Nr   r
   )argsselfr   s     8lib/python3.11/site-packages/scrapy/contracts/default.pyadjust_request_argszUrlContract.adjust_request_args   s    ilU    N__name__
__module____qualname____doc__namer    r   r   r	   r	      s4          D    r   r	   c                       e Zd ZdZdZd ZdS ) CallbackKeywordArgumentsContractzContract 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                 d    t          j        d                    | j                            |d<   |S )N r   )jsonloadsjoinr   r   s     r   r   z4CallbackKeywordArgumentsContract.adjust_request_args    s)     Jsxx	':':;;[r   Nr   r   r   r   r   r      s4          D    r   r   c                   >     e Zd ZdZdZd d eedZ fdZd Z xZ	S )ReturnsContractzContract 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                 ,    t          | t                    S N
isinstancer   xs    r   <lambda>zReturnsContract.<lambda>4   s    Z733 r   c                 ,    t          | t                    S r%   r&   r(   s    r   r*   zReturnsContract.<lambda>5   s    jG44 r   )requestrequestsitemitemsc                     t                      j        |i | t          | j                  dvr$t	          dt          | j                             | j        d         pd | _        | j        | j                 | _        	 t          | j        d                   | _	        n# t          $ r
 d| _	        Y nw xY w	 t          | j        d                   | _        d S # t          $ r t          d          | _        Y d S w xY w)N)         z5Incorrect argument quantity: expected 1, 2 or 3, got r   r1   r2   inf)super__init__lenr   
ValueErrorobj_nameobject_type_verifiersobj_type_verifierint	min_bound
IndexError	max_boundfloat)r   r   kwargs	__class__s      r   r6   zReturnsContract.__init__:   s   $)&)))ty>>* 	XDIXX   	!,!%!;DM!J	 1..DNN 	 	 	DNNN		* 1..DNNN 	* 	* 	*"5\\DNNNN	*s$   B! !B54B59C C<;C<c                    d}|D ]}|                      |          r|dz  }| j        |cxk    o
| j        k    nc }|sF| j        | j        k    r| j        }n| j         d| j         }t          d| d| j         d|           d S )Nr   r1   z..z	Returned r   z, expected )r;   r=   r?   r   r9   )r   outputoccurrencesr)   	assertionexpecteds         r   post_processzReturnsContract.post_processN   s     	! 	!A%%a(( !q NkCCCCT^CCCC	 	~/ A>"n@@@@NKNN$-NNHNN  	 	r   )
r   r   r   r   r   r   r:   r6   rH   __classcell__)rB   s   @r   r"   r"   %   sw        
 
 D3344	 * * * * *(      r   r"   c                       e Zd ZdZdZd ZdS )ScrapesContractz[Contract to check presence of fields in scraped items
    @scrapes page_name page_body
    scrapesc                     |D ]Mt                    r<fd| j        D             }|r'd                    |          }t          d|           Nd S )Nc                 6    g | ]}|t                    v|S r   )r   ).0argr)   s     r   
<listcomp>z0ScrapesContract.post_process.<locals>.<listcomp>k   s)    QQQ3s+a..7PQ3QQQr   z, zMissing fields: )r   r   r    r   )r   rD   missingmissing_fieldsr)   s       @r   rH   zScrapesContract.post_processh   s|     	L 	LAqzz LQQQQ$)QQQ L%)YYw%7%7N&'J.'J'JKKK	L 	Lr   N)r   r   r   r   r   rH   r   r   r   rK   rK   a   s9          DL L L L Lr   rK   )r   itemadapterr   r   scrapy.contractsr   scrapy.exceptionsr   scrapy.httpr   r	   r   r"   rK   r   r   r   <module>rX      s    , , , , , , , , % % % % % % * * * * * *      	 	 	 	 	( 	 	 	    x   9 9 9 9 9h 9 9 9xL L L L Lh L L L L Lr   