
    !h6                       S r SSKJr  SSKrSSKrSSKrSSKrSSKJrJ	r	J
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Jr  SS
KJrJr  SSKJrJrJr  SSKJ r   \(       a  SSK!J"r"  / SQr# " S S5      r$ " S S\$5      r% " S S\$5      r& " S S\$5      r' " S S\$5      r( " S S\$5      r) " S S\$5      r* " S S\$5      r+ " S S \$5      r,g)!zK
Item Exporters are used to export/serialize items into different formats.
    )annotationsN)CallableIterableMapping)BytesIOTextIOWrapper)TYPE_CHECKINGAny)XMLGenerator)AttributesImpl)ItemAdapteris_item)FieldItem)is_listliketo_bytes
to_unicode)ScrapyJSONEncoder)JSONEncoder)BaseItemExporterCsvItemExporterJsonItemExporterJsonLinesItemExporterMarshalItemExporterPickleItemExporterPprintItemExporterXmlItemExporterc                      \ rS rSrSS.SS jjrSSS jjrSS jr        SS jrSS jrSS	 jr	 S       SS jjr
Srg
)r   &   F	dont_failc               .    X l         U R                  X!S9  g )Nr    )_kwargs
_configure)selfr!   kwargss      W/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/exporters.py__init__BaseItemExporter.__init__'   s    '-4    c                0   UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        U(       d3  U(       a+  [        SSR                  UR                  5       5       35      egg)	zConfigure the exporter by popping options from the ``options`` dict.
If dont_fail is set, it won't raise an exception on unexpected options
(useful for using with keyword arguments in subclasses ``__init__`` methods)
encodingNfields_to_exportexport_empty_fieldsFindentzUnexpected options: z, )popr,   r-   r.   r/   	TypeErrorjoinkeys)r%   optionsr!   s      r'   r$   BaseItemExporter._configure+   s    
 %,KK
D$AJQ++K
 *15JE)R ")++h"=W2499W\\^3L2MNOO %yr*   c                    [         eN)NotImplementedErrorr%   items     r'   export_itemBaseItemExporter.export_item9   s    !!r*   c                8    UR                  SS 5      nU" U5      $ )N
serializerc                    U $ r7    )xs    r'   <lambda>2BaseItemExporter.serialize_field.<locals>.<lambda>?   s    Qr*   )getr%   fieldnamevaluer>   s        r'   serialize_field BaseItemExporter.serialize_field<   s     ,199\;+O
%  r*   c                    g r7   r@   r%   s    r'   start_exporting BaseItemExporter.start_exportingB       r*   c                    g r7   r@   rL   s    r'   finish_exporting!BaseItemExporter.finish_exportingE   rO   r*   Nc              #  ~  ^#    [        T5      mUc  U R                  nU R                  c(  U(       a  TR                  5       OTR	                  5       nO[        U R                  [        5      (       aG  U(       a  U R                  R                  5       nOOU4S jU R                  R                  5        5       nO*U(       a  U R                  nOU4S jU R                   5       nU HS  n[        U[        5      (       a  XUpvOUu  pgUT;   a'  TR                  U5      nU R                  XTU   5      n	OUn	Xy4v   MU     g7f)zNReturn the fields to export as an iterable of tuples
(name, serialized_value)
Nc              3  >   >#    U  H  u  pUT;   d  M  X4v   M     g 7fr7   r@   ).0rA   yr:   s      r'   	<genexpr>:BaseItemExporter._get_serialized_fields.<locals>.<genexpr>Y   s!      'DtqT	FQF'Ds   
c              3  6   >#    U  H  oT;   d  M
  Uv   M     g 7fr7   r@   )rU   rA   r:   s     r'   rW   rX   _   s     H%:4i!!%:s   		)r   r.   r-   field_namesr3   
