
    `%                        d dl mZmZ d dlmZ d dlmZmZ d dlm	Z	 d dl
mZmZmZmZ d dlmZmZmZmZmZmZ g dZ G d d	ee
          Z G d d          Z G d dee          Z G d dee          Z G d de          Z G d d          Z G d dee          Z G d dee          Z G d de          ZdedefdZ dS )    )abstractmethodABCMeta)deque)KeysViewMutableMappingMappingProxyType)AnyDequeIteratorType)_get_pydantic_model_metadatais_attrs_instanceis_dataclass_instanceis_itemis_pydantic_instanceis_scrapy_item)AdapterInterfaceAttrsAdapterDataclassAdapterDictAdapterItemAdapterPydanticAdapterScrapyItemAdapterc                   n    e Zd ZdZdeddfdZeededefd                        Z	de
defdZdefd	ZdS )
r   zAbstract Base Class for adapters.

    An adapter that handles a specific type of item should inherit from this
    class and implement the abstract methods defined here, plus the
    abtract methods inherited from the MutableMapping base class.
    itemreturnNc                     || _         d S Nr   )selfr   s     3lib/python3.11/site-packages/itemadapter/adapter.py__init__zAdapterInterface.__init__$   s    			    c                     t                      )zEReturn True if the adapter can handle the given item, False otherwise)NotImplementedErrorclsr   s     r"   r   zAdapterInterface.is_item'   s     "###r$   
field_namec                      t          i           S )z7Return metadata for the given field name, if available.r   r!   r)   s     r"   get_field_metazAdapterInterface.get_field_meta-   s    ###r$   c                 *    |                                  S )z0Return a dynamic view of the item's field names.)keysr!   s    r"   field_nameszAdapterInterface.field_names1   s    yy{{r$   )__name__
__module____qualname____doc__r
   r#   classmethodr   boolr   strr	   r,   r   r0    r$   r"   r   r      s         S T     $3 $4 $ $ $ ^ [$$ $1A $ $ $ $X      r$   r   )	metaclassc                       e Zd ZU eed<   eed<   dedefdZde	fdZ
dedefdZdededd	fd
Zdedd	fdZdefdZdefdZd	S )_MixinAttrsDataclassAdapter_fields_dictr   r)   r   c                 &    | j         |         j        S r   )r<   metadatar+   s     r"   r,   z*_MixinAttrsDataclassAdapter.get_field_meta;   s     ,55r$   c                 *    t          | j                  S r   )r   r<   r/   s    r"   r0   z'_MixinAttrsDataclassAdapter.field_names>   s    )***r$   c                 \    || j         v rt          | j        |          S t          |          r   )r<   getattrr   KeyErrorr+   s     r"   __getitem__z'_MixinAttrsDataclassAdapter.__getitem__A   s0    ***49j111z"""r$   valueNc                     || j         v rt          | j        ||           d S t          | j        j        j         d|           Nz does not support field: )r<   setattrr   rB   	__class__r1   r!   r)   rD   s      r"   __setitem__z'_MixinAttrsDataclassAdapter.__setitem__F   sO    ***DIz511111di1:aaU_aabbbr$   c                     || j         v r5	 t          | j        |           d S # t          $ r t	          |          w xY wt	          | j        j        j         d|           rF   )r<   delattrr   AttributeErrorrB   rH   r1   r+   s     r"   __delitem__z'_MixinAttrsDataclassAdapter.__delitem__L   s}    ***+	:.....! + + +z***+ di1:aaU_aabbbs   " <c                 D     t           fd j        D                       S )Nc              3   F   K   | ]}t          j        |          |V  d S r   hasattrr   .0attrr!   s     r"   	<genexpr>z7_MixinAttrsDataclassAdapter.__iter__.<locals>.<genexpr>V   s4      SST'$)T:R:RSDSSSSSSr$   )iterr<   r/   s   `r"   __iter__z$_MixinAttrsDataclassAdapter.__iter__U   s)    SSSST%6SSSSSSr$   c                 T    t          t          t          |                               S r   lenlistrW   r/   s    r"   __len__z#_MixinAttrsDataclassAdapter.__len__X       4T

