U
    sVc$&                     @   sl  d dl mZ d dlmZ d dlZd dlZd dlmZmZ d dl	m
Z d dlmZ ejdd Zdd	 Zd
d Zdd Zdd Zdd Zejdddgdd Zdd Zdd Zdd Zdd Zejdddgdd  Zejdd d!d"d#gd$d% Zejdddd&gd'd( Zd)d* Zejd+dd&gd,d- Z ejd.d/d0gd1d2 Z!d3d4 Z"d5d6 Z#d7d8 Z$dS )9    )StringIO)PathN)	DataFrame	read_json)
JsonReaderc                  C   s(   t dddgdddgd} | jdd	d
S )N                  ABTrecordslinesorient)r   to_json)df r   G/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/io/json/test_readlines.pylines_json_df   s    r   c                  C   s8   t ddd} tddgddggddgd}t| | d S )	Nz!{"a": 1, "b": 2}
{"b":2, "a" :1}
Tr   r   r   abcolumns)r   r   tmassert_frame_equal)resultexpectedr   r   r   test_read_jsonl   s    r"   c                  C   sj   t ddgddgdfgdddgd	} | jd
dd}t|}t dddgdddggdddgd	}t|| d S )Nr   r   z
2020-03-05z2020-04-08T09:58:49+00:00ZhectorZaccountsdatenamer   Tr   r   )r   r   r   r   r   )r   Z	json_liner    r!   r   r   r   test_read_datetime   s    r%   c                  C   s|   d} t | } t| dd}tddgddggddgd	}t|| d} t| dd}tddgddggddgd	}t|| d S )
Nu5   {"a": "foo”", "b": "bar"}
{"a": "foo", "b": "bar"}
Tr   u   foo”barfoor   r   r   )r   r   r   r   r   )jsonr    r!   r   r   r   test_read_jsonl_unicode_chars,   s    r)   c                  C   s   t ddgddggddgd} | jddd}d	}||ks:tt d
dgddggddgd} | jddd}d}||kstttt|dd|  t ddgddggddgd} | jddd}d}||ksttt|dd|  d S )Nr   r   r   r   r   r   Tr   r   z{"a":1,"b":2}
{"a":1,"b":2}
zfoo}r&   zfoo"z/{"a":"foo}","b":"bar"}
{"a":"foo\"","b":"bar"}
r   zfoo\za\z4{"a\\":"foo\\","b":"bar"}
{"a\\":"foo\"","b":"bar"}
)r   r   AssertionErrorr   r   r   )r   r    r!   r   r   r   test_to_jsonl>   s    r,   c                  C   sD   t ddgddggddgd} | jdddd	}d}||ks@td S )
Nr   r   r   r   r   r   Tr*   
)r   r   countr+   )r   Zactual_new_lines_countZexpected_new_lines_countr   r   r   test_to_jsonl_count_new_linesS   s    r/   	chunksizer   g      ?c              	   C   sH   t t| dd}t t| d|d}t|}W 5 Q R X t|| d S )NTr   r   r0   )r   r   pdconcatr   r   )r   r0   	unchunkedreaderchunkedr   r   r   test_readjson_chunks[   s    r7   c              
   C   s@   d}t jt|d$ tt| ddd}W 5 Q R X W 5 Q R X d S )Nz*chunksize can only be passed if lines=TruematchFr   r1   pytestraises
ValueErrorr   r   )r   msg_r   r   r   &test_readjson_chunksize_requires_linesh   s    r@   c               	   C   sx   t ddd} t| jddd}t|ddd}t| jddd}t|dddd	}t |}W 5 Q R X t|| d S )
Nr   r   r   Tr   r   Series)r   typ)r   rB   r0   )r2   rA   r   r   r   r3   r   Zassert_series_equal)sZstrior4   r5   r6   r   r   r   test_readjson_chunks_serieso   s    rD   c              	   C   sN   t t| ddd}t|}W 5 Q R X |d jdks8t|d jdksJtd S )NTr   r1   r   r   r   r   )r   r   )r   r   listshaper+   )r   r5   chunksr   r   r   test_readjson_each_chunk}   s    rI   c               
   C   s   t dl} tdddgdddgd}|j| d	d
d t| d	dd}t|}W 5 Q R X t| d	d}t || W 5 Q R X d S )N	test.jsonr   r   r	   r
   r   r   r   Tr   r   r1   r   )r   ensure_cleanr   r   r   r2   r3   r   )pathr   r5   r6   r4   r   r   r   test_readjson_chunks_from_file   s    rM   c                 C   s   t d}tdddgdddgd}|j|d	d
d t|d dd	d	d	d	ddd d d	| d d d}| |  W 5 Q R X |jjjst	d|  W 5 Q R X d S )NrJ   r   r   r	   r
   r   r   r   Tr   r   frameF)r   rB   ZdtypeZconvert_axesZconvert_datesZkeep_default_datesZnumpyZprecise_floatZ	date_unitencodingr   r0   compressionnrowsz%didn't close stream with chunksize = )