isinstancer   itemsstrget_field_metarI   )
r%   r:   default_valueinclude_empty
field_iter
field_name
item_fieldoutput_field
field_metarH   s
    `        r'   _get_serialized_fields'BaseItemExporter._get_serialized_fieldsH   s     4   44M  (/<))+$))+J--w77!2288:
'+'<'<'B'B'D
 ..JHT%:%:HJ$J*c**+5L+5(
T!!00<
,,ZtJGWX%%% %s   D:D=)r#   r,   r.   r-   r/   )r!   boolr&   r
   Fr4   zdict[str, Any]r!   rh   returnNoner:   r
   rk   rl   rF   zMapping[str, Any] | FieldrG   r]   rH   r
   rk   r
   rk   rl   )NN)r:   r
   r_   r
   r`   zbool | Nonerk   zIterable[tuple[str, Any]])__name__
__module____qualname____firstlineno__r(   r$   r;   rI   rM   rQ   rf   __static_attributes__r@   r*   r'   r   r   &   su    ,1 5P"!.!69!BE!	! RV$&$&(+$&CN$&	"$& $&r*   r   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )r   o   c                   > [         TU ]  " SSS0UD6  Xl        U R                  R	                  SU R
                  (       + 5        [        S0 U R                  D6U l        g )Nr!   Tensure_asciir@   )superr(   filer#   
setdefaultr,   r   encoderr%   rz   r&   	__class__s      r'   r(   JsonLinesItemExporter.__init__p   sK    24262!	DMM0AB$5$E$Er*   c                    [        U R                  U5      5      nU R                  R                  U5      S-   nU R                  R                  [        X0R                  5      5        g N
)dictrf   r|   encoderz   writer   r,   r%   r:   itemdictdatas       r'   r;   !JsonLinesItemExporter.export_itemv   sI    33D9:||""8,t3		}}56r*   )r|   rz   rz   r   r&   r
   rm   rp   rq   rr   rs   r(   r;   rt   __classcell__r~   s   @r'   r   r   o   s    F7 7r*   r   c                  ^   ^  \ rS rSrS	U 4S jjrS
S jrS
S jrS
S jrS
S jrSS jr	Sr
U =r$ )r   |   c                \  > [         TU ]  " SSS0UD6  Xl        U R                  b  U R                  S:  a  U R                  OS nU R                  R                  SU5        U R                  R                  SU R                  (       + 5        [        S0 U R                  D6U l        SU l	        g )Nr!   Tr   r/   rx   r@   )
ry   r(   rz   r/   r#   r{   r,   r   r|   
first_item)r%   rz   r&   json_indentr~   s       r'   r(   JsonItemExporter.__init__}   s    24262!	
  ;;2t{{QDKKD 	 	+6DMM0AB(84<<8r*   c                V    U R                   b  U R                  R                  S5        g g )N   
)r/   rz   r   rL   s    r'   _beautify_newline"JsonItemExporter._beautify_newline   s!    ;;"IIOOE" #r*   c                    U R                   (       a  SU l         g U R                  R                  S5        U R                  5         g )NF   ,)r   rz   r   r   rL   s    r'   _add_comma_after_first'JsonItemExporter._add_comma_after_first   s,    ??#DOIIOOD!""$r*   c                Z    U R                   R                  S5        U R                  5         g )N   [)rz   r   r   rL   s    r'   rM    JsonItemExporter.start_exporting   s    		 r*   c                Z    U R                  5         U R                  R                  S5        g )N   ])r   rz   r   rL   s    r'   rQ   !JsonItemExporter.finish_exporting   s     		r*   c                    [        U R                  U5      5      n[        U R                  R	                  U5      U R
                  5      nU R                  5         U R                  R                  U5        g r7   )	r   rf   r   r|   r   r,   r   rz   r   r   s       r'   r;   JsonItemExporter.export_item   sR    33D9:++H5t}}E##%		r*   )r|   rz   r   r   ro   rm   )rp   rq   rr   rs   r(   r   r   rM   rQ   r;   rt   r   r   s   @r'   r   r   |   s&    #%! r*   r   c                  p   ^  \ rS rSrS