##$$$r$   )r1   r2   r3   dict__annotations__r
   r7   r	   r,   r   r0   rC   rJ   rN   r   rX   intr]   r8   r$   r"   r;   r;   6   s        
III6 61A 6 6 6 6+X + + + +#c #c # # # #
cc c# c$ c c c ccc cd c c c cT( T T T T% % % % % % %r$   r;   c                   H     e Zd Zdeddf fdZededefd            Z xZS )r   r   r   Nc                     t                                          |           dd l}|                    | j        j                  | _        d S )Nr   )superr#   rU   fields_dictr   rH   r<   )r!   r   rU   rH   s      r"   r#   zAttrsAdapter.__init__]   sG     !,,TY-@AAr$   c                      t          |          S r   )r   r'   s     r"   r   zAttrsAdapter.is_itemd   s     &&&r$   	r1   r2   r3   r
   r#   r5   r6   r   __classcell__rH   s   @r"   r   r   \   s        BS BT B B B B B B '3 '4 ' ' ' [' ' ' ' 'r$   r   c                   H     e Zd Zdeddf fdZededefd            Z xZS )r   r   r   Nc                     t                                          |           dd l}d |                    | j                  D             | _        d S )Nr   c                     i | ]
}|j         |S r8   )name)rT   fields     r"   
<dictcomp>z-DataclassAdapter.__init__.<locals>.<dictcomp>o   s    ZZZ5UZZZZr$   )rd   r#   dataclassesfieldsr   r<   )r!   r   rp   rH   s      r"   r#   zDataclassAdapter.__init__j   sV     [ZK<N<Nty<Y<YZZZr$   c                      t          |          S r   )r   r'   s     r"   r   zDataclassAdapter.is_itemq   s    $T***r$   rg   ri   s   @r"   r   r   i   s        [S [T [ [ [ [ [ [ +3 +4 + + + [+ + + + +r$   r   c                       e Zd ZU eed<   dedefdZedede	fd            Z
defdZdedefdZdededd	fd
Zdedd	fdZdefdZdefdZd	S )r   r   r)   r   c                 F    t          t          | j                  |          S r   )r   typer   r+   s     r"   r,   zPydanticAdapter.get_field_metaz   s    +DOOZHHHr$   c                      t          |          S r   )r   r'   s     r"   r   zPydanticAdapter.is_item}   s    #D)))r$   c                 4    t          | j        j                  S r   )r   r   
__fields__r/   s    r"   r0   zPydanticAdapter.field_names   s    	,---r$   c                 f    || j         j        v rt          | j         |          S t          |          r   )r   rx   rA   rB   r+   s     r"   rC   zPydanticAdapter.__getitem__   s2    ---49j111z"""r$   rD   Nc                     || j         j        v rt          | j         ||           d S t          | j         j        j         d|           rF   )r   rx   rG   rB   rH   r1   rI   s      r"   rJ   zPydanticAdapter.__setitem__   sQ    ---DIz511111di1:aaU_aabbbr$   c                     || j         j        v r5	 t          | j         |           d S # t          $ r t	          |          w xY wt	          | j         j        j         d|           rF   )r   rx   rL   rM   rB   rH   r1   r+   s     r"   rN   zPydanticAdapter.__delitem__   s    ---+	:.....! + + +z***+ di1:aaU_aabbbs	   ' Ac                 N     t           fd j        j        D                       S )Nc              3   F   K   | ]}t          j        |          |V  d S r   rQ   rS   s     r"   rV   z+PydanticAdapter.__iter__.<locals>.<genexpr>   s5      VVTWTYPT=U=UVDVVVVVVr$   )rW   r   rx   r/   s   `r"   rX   zPydanticAdapter.__iter__   s+    VVVVTY%9VVVVVVr$   c                 T    t          t          t          |                               S r   rZ   r/   s    r"   r]   zPydanticAdapter.__len__   r^   r$   )r1   r2   r3   r
   r`   r7   r	   r,   r5   r6   r   r   r0   rC   rJ   rN   r   rX   ra   r]   r8   r$   r"   r   r   v   sF        
IIII I1A I I I I *3 *4 * * * [*.X . . . .#c #c # # # #
cc c# c$ c c c ccc cd c c c cW( W W W W% % % % % % %r$   r   c                   p    e Zd ZU eed<   eed<   dedefdZdededdfdZdeddfd	Z	de
fd
ZdefdZdS )_MixinDictScrapyItemAdapterr<   r   r)   r   c                     | j         |         S r   r    r+   s     r"   rC   z'_MixinDictScrapyItemAdapter.__getitem__   s    y$$r$   rD   Nc                     || j         |<   d S r   r    rI   s      r"   rJ   z'_MixinDictScrapyItemAdapter.__setitem__   s     %	*r$   c                     | j         |= d S r   r    r+   s     r"   rN   z'_MixinDictScrapyItemAdapter.__delitem__   s    Ij!!!r$   c                 *    t          | j                  S r   )rW   r   r/   s    r"   rX   z$_MixinDictScrapyItemAdapter.__iter__   s    DIr$   c                 *    t          | j                  S r   )r[   r   r/   s    r"   r]   z#_MixinDictScrapyItemAdapter.__len__   s    49~~r$   )r1   r2   r3   r_   r`   r
   r7   rC   rJ   rN   r   rX   ra   r]   r8   r$   r"   r   r      s         
III%c %c % % % %&c &# &$ & & & &"c "d " " " "(          r$   r   c                   J    e Zd Zededefd            ZdedefdZ	de
fdZdS )r   r   r   c                 ,    t          |t                    S r   )
isinstancer_   r'   s     r"   r   zDictAdapter.is_item   s    $%%%r$   r)   c                      t          i           S r   r   r+   s     r"   r,   zDictAdapter.get_field_meta   s    ###r$   c                 *    t          | j                  S r   )r   r   r/   s    r"   r0   zDictAdapter.field_names   s    	"""r$   Nr1   r2   r3   r5   r
   r6   r   r7   r	   r,   r   r0   r8   r$   r"   r   r      s~        &3 &4 & & & [&$ $1A $ $ $ $#X # # # # # #r$   r   c                   J    e Zd Zededefd            ZdedefdZ	de
