
    !hr                        S 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
  SSKJrJrJr  SSKJr  \(       a  SS	KJrJr  SS
KJr   " S S\\\4   5      r " S S\5      r " S S\\\4   \\S9rg)z8
Scrapy Item

See documentation in docs/topics/item.rst
    )annotations)ABCMeta)MutableMappingdeepcopy)pformat)TYPE_CHECKINGAnyNoReturn)
object_ref)IteratorKeysView)Selfc                      \ rS rSrSrSrg)Field   zContainer of field metadata N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       R/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/item.pyr   r      s    %r   r   c                  @   ^  \ rS rSrSr        SU 4S jjrSrU =r$ )ItemMeta   zvMetaclass_ of :class:`Item` that handles field definitions.

.. _metaclass: https://realpython.com/python-metaclasses
c                Z  > UR                  SS 5      n[        S U 5       5      n[        TU ]  U SU-   XS5      n[	        US0 5      n0 n[        U5       H6  n	[	        Xi5      n
[        U
[        5      (       a  XU	'   M)  X;   d  M0  X9   X'   M8     XxS'   XhS'   Ub  XHS'   [        TU ]  XX(5      $ )N__classcell__c              3  `   #    U  H$  n[        US 5      (       d  M  UR                  v   M&     g7f)_classN)hasattrr"   ).0bases     r   	<genexpr>#ItemMeta.__new__.<locals>.<genexpr>&   s     S%$74;R+$++%s   ..x_fieldsr"   )poptuplesuper__new__getattrdir
isinstancer   )mcs
class_namebasesattrs	classcell	new_basesr"   r)   	new_attrsnv	__class__s              r   r-   ItemMeta.__new__"   s     IIot4	S%SS	dZ&7J2.	VA"A!U##q	$x	  %($( )2o&wsAAr   r   )r2   strr3   ztuple[type, ...]r4   zdict[str, Any]returnr   )r   r   r   r   r   r-   r   r    r:   s   @r   r   r      s8    
BB%5B>LB	B Br   r   c                     ^  \ rS rSr% SrS\S'   SS jrSS jrSS jrSS jr	SS	 jr
SU 4S
 jjrSS jrSS jr\R                  rSS jrSS jrSS jrSS jrSrU =r$ )Item9   a  Base class for scraped items.

In Scrapy, an object is considered an ``item`` if it's supported by the
`itemadapter`_ library. For example, when the output of a spider callback
is evaluated, only such objects are passed to :ref:`item pipelines
<topics-item-pipeline>`. :class:`Item` is one of the classes supported by
`itemadapter`_ by default.

Items must declare :class:`Field` attributes, which are processed and stored
in the ``fields`` attribute. This restricts the set of allowed field names
and prevents typos, raising ``KeyError`` when referring to undefined fields.
Additionally, fields can be used to define metadata and control the way
data is processed internally. Please refer to the :ref:`documentation
about fields <topics-items-fields>` for additional information.

Unlike instances of :class:`dict`, instances of :class:`Item` may be
:ref:`tracked <topics-leaks-trackrefs>` to debug memory leaks.

.. _itemadapter: https://github.com/scrapy/itemadapter
zdict[str, Field]r)   c                |    0 U l         U(       d  U(       a'  [        U0 UD6R                  5        H	  u  p4X@U'   M     g g N)_valuesdictitems)selfargskwargskr9   s        r   __init__Item.__init__U   s9    ')6d-f-335Q 6 r   c                     U R                   U   $ rC   rD   rG   keys     r   __getitem__Item.__getitem__[   s    ||C  r   c                    XR                   ;   a  X R                  U'   g [        U R                  R                   SU 35      e)Nz does not support field: )r)   rD   KeyErrorr:   r   )rG   rP   values      r   __setitem__Item.__setitem__^   s;    ++ %LLdnn5566OPSuUVVr   c                    U R                   U	 g rC   rN   rO   s     r   __delitem__Item.__delitem__d   s    LLr   c                V    XR                   ;   a  [        SU< S35      e[        U5      e)N	Use item[z] to get field value)r)   AttributeError)rG   names     r   __getattr__Item.__getattr__g   s,    ;; 9TH4H!IJJT""r   c                x   > UR                  S5      (       d  [        SU< SU< S35      e[        TU ]  X5        g )N_r\   z] = z to set field value)
startswithr]   r,   __setattr__)rG   r^   rU   r:   s      r   rd   Item.__setattr__l   s:    s## 9THD	AT!UVVD(r   c                ,    [        U R                  5      $ rC   )lenrD   rG   s    r   __len__Item.__len__q   s    4<<  r   c                ,    [        U R                  5      $ rC   )iterrD   rh   s    r   __iter__Item.__iter__t   s    DLL!!r   c                6    U R                   R                  5       $ rC   )rD   keysrh   s    r   rp   	Item.keysy   s    ||  ""r   c                *    [        [        U 5      5      $ rC   )r   rE   rh   s    r   __repr__Item.__repr__|   s    tDz""r   c                $    U R                  U 5      $ rC   r>   rh   s    r   copy	Item.copy   s    ~~d##r   c                    [        U 5      $ )z-Return a :func:`~copy.deepcopy` of this item.r   rh   s    r   r   Item.deepcopy   s    ~r   rN   )rH   r
   rI   r
   )rP   r<   r=   r
   )rP   r<   rU   r
   r=   None)rP   r<   r=   rz   )r^   r<   r=   r   )r^   r<   rU   r
   r=   rz   )r=   int)r=   zIterator[str])r=   zKeysView[str])r=   r<   )r=   r   )r   r   r   r   r   __annotations__rK   rQ   rV   rY   r_   rd   ri   rm   r   __hash__rp   rs   rv   r   r   r    r>   s   @r   r@   r@   9   s_    2 !W#
)
!" ""H##$ r   r@   )	metaclassN)r   
__future__r   abcr   collections.abcr   rv   r   pprintr   typingr	   r
   r   scrapy.utils.trackrefr   r   r   typing_extensionsr   rE   r<   r   r   r@   r   r   r   <module>r      sl    #  *   / / ,2 '&DcN &Bw B:K>#s(#Z8 Kr   