U 4S jjrSSS jjrSSS jjrSS jrSS jrSS jr	SS jr
S	rU =r$ )r      c                   > UR                  SS5      U l        UR                  SS5      U l        [        TU ]  " S0 UD6  U R
                  (       d  SU l        [        XR
                  S9U l        g )Nitem_elementr:   root_elementr\   utf-8r,   r@   )r0   r   r   ry   r(   r,   r   xgr}   s      r'   r(   XmlItemExporter.__init__   sW    "JJ~v>"JJ~w?"6"}}#DMtmm<r*   c                    U R                   b4  U R                   S:  d  U(       a  U R                  R                  S5        g g g )Nr   r   r/   r   
characters)r%   new_items     r'   r   !XmlItemExporter._beautify_newline   s3    ;;"a8GGt$ <D"r*   c                ~    U R                   (       a,  U R                  R                  SU R                   -  U-  5        g g )N r   )r%   depths     r'   _beautify_indent XmlItemExporter._beautify_indent   s.    ;;GGsT[[0589 r*   c                    U R                   R                  5         U R                   R                  U R                  [	        0 5      5        U R                  SS9  g )NTr   )r   startDocumentstartElementr   r   r   rL   s    r'   rM   XmlItemExporter.start_exporting   sB    T..r0BC-r*   c                x   U R                  SS9  U R                  R                  U R                  [	        0 5      5        U R                  5         U R                  USS9 H  u  p#U R                  X#SS9  M     U R                  SS9  U R                  R                  U R                  5        U R                  SS9  g )N   r    )r_      Tr   )	r   r   r   r   r   r   rf   _export_xml_field
endElement)r%   r:   rG   rH   s       r'   r;   XmlItemExporter.export_item   s    A&T..r0BC 66t26NKD""4a"8 OA&4,,--r*   c                    U R                   R                  U R                  5        U R                   R                  5         g r7   )r   r   r   endDocumentrL   s    r'   rQ    XmlItemExporter.finish_exporting   s*    4,,-r*   c                   U R                  US9  U R                  R                  U[        0 5      5        [	        US5      (       aL  U R                  5         UR                  5        H  u  pEU R                  XEUS-   S9  M     U R                  US9  O[        U5      (       a<  U R                  5         U H  nU R                  SXSS-   S9  M     U R                  US9  OU[        U[        5      (       a  U R                  R                  U5        O$U R                  R                  [        U5      5        U R                  R                  U5        U R                  5         g )Nr   r\   r   rH   )r   r   r   r   hasattrr   r\   r   r   r[   r]   r   r   )r%   rG   serialized_valuer   subnamerH   s         r'   r   !XmlItemExporter._export_xml_field   s$   E*T>"#56#W--""$"2"8"8":&&wUQY&G #;!!!.)**""$)&&wQY&G *!!!.(#..GG/0GGs#3454  r*   )r,   r   r   r   r   ri   )r   rh   rk   rl   )r   )r   intrk   rl   ro   rm   )rG   r]   r   r
   r   r   rk   rl   )rp   rq   rr   rs   r(   r   r   rM   r;   rQ   r   rt   r   r   s   @r'   r   r      s+    =%:.
.! !r*   r   c                     ^  \ rS rSr   S
         SU 4S jjjr        SS jrSS jrSS jrSS jrSS jr	SS jr
S	rU =r$ )r      c           	       > [         TU ]  " SSS0UD6  U R                  (       d  SU l        X l        [	        USSU R                  SUS9U l        [        R                  " U R
                  40 U R                  D6U l	        SU l
        X0l        g )Nr!   Tr   Fr   )line_bufferingwrite_throughr,   newlineerrorsr@   )ry   r(   r,   include_headers_liner   streamcsvwriterr#   
csv_writer_headers_not_written_join_multivalued)r%   rz   r   join_multivaluedr   r&   r~   s         r'   r(   CsvItemExporter.__init__   s}     	24262}}#DM$8!# ]]
 **T[[ADLLA$(!!1r*   c                J    UR                  SU R                  5      nU" U5      $ Nr>   )rD   _join_if_neededrE   s        r'   rI   CsvItemExporter.serialize_field   s%     ,199\4CWCW+X
%  r*   c                    [        U[        [        45      (       a   U R                  R	                  U5      $ U$ ! [
         a     U$ f = fr7   )r[   listtupler   r2   r1   )r%   rH   s     r'   r   CsvItemExporter._join_if_needed   sO    edE]++--22599   s   : 
AAc                    U R                   (       a  SU l         U R                  U5        U R                  USSS9n[        U R	                  S U 5       5      5      nU R
                  R                  U5        g )NFr   T)r_   r`   c              3  *   #    U  H	  u  pUv   M     g 7fr7   r@   )rU   _rA   s      r'   rW   .CsvItemExporter.export_item.<locals>.<genexpr>  s     %;FDAaFs   )r   '_write_headers_and_set_fields_to_exportrf   r   
_build_rowr   writerow)r%   r:   fieldsvaluess       r'   r;   CsvItemExporter.export_item  sd    $$(-D%88>,,TSW,Xdoo%;F%;;<  (r*   c                8    U R                   R                  5         g r7   )r   detachrL   s    r'   rQ    CsvItemExporter.finish_exporting  s    r*   c              #  x   #    U H  n [        X R                  5      v   M     g ! [         a    Uv    M1  f = f7fr7   )r   r,   r1   )r%   r   ss      r'   r   CsvItemExporter._build_row  s8     A MM22   s   :%:7:7:c                   U R                   (       a  U R                  (       d  [        U5      R                  5       U l        [	        U R                  [
        5      (       a  U R                  R                  5       nOU R                  (       d   eU R                  n[        U R                  U5      5      nU R                  R                  U5        g g r7   )r   r-   r   rZ   r[   r   r   r   r   r   r   )r%   r:   r   rows       r'   r   7CsvItemExporter._write_headers_and_set_fields_to_export  s    $$(((3D(9(E(E(G%$//99..557,,,,..tv./COO$$S) %r*   )r   r   r   r,   r-   r   r   )T,N)
rz   r   r   rh   r   r]   r   z
str | Noner&   r
   rn   rH   r
   rk   r
   rm   ro   )r   Iterable[Any]rk   r   )rp   rq   rr   rs   r(   rI   r   r;   rQ   r   r   rt   r   r   s   @r'   r   r      s     &* #!22 #2 	2
 2 2 20!.!69!BE!	!)* *r*   r   c                  :   ^  \ rS rSrSSU 4S jjjrSS jrSrU =r$ )r   i'  c                >   > [         TU ]  " S0 UD6  Xl        X l        g Nr@   )ry   r(   rz   protocol)r%   rz   r   r&   r~   s       r'   r(   PickleItemExporter.__init__(  s    "6"!	%r*   c                    [        U R                  U5      5      n[        R                  " X R                  U R
                  5        g r7   )r   rf   pickledumprz   r   )r%   r:   ds      r'   r;   PickleItemExporter.export_item-  s-    ,,T23Ayy$--0r*   )rz   r   )   )rz   r   r   r   r&   r
   rm   r   r   s   @r'   r   r   '  s    & &
1 1r*   r   c                  :   ^  \ rS rSrSrSU 4S jjrSS jrSrU =r$ )r   i2  a  Exports items in a Python-specific binary format (see
:mod:`marshal`).

:param file: The file-like object to use for exporting the data. Its
             ``write`` method should accept :class:`bytes` (a disk file
             opened in binary mode, a :class:`~io.BytesIO` object, etc)
c                2   > [         TU ]  " S0 UD6  Xl        g r   ry   r(   rz   r}   s      r'   r(   MarshalItemExporter.__init__;      "6"!	r*   c                v    [         R                  " [        U R                  U5      5      U R                  5        g r7   )marshalr  r   rf   rz   r9   s     r'   r;   MarshalItemExporter.export_item?  s$    T$55d;<diiHr*   rz   r   rm   )	rp   rq   rr   rs   __doc__r(   r;   rt   r   r   s   @r'   r   r   2  s    "I Ir*   r   c                  6   ^  \ rS rSrSU 4S jjrSS jrSrU =r$ )r   iC  c                2   > [         TU ]  " S0 UD6  Xl        g r   r  r}   s      r'   r(   PprintItemExporter.__init__D  r
  r*   c                    [        U R                  U5      5      nU R                  R                  [	        [
        R                  " U5      S-   5      5        g r   )r   rf   rz   r   r   pprintpformat)r%   r:   r   s      r'   r;   PprintItemExporter.export_itemH  s:    33D9:		!9D!@ABr*   r  r   rm   r   r   s   @r'   r   r   C  s    "C Cr*   r   c                  l   ^  \ rS rSrSrS	S
U 4S jjjr        SS jrSS jrSS jrSS jr	Sr
U =r$ )PythonItemExporteriM  a(  This is a base class for item exporters that extends
:class:`BaseItemExporter` with support for nested items.

It serializes items to built-in Python types, so that any serialization
library (e.g. :mod:`json` or msgpack_) can be used on top of it.

.. _msgpack: https://pypi.org/project/msgpack/
c                V   > [         TU ]  X5        U R                  (       d  SU l        g g )Nr   )ry   r$   r,   )r%   r4   r!   r~   s      r'   r$   PythonItemExporter._configureW  s#    7.}}#DM r*   c                J    UR                  SU R                  5      nU" U5      $ r   )rD   _serialize_valuerE   s        r'   rI   "PythonItemExporter.serialize_field\  s*     ,199$//,

 %  r*   c                n   [        U[        5      (       a  U R                  U5      $ [        U[        [        45      (       a  [        XR                  S9$ [        U5      (       a  [        U R                  U5      5      $ [        U5      (       a!  U Vs/ s H  o R                  U5      PM     sn$ U$ s  snf )Nr   )r[   r   r;   r]   bytesr   r,   r   r   _serialize_itemr   r  )r%   rH   vs      r'   r  #PythonItemExporter._serialize_valued  s    eT""##E**ec5\**emm<<5>>,,U344u6;<e))!,e<< =s   B2c              #  x   #    [        U5      R                  5        H  u  p#X R                  U5      4v   M     g 7fr7   )r   r\   r  )r%   r:   keyrH   s       r'   r   "PythonItemExporter._serialize_itemo  s3     %d+113JC,,U333 4s   8:c                :    [        U R                  U5      5      nU$ r7   )r   rf   )r%   r:   results      r'   r;   PythonItemExporter.export_items  s    )-d.I.I$.O)Pr*   r   ri   rj   rn   r   )r:   r
   rk   z!Iterable[tuple[str | bytes, Any]])r:   r
   rk   zdict[str | bytes, Any])rp   rq   rr   rs   r  r$   rI   r  r   r;   rt   r   r   s   @r'   r  r  M  sK    $ $
!.!69!BE!	!	4 r*   r  )-r  
__future__r   r   r  r  r  collections.abcr   r   r   ior   r   typingr	   r
   xml.sax.saxutilsr   xml.sax.xmlreaderr   itemadapterr   r   scrapy.itemr   r   scrapy.utils.pythonr   r   r   scrapy.utils.serializer   jsonr   __all__r   r   r   r   r   r   r   r   r  r@   r*   r'   <module>r5     s    # 
    7 7 % % ) , , # A A 4 	F& F&R
7, 
7&' &R6!& 6!rF*& F*R1) 1I* I"C) C() (r*   