fdZdS )r   r   r   c                      t          |          S r   )r   r'   s     r"   r   zScrapyItemAdapter.is_item   s    d###r$   r)   c                 @    t          | j        j        |                   S r   )r	   r   rq   r+   s     r"   r,   z ScrapyItemAdapter.get_field_meta   s    	 0 <===r$   c                 4    t          | j        j                  S r   )r   r   rq   r/   s    r"   r0   zScrapyItemAdapter.field_names   s    	()))r$   Nr   r8   r$   r"   r   r      s~        $3 $4 $ $ $ [$> >1A > > > >*X * * * * * *r$   r   c                   "   e Zd ZU dZ eeeeee	g          Z
eee                  ed<   deddfdZededefd            Zedefd            Zdefd	Zd
edefdZd
ededdfdZd
eddfdZdefdZdefdZd
edefdZ de!fdZ"de#fdZ$dS )r   zWrapper class to interact with data container objects. It provides a common interface
    to extract and set data without having to take the object's type into account.
    ADAPTER_CLASSESr   r   Nc                     | j         D ]*}|                    |          r ||          | _         d S +t          dt	          |           d| d          )Nz&No adapter found for objects of type: z ())r   r   adapter	TypeErrorru   )r!   r   r(   s      r"   r#   zItemAdapter.__init__   sp    ' 	\ 	\C{{4   "s4yy ZT$ZZZZSWZZZ[[[r$   c                 D    t          fd| j        D                       S )Nc              3   B   K   | ]}|                               V  d S r   )r   )rT   adapter_classr   s     r"   rV   z&ItemAdapter.is_item.<locals>.<genexpr>   s1      XX==((..XXXXXXr$   )anyr   r'   s    `r"   r   zItemAdapter.is_item   s)    XXXXCDWXXXXXXr$   c                     | j         j        S r   )r   r   r/   s    r"   r   zItemAdapter.item   s    |  r$   c                     d                     d |                                 D                       }d| j        j        j         d| dS )Nz, c                 "    g | ]\  }}|d |S )=r8   rT   keyrD   s      r"   
