
    `                         d dl mZ d dlmZ defdZdedefdZdedefdZdedefdZ	d	ed
e
defdZdedefdZdedefdZdedefdZdedefdZdedefdZded
e
defdZdS )    )MappingProxyType)Anyreturnc                      	 dd l } 	 t          | j        d| j        j                  }| j        j        |fS # t
          $ r | j        j        fcY S w xY w# t          $ r Y dS w xY w)Nr   	_BaseItem )scrapygetattritemBaseItemItemAttributeErrorImportError)r	   _base_item_clss     1lib/python3.11/site-packages/itemadapter/utils.py_get_scrapy_item_classesr      s    	'	'$V[+v{?STTNK$n55 	' 	' 	'K$&&&&	'    rrs    A -5 AA
A A objc                 Z    	 dd l }n# t          $ r Y dS w xY w|                    |           S Nr   F)dataclassesr   is_dataclass)r   r   s     r   _is_dataclassr      sL       uu##C(((    
c                 Z    	 dd l }n# t          $ r Y dS w xY w|                    |           S r   )attrr   has)r   r   s     r   _is_attrs_classr      sD       uu88C==r   c                 T    	 ddl m} n# t          $ r Y dS w xY wt          | |          S )Nr   )	BaseModelF)pydanticr   r   
issubclass)r   r   s     r   _is_pydantic_modelr"   "   sN    &&&&&&&   uuc9%%%s   	 

item_model
field_namec                     i }| j         |         j        }dD ]}t          ||          }||||<   |j        s
|j        |d<   |                    |j                   t          |          S )N)aliastitledescriptionconstgtgeltlemultiple_of	min_items	max_items
min_length
max_lengthregexallow_mutation)
__fields__
field_infor
   r4   updateextrar   )r#   r$   metadatafieldr   values         r   _get_pydantic_model_metadatar<   *   s    H!*-8E # #  t$$"HTN :%*%9!"OOEK   H%%%    c                 L    t          |           ot          | t                     S )a  Return True if the given object is a dataclass object, False otherwise.

    In py36, this function returns False if the "dataclasses" backport is not available.

    Taken from https://docs.python.org/3/library/dataclasses.html#dataclasses.is_dataclass.
    )r   
isinstancetyper   s    r   is_dataclass_instancerB   H   s$     ;jd&;&;";;r=   c                 f    t          t          |                     ot          | t                     S )zEReturn True if the given object is a Pydantic model, False otherwise.)r"   r@   r?   rA   s    r   is_pydantic_instancerD   R   s(    d3ii((FC1F1F-FFr=   c                 L    t          |           ot          | t                     S )zIReturn True if the given object is a attrs-based object, False otherwise.)r   r?   r@   rA   s    r   is_attrs_instancerF   W   s"    3=
3(=(=$==r=   c                     	 ddl }n# t          $ r Y dS w xY wt          | |j        j                  rdS 	 t          |j        d|j        j                  }t          | |          S # t          $ r Y dS w xY w)zBReturn True if the given object is a Scrapy item, False otherwise.r   NFTr   )r	   r   r?   r   r   r
   r   r   )r   r	   r   s      r   is_scrapy_itemrH   \   s       uu#v{'(( t6;V[5IJJ#x(((   uus    
/A% %
A32A3c                 8    ddl m} |                    |           S )zReturn True if the given object belongs to one of the supported types, False otherwise.

    Alias for ItemAdapter.is_item
    r   )ItemAdapter)itemadapter.adapterrJ   is_item)r   rJ   s     r   rL   rL   l   s*    
 0/////s###r=   
item_classc                    t          | t                                rt          | j        |                   S t	          |           rAddlm}  ||           D ]}|j        |k    r	|j        c S t          | j	        d|          t          |           rDddlm} 	  ||           |         j        S # t          $ r t          | j	        d|          w xY wt          |           r8	 t          | |          S # t          $ r t          | j	        d|          w xY wt          | t                    rt          i           S t!          | d          )a  Return a read-only mapping with metadata for the given field name, within the given item class.
    If there is no metadata for the field, or the item class does not support field metadata,
    an empty object is returned.

    Field metadata is taken from different sources, depending on the item type:
    * scrapy.item.Item: corresponding scrapy.item.Field object
    * dataclass items: "metadata" attribute for the corresponding field
    * attrs items: "metadata" attribute for the corresponding field
    * pydantic models: corresponding pydantic.field.FieldInfo/ModelField object

    The returned value is an instance of types.MappingProxyType, i.e. a dynamic read-only view
    of the original mapping, which gets automatically updated if the original mapping changes.
    r   )fieldsz does not support field: )fields_dictz is not a valid item class)r!   r   r   rO   r   r   namer9   KeyError__name__r   r   rP   r"   r<   dict	TypeError)rM   r$   rO   r:   rP   s        r   get_field_meta_from_classrV   v   s    *68899 H
 1* =>>>	z	"	" H&&&&&&VJ'' 	& 	&EzZ''~%%% (*:M:M:MzzZ[[[		$	$ H$$$$$$	`;z**:6?? 	` 	` 	`j>Q>Q>QS]S]^___	`	J	'	' H	`/
JGGG 	` 	` 	`j>Q>Q>QS]S]^___	`	J	%	% H###***FGGGs   B3 3$C*C: :$DN)typesr   typingr   tupler   boolr   r   r"   strr<   rB   rD   rF   rH   rL   r@   rV   r   r=   r   <module>r\      s   " " " " " "      
'% 
' 
' 
' 
')s )t ) ) ) )     &C &D & & & &&S &c &FV & & & &<<s <t < < < <Gc Gd G G G G
>3 >4 > > > >
      $ $ $ $ $ $&H$ &HC &HDT &H &H &H &H &H &Hr=   