r   rK   r   r   r   readZhandleshandleclosedr+   )r0   rL   r   r5   r   r   r   test_readjson_chunks_closes   s4    rU   g@r'   c              
   C   s@   d}t jt|d$ tt| d|d}W 5 Q R X W 5 Q R X d S )Nz"'chunksize' must be an integer >=1r8   Tr1   r:   )r   r0   r>   r?   r   r   r   test_readjson_invalid_chunksize   s    rW   r   c              	   C   sh   d}t dddgdddgd}t|d	| d
}| d k	rN| t|}W 5 Q R X tj||d|  d d S )NzF

    {"A":1,"B":4}



    {"A":2,"B":5}







    {"A":3,"B":6}
    r   r   r	   r
   r   r   r   Tr1   zchunksize: )obj)r   r   r2   r3   r   r   )r0   jorigtestr   r   r   )test_readjson_chunks_multiple_empty_lines   s    r\   c              
   C   sp   t d\}| ddd  t|ddd}|d W 5 Q R X t|}td	d
gi}t || W 5 Q R X d S )NrJ   zlocale.getpreferredencodingc                 S   s   dS )Ncp949r   )lr   r   r   <lambda>       z'test_readjson_unicode.<locals>.<lambda>wzutf-8)rO   u6   {"£©µÀÆÖÞßéöÿ":["АБВГДабвгд가"]}u   £©µÀÆÖÞßéöÿu   АБВГДабвгд가)r   rK   setattropenwriter   r   r   )ZmonkeypatchrL   fr    r!   r   r   r   test_readjson_unicode   s    rf   rQ   c                 C   sJ   d}t |d| d}tddddgdd	d
dgdjd |  }t|| d S )N[{"a": 1, "b": 2}
        {"a": 3, "b": 4}
        {"a": 5, "b": 6}
        {"a": 7, "b": 8}Tr   rQ   r   r	   r      r   r
   r      r   r   )r   r   ilocr   r   )rQ   jsonlr    r!   r   r   r   test_readjson_nrows   s    (rn   znrows,chunksizerE   )r
   r   c              	   C   sb   d}t |d| |d}t|}W 5 Q R X tddddgdd	d
dgdjd |  }t|| d S )Nrg   T)r   rQ   r0   r   r	   r   ri   r   r
   r   rj   rk   )r   r2   r3   r   rl   r   r   )rQ   r0   rm   r5   r6   r!   r   r   r   test_readjson_nrows_chunks   s
    (ro   c               	   C   s4   d} d}t jt|d t| ddd W 5 Q R X d S )Nrg   z&nrows can only be passed if lines=Truer8   Fr   rh   )r;   r<   r=   r   )rm   r>   r   r   r   "test_readjson_nrows_requires_lines   s    rp   c              	   C   s   t ddggddgdgdt ddggddgdgdt d	d
ggddgdgdg}| dddd}t| }t|ddd(}t|D ]\}}t|||  q~W 5 Q R X d S )Nr   r   r   r   r   )r   indexr	   r
   r   r   ior(   datazline_delimited.jsonTr1   )r   r   as_urir   	enumerater   r   )datapathZdf_list_expectedZos_pathZfile_urlZ
url_readerrq   Zchuckr   r   r   "test_readjson_lines_chunks_fileurl  s    rw   c                  C   sN   dd } G dd d}|| }t tt|ddddks<t|jd	ksJtd S )
Nz\{"a": 1, "b": 2}
        {"a": 3, "b": 4}
        {"a": 5, "b": 6}
        {"a": 7, "b": 8}
i  c                   @   s*   e Zd ZddddZdd Zdd ZdS )	z/test_chunksize_is_incremental.<locals>.MyReaderN)returnc                 S   s   d| _ t|| _d S )Nr   )
read_countr   stringio)selfcontentsr   r   r   __init__  s    z8test_chunksize_is_incremental.<locals>.MyReader.__init__c                 W   s   |  j d7  _ | jj| S Nr   )ry   rz   rR   )r{   argsr   r   r   rR      s    z4test_chunksize_is_incremental.<locals>.MyReader.readc                 S   s   |  j d7  _ t| jS r~   )ry   iterrz   )r{   r   r   r   __iter__$  s    z8test_chunksize_is_incremental.<locals>.MyReader.__iter__)__name__
__module____qualname__r}   rR   r   r   r   r   r   MyReader  s   r   Td   r1   r   
   )lenrF   r   r+   ry   )rm   r   r5   r   r   r   test_chunksize_is_incremental  s    r   )%rr   r   pathlibr   r;   Zpandasr2   r   r   Zpandas._testingZ_testingr   Zpandas.io.json._jsonr   Zfixturer   r"   r%   r)   r,   r/   markZparametrizer7   r@   rD   rI   rM   rU   rW   r\   rf   rn   ro   rp   rw   r   r   r   r   r   <module>   sB   

	