<listcomp>z(ItemAdapter.__repr__.<locals>.<listcomp>   s'    RRRzsEsssEE2RRRr$   z<ItemAdapter for (z)>)joinitemsr   rH   r1   )r!   valuess     r"   __repr__zItemAdapter.__repr__   sK    RRTZZ\\RRRSSL49#6#?LL&LLLLr$   r)   c                 6    | j                             |          S r   )r   rC   r+   s     r"   rC   zItemAdapter.__getitem__   s    |''
333r$   rD   c                 <    | j                             ||           d S r   )r   rJ   rI   s      r"   rJ   zItemAdapter.__setitem__   s       U33333r$   c                 :    | j                             |           d S r   )r   rN   r+   s     r"   rN   zItemAdapter.__delitem__   s      ,,,,,r$   c                 4    | j                                         S r   )r   rX   r/   s    r"   rX   zItemAdapter.__iter__   s    |$$&&&r$   c                 4    | j                                         S r   )r   r]   r/   s    r"   r]   zItemAdapter.__len__   s    |##%%%r$   c                 6    | j                             |          S )a  Return a read-only mapping with metadata for the given field name. If there is no metadata
        for the field, or the wrapped item 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

        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   r,   r+   s     r"   r,   zItemAdapter.get_field_meta   s     |**:666r$   c                 4    | j                                         S )zPReturn read-only key view with the names of all the defined fields for the item.)r   r0   r/   s    r"   r0   zItemAdapter.field_names  s    |'')))r$   c                 >    d |                                  D             S )zReturn a dict object with the contents of the adapter. This works slightly different than
        calling `dict(adapter)`: it's applied recursively to nested items (if there are any).
        c                 4    i | ]\  }}|t          |          S r8   _asdictr   s      r"   ro   z&ItemAdapter.asdict.<locals>.<dictcomp>  s$    CCC
UWU^^CCCr$   )r   r/   s    r"   asdictzItemAdapter.asdict  s!     DCdjjllCCCCr$   )%r1   r2   r3   r4   r   r   r   r   r   r   r   r   r   r   r`   r
   r#   r5   r6   r   propertyr   r7   r   rC   rJ   rN   r   rX   ra   r]   r	   r,   r   r0   r_   r   r8   r$   r"   r   r      s	          6;U	
6 6OU4 012   \S \T \ \ \ \ Y3 Y4 Y Y Y [Y !c ! ! ! X!M# M M M M4c 4c 4 4 4 44c 4# 4$ 4 4 4 4-c -d - - - -'( ' ' ' '& & & & &7 71A 7 7 7 7*X * * * *D D D D D D Dr$   r   objr   c                    t          | t                    rd |                                 D             S t          | t          t          t
          f          r|                     d | D                       S t          | t                    r|                                 S t          |           r!t          |                                           S | S )z Helper for ItemAdapter.asdict().c                 4    i | ]\  }}|t          |          S r8   r   r   s      r"   ro   z_asdict.<locals>.<dictcomp>  s$    BBB
UWU^^BBBr$   c              3   4   K   | ]}t          |          V  d S r   r   )rT   xs     r"   rV   z_asdict.<locals>.<genexpr>  s(      55AWQZZ555555r$   )
r   r_   r   r\   settuplerH   r   r   r   )r   s    r"   r   r     s    #t 	BBciikkBBBB	C$U+	,	, }}55555555	C	%	% zz||	 3&&(((
r$   N)!abcr   r   collectionsr   collections.abcr   r   typesr	   typingr
   r   r   r   itemadapter.utilsr   r   r   r   r   r   __all__r   r;   r   r   r   r   r   r   r   r   r8   r$   r"   <module>r      s   ' ' ' ' ' ' ' '       4 4 4 4 4 4 4 4 " " " " " " - - - - - - - - - - - -                     ~    4#% #% #% #% #% #% #% #%L
' 
' 
' 
' 
'.0@ 
' 
' 
'
+ 
+ 
+ 
+ 
+24D 
+ 
+ 
+&% &% &% &% &%& &% &% &%R       *	# 	# 	# 	# 	#-/? 	# 	# 	#	* 	* 	* 	* 	*35E 	* 	* 	*ID ID ID ID ID. ID ID IDX       r$   