σ
η'ΚUc           @@  sΏ  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z	 d  d l
 Z d  d l m Z m Z d  d l m Z d  d l m Z m Z m Z m Z m Z m Z m Z m Z d e f d	     YZ d
 e j f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ  d e f d     YZ! d e f d     YZ" d e" f d     YZ# d e j f d     YZ$ e% d k r»e j&   n  d S(   i    (   t   absolute_importN(   t   BytesIO(   t   cPickle(   t   Itemt   Field(   t   str_to_unicode(   t   BaseItemExportert   PprintItemExportert   PickleItemExportert   CsvItemExportert   XmlItemExportert   JsonLinesItemExportert   JsonItemExportert   PythonItemExportert   TestItemc           B@  s   e  Z e   Z e   Z RS(    (   t   __name__t
   __module__R   t   namet   age(    (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR      s   	t   BaseItemExporterTestc           B@  sb   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z RS(
   c         C@  s7   t  d d d d  |  _ t   |  _ |  j   |  _ d  S(   NR   u   JohnΒ£R   t   22(   R   t   iR   t   outputt   _get_exportert   ie(   t   self(    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   setUp   s    c         K@  s
   t  |   S(   N(   R   (   R   t   kwargs(    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR      s    c         C@  s   d  S(   N(    (   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   _check_output!   s    c         C@  sD   x* | j    D] \ } } t |  | | <q W|  j |  j |  d  S(   N(   t   itemsR   t   assertEqualR   (   R   t   exported_dictt   kt   v(    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   _assert_expected_item$   s    c         C@  sh   |  j  j   y |  j  j |  Wn) t k
 rL |  j  j t k	 rM   qM n X|  j  j   |  j   d  S(   N(   R   t   start_exportingt   export_itemt   NotImplementedErrort	   __class__R   t   finish_exportingR   (   R   t   item(    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   assertItemExportWorks)   s    
c         C@  s   |  j  |  j  d  S(   N(   R)   R   (   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_export_item3   s    c         C@  s   |  j  t |  j   d  S(   N(   R)   t   dictR   (   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_export_dict_item6   s    c         C@  sv   |  j  j |  j j d d |  j d  } |  j | d  |  j  j |  j j d d |  j d  } |  j | d  d  S(   NR   s   JohnΒ£R   R   (   R   t   serialize_fieldR   t   fieldsR   (   R   t   res(    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_serialize_field9   s    ))c         C@  s   |  j  d d g  } |  j t | j |  j   d	 g  |  j  d d g d d  } t | j |  j   d d } t | t  s t  |  j | d  d  S(
   Nt   fields_to_exportR   s   JohnΒ£t   encodings   latin-1i    i   s   John£(   s   names   JohnΒ£(   R   R   t   listt   _get_serialized_fieldsR   t
   isinstancet   strt   AssertionError(   R   R   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_fields_to_export@   s    % c         @  s   d     d t  f   f d     Y} | d d d d  } |  j   } |  j | j | j d d | d  d  |  j | j | j d d | d  d	  d  S(
   Nc         S@  s   t  t |   d  S(   Ni   (   R6   t   int(   t   value(    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   custom_serializerJ   s    t   CustomFieldItemc           @  s    e  Z e   Z e d     Z RS(   t
   serializer(   R   R   R   R   R   (    (   R;   (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR<   M   s   	R   u   JohnΒ£R   R   s   JohnΒ£t   24(   R   R   R   R-   R.   (   R   R<   R   R   (    (   R;   s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_field_custom_serializerI   s    	*(   R   R   R   R   R   R"   R)   R*   R,   R0   R8   R?   (    (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR      s   					
					t   PythonItemExporterTestc           B@  s,   e  Z d    Z d   Z d   Z d   Z RS(   c         K@  s
   t  |   S(   N(   R   (   R   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   Y   s    c         C@  sζ   t  d d d d  } t d d d |  } t  d d d |  } |  j   } | j |  } |  j t |  t  |  j | i i i d d 6d d 6d 6d d 6d 6d d 6 |  j t | d  t  |  j t | d d  t  d  S(   NR   u   JosephR   R   u   Mariau   Jesust   Jesus(   R   R+   R   R$   R   t   type(   R   t   i1t   i2t   i3R   t   exported(    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_nested_item\   s    :c         C@  sθ   t  d d d d  } t  d d d | g  } t  d d d | g  } |  j   } | j |  } |  j | i i i d d 6d d 6g d 6d d 6g d 6d d 6 |  j t | d d  t  |  j t | d d d d  t  d  S(	   NR   u   JosephR   R   u   Mariau   JesusRA   i    (   R   R   R$   R   RB   R+   (   R   RC   RD   RE   R   RF   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_export_listg   s    @c         C@  sθ   t  d d d d  } t d d d | g  } t  d d d | g  } |  j   } | j |  } |  j | i i i d d 6d d 6g d 6d d 6g d 6d d 6 |  j t | d d  t  |  j t | d d d d  t  d  S(	   NR   u   JosephR   R   u   Mariau   JesusRA   i    (   R   R+   R   R$   R   RB   (   R   RC   RD   RE   R   RF   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_export_item_dict_listq   s    @(   R   R   R   RG   RH   RI   (    (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR@   X   s   			
t   PprintItemExporterTestc           B@  s   e  Z d    Z d   Z RS(   c         K@  s   t  |  j |  S(   N(   R   R   (   R   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   ~   s    c         C@  s    |  j  t |  j j     d  S(   N(   R"   t   evalR   t   getvalue(   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR      s    (   R   R   R   R   (    (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyRJ   |   s   	t   PickleItemExporterTestc           B@  s#   e  Z d    Z d   Z d   Z RS(   c         K@  s   t  |  j |  S(   N(   R   R   (   R   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR      s    c         C@  s#   |  j  t j |  j j     d  S(   N(   R"   t   picklet   loadsR   RL   (   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR      s    c         C@  s°   t  d d d d  } t  d d d d  } t   } t |  } | j   | j |  | j |  | j   | j d  |  j t j	 |  |  |  j t j	 |  |  d  S(   NR   t   helloR   t   worldt   byei    (
   R   R   R   R#   R$   R'   t   seekR   RN   t   load(   R   RC   RD   t   fR   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_export_multiple_items   s    	

(   R   R   R   R   RV   (    (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyRM      s   		t   CsvItemExporterTestc           B@  se   e  Z d    Z d
 d  Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z RS(   c         K@  s   t  |  j |  S(   N(   R	   R   (   R   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR      s    c         C@  s(   d   } |  j  | |  | |  |  S(   Nc         S@  s2   g  |  j  t  D] } t t j d |   ^ q S(   Ns   (,|\s+)(   t
   splitlinest   Truet   sortedt   ret   split(   t   csvt   line(    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   <lambda>‘   s   (   R   (   R   t   firstt   secondt   msgt   csvsplit(    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   assertCsvEqual    s    	c         C@  s   |  j  |  j j   d  d  S(   Ns   age,name
22,JohnΒ£
(   Rd   R   RL   (   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   ₯   s    c         K@  sS   t    } t | |  } | j   | j |  | j   |  j | j   |  d  S(   N(   R   R	   R#   R$   R'   Rd   RL   (   R   R(   t   expectedR   t   fpR   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   assertExportResult¨   s    	

c         C@  s/   |  j  d |  j d |  j j j   d d  d  S(   NR(   R1   Re   s   age,name
22,JohnΒ£
(   Rg   R   R.   t   keys(   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_header_export_all°   s    		c         C@  s#   |  j  d t |  j  d d  d  S(   NR(   Re   s   age,name
22,JohnΒ£
(   Rg   R+   R   (   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_header_export_all_dict·   s    	c         C@  sF   x? |  j  t |  j   g D]% } |  j d | d d g d d  q Wd  S(   NR(   R1   R   Re   s	   age
22
(   R   R+   Rg   (   R   R(   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_header_export_single_field½   s
    		c         C@  s   xy |  j  t |  j   g D]_ } t   } t |  } | j   | j |  | j |  | j   |  j | j   d  q Wd  S(   Ns    age,name
22,JohnΒ£
22,JohnΒ£
(	   R   R+   R   R	   R#   R$   R'   Rd   RL   (   R   R(   R   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_header_export_two_itemsΕ   s    	

c         C@  sC   x< |  j  t |  j   g D]" } |  j d | d t d d  q Wd  S(   NR(   t   include_headers_lineRe   s   22,JohnΒ£
(   R   R+   Rg   t   False(   R   R(   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_header_no_header_lineΟ   s
    	c      	   C@  sb   d t  f d     Y} xE | t f D]7 } |  j d | d d d d d g  d	 t d
 d  q# Wd  S(   Nt	   TestItem2c           B@  s   e  Z e   Z e   Z RS(    (   R   R   R   R   t   friends(    (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyRp   Ψ   s   	R(   R   t   JohnRq   t   Maryt   PaulRm   Re   s   "Mary,Paul",John
(   R   R+   Rg   Rn   (   R   Rp   t   cls(    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_join_multivalueΧ   s    	N(   R   R   R   t   NoneRd   R   Rg   Ri   Rj   Rk   Rl   Ro   Rv   (    (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyRW      s   							
	t   XmlItemExporterTestc           B@  sJ   e  Z d    Z d d  Z d   Z d   Z d   Z d   Z d   Z	 RS(   c         K@  s   t  |  j |  S(   N(   R
   R   (   R   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   ζ   s    c         @  s=     f d       f d   } |  j  | |  | |  |  S(   Nc         @  sd   t  |  j    } | rD g  | D]! } | j t   |   f ^ q S|  j |  j d f g f g Sd  S(   N(    (   R3   t   iterchildrent   tagRZ   t   text(   t   elemt   childrent   child(   t   xmltuple(    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   κ   s
    )c         @  s   t  j j |   }   |  S(   N(   t   lxmlt   etreet
   fromstring(   t
   xmlcontentt   doc(   R   (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   xmlsplitρ   s    (   R   (   R   R`   Ra   Rb   R   (    (   R   s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   assertXmlEquivalentι   s    c         C@  sP   t    } t |  } | j   | j |  | j   |  j | j   |  d  S(   N(   R   R
   R#   R$   R'   R   RL   (   R   R(   t   expected_valueRf   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyRg   φ   s    	

c         C@  s#   d } |  j  |  j j   |  d  S(   Nsc   <?xml version="1.0" encoding="utf-8"?>
<items><item><age>22</age><name>JohnΒ£</name></item></items>(   R   R   RL   (   R   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   ώ   s    c         C@  s#   |  j  t d d d g  d  d  S(   NR   u   JohnΒ£u   Doesw   <?xml version="1.0" encoding="utf-8"?>
<items><item><name><value>JohnΒ£</value><value>Doe</value></name></item></items>(   Rg   R   (   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_multivalued_fields  s    c         C@  sS   t  d d d d  } t d d d |  } t  d d d |  } |  j | d  d  S(   NR   u   fooΒ£hooR   R   u   baru   buzs   <?xml version="1.0" encoding="utf-8"?>
<items><item><age><age><age>22</age><name>fooΒ£hoo</name></age><name>bar</name></age><name>buz</name></item></items>(   R   R+   Rg   (   R   RC   RD   RE   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyRG     s
    	c         C@  s]   t  d d  } t d d d i d g d 6 } t  d d d | | g  } |  j | d	  d  S(
   NR   u   foou   bart   v2t   spamt   eggu   buzR   sΓ   <?xml version="1.0" encoding="utf-8"?>
<items><item><age><value><name>foo</name></value><value><name>bar</name><v2><egg><value>spam</value></egg></v2></value></age><name>buz</name></item></items>(   R   R+   Rg   (   R   RC   RD   RE   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_nested_list_item  s
    	N(
   R   R   R   Rw   R   Rg   R   R   RG   R   (    (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyRx   δ   s   					t   JsonLinesItemExporterTestc           B@  s\   e  Z i d  d 6i d d 6i d d 6d d 6d 6d 6Z d   Z d   Z d   Z d	   Z RS(
   u   JesusR   t   Mariat   JosephR   R   c         K@  s   t  |  j |  S(   N(   R   R   (   R   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   4  s    c         C@  s;   t  j |  j j   j    } |  j | t |  j   d  S(   N(   t   jsonRO   R   RL   t   stripR   R+   R   (   R   RF   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   7  s    c         C@  s   t  d d d d  } t d d d |  } t  d d d |  } |  j j   |  j j |  |  j j   t j |  j j	    } |  j
 | |  j  d  S(   NR   u   JosephR   R   u   Mariau   Jesus(   R   R+   R   R#   R$   R'   R   RO   R   RL   R   t   _expected_nested(   R   RC   RD   RE   RF   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyRG   ;  s    c         C@  sF   |  j  d t  |  _ |  j   |  j   |  j t |  j  d t d  S(   Nt	   sort_keyst   foo_unknown_keyword_bar(   R   RY   R   R*   R   t   assertRaisest	   TypeError(   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_extra_keywordsE  s    

(   R   R   R   R   R   RG   R   (    (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   0  s
   0			
t   JsonItemExporterTestc           B@  sS   e  Z e j g Z d    Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 RS(   c         K@  s   t  |  j |  S(   N(   R   R   (   R   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   P  s    c         C@  s>   t  j |  j j   j    } |  j | t |  j  g  d  S(   N(   R   RO   R   RL   R   R   R+   R   (   R   RF   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   S  s    c         C@  sx   |  j  j   |  j  j |  |  j  j |  |  j  j   t j |  j j    } |  j | t	 |  t	 |  g  d  S(   N(
   R   R#   R$   R'   R   RO   R   RL   R   R+   (   R   R(   RF   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   assertTwoItemsExportedW  s    c         C@  s   |  j  |  j  d  S(   N(   R   R   (   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_two_items_  s    c         C@  s   |  j  t |  j   d  S(   N(   R   R+   R   (   R   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_two_dict_itemsb  s    c         C@  sΐ   t  d d d d  } t  d d d |  } t  d d d |  } |  j j   |  j j |  |  j j   t j |  j j    } i d d 6i d d 6t	 |  d 6d 6} |  j
 | | g  d  S(   NR   u   JosephΒ£R   R   u   Mariau   JesusR   (   R   R   R#   R$   R'   R   RO   R   RL   R+   R   (   R   RC   RD   RE   RF   Re   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyRG   e  s    (c         C@  sΊ   t  d d d d  } t d d d |  } t  d d d |  } |  j j   |  j j |  |  j j   t j |  j j	    } i d d 6i d d 6| d 6d 6} |  j
 | | g  d  S(   NR   u   JosephΒ£R   R   u   Mariau   JesusR   (   R+   R   R   R#   R$   R'   R   RO   R   RL   R   (   R   RC   RD   RE   RF   Re   (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_nested_dict_itemp  s    "(   R   R   R   R   R   R   R   R   R   RG   R   (    (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   L  s   						t   CustomItemExporterTestc           B@  s   e  Z d    Z RS(   c         @  sμ   d t  f   f d     Y  t d d d d  }     } |  j | j | j d d | d  d  |  j | j | j d d | d  d  i d d 6d d 6} |  j | j i  d | d  d  |  j | j i  d | d  d  d  S(	   Nt   CustomItemExporterc           @  s   e  Z   f d    Z RS(   c         @  s@   | d k r  t  t |  d  St   |   j | | |  Sd  S(   NR   i   (   R6   R9   t   superR-   (   R   t   fieldR   R:   (   R   (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR-     s    (   R   R   R-   (    (   R   (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR     s   R   u   JohnR   R   Rr   t   23(   R   R   R   R-   R.   (   R   R   R   RD   (    (   R   s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   test_exporter_custom_serializer~  s    	**#(   R   R   R’   (    (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyR   |  s   t   __main__('   t
   __future__R    R[   R   t   unittestt   ioR   t	   six.movesR   RN   t
   lxml.etreeR   t   scrapy.itemR   R   t   scrapy.utils.pythonR   t   scrapy.exportersR   R   R   R	   R
   R   R   R   R   t   TestCaseR   R@   RJ   RM   RW   Rx   R   R   R   R   t   main(    (    (    s8   /home/travis/build/scrapy/scrapy/tests/test_exporters.pyt   <module>   s*   :A$	IL0