o
    QDi^^                     @   s  d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
mZ d dlmZ dd Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Z d*d+ Z!d,d- Z"d.d/ Z#d0d1 Z$d2d3 Z%d4d5 Z&ej'j(d6d7 Z)d8d9 Z*d:d; Z+d<d= Z,d>d? Z-ej'j(d@dA Z.dBdC Z/dDdE Z0dFdG Z1ej'j2dHdI Z3dJdK Z4dLdM Z5dNdO Z6dPdQ Z7dRdS Z8dTdU Z9ej'j(dVdW Z:dXdY Z;dZd[ Z<d\d] Z=d^d_ Z>d`da Z?dbdc Z@ddde ZAdfdg ZBdhdi ZCdjdk ZDdldm ZEdndo ZFdpdq ZGej'jHejIdrkdsdtdudv ZJdwdx ZKdydz ZLd{d| ZMd}d~ ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdS )    N)	Check	ChecklistDetectorDialectFrictionlessExceptionResourceSchemaerrorsplatform)TableResourcec                  C   s&   t ddd} |  }|jsJ d S )Nnamedata/table.csvr   pathr   from_descriptorvalidatevalidresourcereport r   e/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/resource/__spec__/test_validate.pytest_resource_validate   s   r   c               
   C   sb   t ddd} |  }|g dg dg dg dg dg d	g d
g dg dgks/J d S )Nr   data/invalid.csvr   	rowNumberfieldNumbertypeN   blank-labelN   duplicate-label   r    missing-cellr&   r#   r'   r    r    r'   r    r#   r'   r#   N	blank-row   r.   
extra-cellr   r   r   flattenr   r   r   r   $test_resource_validate_invalid_table   s   r2   c                  C   s(   t dddd} |  }|jsJ d S )Nr   r   zdata/schema.json)r   r   schemar   r   r   r   r   5test_resource_validate_resource_with_schema_as_string*   s
   
r4   c                  C       t dd} |  }|jsJ d S )Nr   r   r   r   r   r   r   r   r    test_resource_validate_from_path2      
r8   c               
   C   s\   t dd} |  }|g dg dg dg dg dg dg d	g d
g dgks,J d S )Nr   r6   r   r   r"   r%   r(   r)   r*   r+   r-   r   r   r1   r   r   r   r   test_resource_validate_invalid8   s   
r;   c                  C   2   t dd} |  }|g dg dgksJ d S )Nzdata/blank-headers.csvr6   r   )Nr&   r!   r:   r   r   r   r   $test_resource_validate_blank_headersG   
   
r=   c                  C   8   t dd} |  }|g dg dg dgksJ d S )Nzdata/duplicate-headers.csvr6   r   )Nr    r$   )Nr.   r$   r:   r   r   r   r   (test_resource_validate_duplicate_headersO      
r@   c                  C   r?   )Nzdata/defective-rows.csvr6   r   r%   )r    r#   r/   r:   r   r   r   r   %test_resource_validate_defective_rowsX   rA   rB   c                  C   r<   )Nzdata/blank-rows.csvr6   r   r+   r:   r   r   r   r   !test_resource_validate_blank_rowsa   r>   rC   c                  C   sn   t dd} |  }|g dg dg dg dg dg dg d	g d
g dg dg dg dgks5J d S )Nzdata/blank-rows-multiple.csvr6   r   r+   r.   Nr,   )   Nr,   )   Nr,   )   Nr,   )	   Nr,   )
   Nr,   )   Nr,   )   Nr,   )   Nr,   )   Nr,   r:   r   r   r   r   *test_resource_validate_blank_rows_multiplei   s   
rN   c                  C   r5   )Nzdata/blank-cells.csvr6   r7   r   r   r   r   .test_resource_validate_blank_cell_not_required{   r9   rO   c                  C   2   t dd} |  }|ddgddggksJ d S )Nzdata/empty.csvr6   r   notesource-errorthe source is emptyr:   r   r   r   r   test_resource_validate_no_data   r>   rT   c                  C   r5   )Nzdata/without-rows.csvr6   r7   r   r   r   r   test_resource_validate_no_rows   r9   rU   c                  C   r5   )Nzdata/without-rows.csv.zipr6   r7   r   r   r   r   /test_resource_validate_no_rows_with_compression   r9   rV   c                  C   sH   t dd} tdgdgdg| d}| }|g dg dgks"J d S N   sample_sizehbaddatadetectorr   )NNrR   r   r   r   r1   r_   r   r   r   r   r   %test_resource_validate_source_invalid   s   
rb   c                  C   sJ   t dd} tdgdgddg| d}| }|g dg dgks#J d S rW   r`   ra   r   r   r   /test_resource_validate_source_invalid_many_rows   s   
rc   c                  C   s2   t td} t| tsJ |  }|jsJ d S )Nr   )r   pathlibPath
isinstancer   r   r   r   r   r   r   0test_resource_validate_source_pathlib_path_table   s   rg   c                  C   sH   t dd} tddgd}| |}|g dg dg dgks"J d S )	Nr   r6   r!   r,   pick_errorsr   r   r+   r   r   r   r1   r   	checklistr   r   r   r   "test_resource_validate_pick_errors   s   

rm   c                  C   sF   t dd} tdgd}| |}|g dg dg dgks!J d S )Nr   r6   #headerrh   r   r   r"   rj   rk   r   r   r   'test_resource_validate_pick_errors_tags   s   

ro   c                  C   s`   t dd} tddgd}| |}|g dg dg dg d	g d
g dg dgks.J d S )Nr   r6   r!   r,   skip_errorsr   r"   r%   r(   r)   r*   r-   rj   rk   r   r   r   "test_resource_validate_skip_errors   s   

rr   c                  C   s^   t dd} tdgd}| |}|g dg dg dg dg d	g d
g dgks-J d S )Nr   r6   rn   rp   r   r%   r(   r)   r*   r+   r-   rj   rk   r   r   r   'test_resource_validate_skip_errors_tags   s   

rs   c                  C   T   t dd} | jdd}|jjdgksJ |g dg dg dg d	gks(J d S )
Nr   r6   r    limit_errorsreached error limit: 3r   r   r"   r%   r   r   taskwarningsr1   r   r   r   r   +test_resource_validate_invalid_limit_errors      
r{   c                  C   rt   )
Nzdata/structure-errors.csvr6   r    ru   rw   r   r+   )r.   r#   r/   r-   rx   r   r   r   r   9test_resource_validate_structure_errors_with_limit_errors   r|   r}   c                  C   sX   G dd dt } tdd}t|  gd}||}|g dg dg dgks*J d S )	Nc                   @   s   e Zd Zdd ZdS )z3test_resource_validate_custom_check.<locals>.customc                 s   s(    t jdttt| |jdV  d S N )rQ   cells
row_numberr	   BlankRowErrorlistmapstrvaluesr   selfrowr   r   r   validate_row   s   z@test_resource_validate_custom_check.<locals>.custom.validate_rowN)__name__
__module____qualname__r   r   r   r   r   custom   s    r   r   r6   checksr   )r&   Nr,   )r    Nr,   r   r   r   r   r1   r   r   rl   r   r   r   r   #test_resource_validate_custom_check   s   
	
r   c                  C   s\   G dd dt } tdd}t| ddgd}||}|g dg d	g d	gks,J d S )
Nc                   @   s"   e Zd ZddddZdd ZdS )zBtest_resource_validate_custom_check_with_arguments.<locals>.customNr   c                S   s
   || _ d S )Nr   )r   r   r   r   r   __init__  s   
zKtest_resource_validate_custom_check_with_arguments.<locals>.custom.__init__c                 s   s.    t jdttt| | jp|jdV  d S r~   r   r   r   r   r   r     s   
zOtest_resource_validate_custom_check_with_arguments.<locals>.custom.validate_row)r   r   r   r   r   r   r   r   r   r     s    r   r   r6   rX   r   r   r   )rX   Nr,   r   r   r   r   r   2test_resource_validate_custom_check_with_arguments
  s   

r   c                  C   sB   ddddigid} t |  }|ddgddggksJ d S )	Nr   r   r   r\   )r   rl   rQ   zcheck-errorz!check type "bad" is not supportedr0   
descriptorr   r   r   r   ,test_resource_validate_custom_check_bad_name!  s   
r   c                  C   sT   ddgddgddgddgg} t d	d
ddiiid}t| |d}| }|js(J d S )Nname1name2123abc456def789ghifieldsr   r   stringschema_patchr]   r   r   r   r   sourcer_   r   r   r   r   r   -test_resource_validate_infer_fields_issue_2232  s
   r   c                  C   sd   ddgdd gdd gdgg} t dddd	iiid
}t| |d}| }|g dg dgks0J d S )Nr   r   r   r   r   r   r   r   r   r   r]   r   )r#   r&   r'   r`   r   r   r   r   -test_resource_validate_infer_fields_issue_225:  s   r   c                  C   "   t ddd} |  }|jsJ d S )Nzdata/encoding-issue-274.csvutf-8r   encodingr7   r   r   r   r   :test_resource_validate_fails_with_wrong_encoding_issue_274D  s   r   c                  C   sT   d} d}t dd}t| ||d}| }|g dg dg dg d	gks(J d S )
Nzdata/issue-277.csvzdata/issue-277.jsonTschema_syncr   r3   r_   r   )1   2   constraint-error)D   r   r   )E   r   r   r`   r   r3   r_   r   r   r   r   r   =test_resource_validate_wide_table_with_order_fields_issue_277K  s   
r   c                  C   sX   ddgddggdddddddgid	} t |  }|d
dgddggks*J d S )Nr   ageAlex33r   r   r   r   r\   )r^   r3   r   rQ   zfield-errorz!field type "bad" is not supportedr0   r   r   r   r   ,test_validate_invalid_table_schema_issue_304X  s   	r   c                  C   sD   t dd} |  }|g dg dg dg dg dgks J d S )Nzdata/issue-312.xlsxr6   r   r   r"   )Nr.   r!   rD   r:   r   r   r   r   1test_resource_validate_table_is_invalid_issue_312i  s   
r   c                  C   s`   t dd} |  }|jd dksJ |ddg\\}}|dks"J |dr,|ds.J d S )	Nzbad-path.csvr6   r	   rX   r   rQ   scheme-errorz	[Errno 2])r   r   statsr1   count)r   r   r   rQ   r   r   r   Gtest_resource_validate_missing_local_file_raises_scheme_error_issue_315t  s   
r   c                  C   sL   t d} t| dd}| }|jsJ W d    d S 1 sw   Y  d S )Nr   csv)r^   format)openr   r   r   )r   r   r   r   r   r   4test_resource_validate_inline_not_a_binary_issue_349}  s
   
"r   c                  C   s,   t dd} td| d}| }|jsJ d S )Ni@  rY   zdata/issue-811.csvr   r_   r   ra   r   r   r   5test_resource_validate_newline_inside_label_issue_811  s   
r   c                  C   r5   )Nzdata/table.jsonr6   r7   r   r   r   r   :test_resource_validate_resource_from_json_format_issue_827  r9   r   c                  C   r   )Nzdata/issue-833.csvzdata/issue-833.json)r   r3   r7   r   r   r   r   Ntest_resource_validate_resource_none_is_not_iterable_enum_constraint_issue_833     r   c                  C   s$   t dd} | jdd}|jsJ d S )Nzdata/issue-870.xlsxr6   r.   )
limit_rowsr7   r   r   r   r   Etest_resource_validate_resource_header_row_has_first_number_issue_870  s   
r   c                  C   s<   t dd} tdd| d }|ddgdd	ggksJ d S )
NTr   zdata/duplicate-column.csvz!data/duplicate-column-schema.jsonr   r   rQ   errorz2"schema_sync" requires unique labels in the headerr`   )r_   r   r   r   r   Btest_validate_resource_duplicate_labels_with_sync_schema_issue_910  s   
r   c                  C   s^   t t  td} |  }|ddgddggksJ W d    d S 1 s(w   Y  d S )Nzdata/issue-991.resource.jsonr   rQ   rR   rS   )pytestwarnsUserWarningr   r   r   r1   r   r   r   r   4test_resource_validate_resource_array_path_issue_991  s   
"r   c                  C      t t} td W d    n1 sw   Y  | jj}| jj}|jdks)J |j	dks0J |d jdks9J |d j	dksBJ d S )Nz)data/resource-with-missingvalues-993.jsonresource-errordescriptor is not validr   z7"missingValues" should be set as "schema.missingValues"
r   raisesr   r   r   valuer   reasonsr   rQ   excinfor   r   r   r   r   Gtest_resource_validate_resource_metadata_errors_with_missing_values_993  s   r   c                  C   r   )Nz"data/resource-with-fields-993.jsonr   r   r   z)"fields" should be set as "schema.fields"r   r   r   r   r   ?test_resource_validate_resource_metadata_errors_with_fields_993  s   r   c                  C   sH   t ddgd} tdd}|| }|g dg dg dgks"J d S )	Nr!   r,   rh   r   r6   r   r   r+   )r   r   r   r1   )rl   r   r   r   r   r   &test_resource_validate_bound_checklist  s   

r   c                  C   r5   )Ndata/table.csv.zipr6   r7   r   r   r   r   "test_resource_validate_compression  r9   r   c                  C   r   )Nr   zipr   compressionr7   r   r   r   r   +test_resource_validate_compression_explicit  r   r   c                  C   s4   t ddd} |  }|ddgddggksJ d S )Nr   r\   r   r   rQ   zcompression-errorz"compression "bad" is not supportedr:   r   r   r   r   *test_resource_validate_compression_invalid  s
   r   c                  C   sr   t dddddddgi} tdd}td	| |d
}| }|js$J |j dddddddgiks7J d S )Nr   idintegerr   r   r   Tr   zdata/sync-schema.csvr   )r   r   r   r   r   r   r3   to_descriptor)r3   r_   r   r   r   r   r   +test_resource_validate_detector_sync_schema  s&   

r   c                  C   sd   g dg dg} t ddddddddddgi}td	d
}t| ||d}| }|js0J d S )N)LastName	FirstNameAddress)TestTesterz	23 Avenuer   r   r   r   r   r   Tr   r^   r3   r_   )r   r   r   r   r   r   r   r   r   r   3test_resource_validate_detector_sync_schema_invalid  s   
	r   c                  C   s   g dg dg dg dg} t ddddd	d
ddiddd
dgi}tdd}t| ||d}| }|g ddddg dggksFJ d S )N)r   	last_name
first_namelanguage)rX   r   JohnEnglish)r&   Petersr   	Afrikaans)r    SmithPaulNr   r   numberr   r   r   requiredT)r   r   constraintscountryr   r   )r   r   r   r   r#   r   )3r   r   r   )r   r   r   r   r   r1   r   r   r   r   .test_resource_validate_detector_headers_errors  s,   
r  c                  C   s\   t ddgid} td| d}| }|jsJ |j dddd	d
dgdgdks,J d S )NmissingValues-r   r   r   r   r   r   r   r   r   r  r   r   r   r   r3   r   ra   r   r   r   ,test_resource_validate_detector_patch_schema5  s   
r  c                  C   sf   t dddiidgdd} td| d}| }|jsJ |j ddd	d
dd	gdgdks1J d S )Nr   r   r   r  r  r   r   r   r   r   r  ra   r   r   r   3test_resource_validate_detector_patch_schema_fieldsC  s   
r  c                  C   R   t dd} td| d}| }|jsJ |j dddddddgiks'J d S )	Nr   
field_typer   r   r   r   r   r   r  ra   r   r   r   1test_resource_validate_detector_infer_type_stringS  s   

r  c                  C   r	  )	Nanyr
  r   r   r   r   r   r   r  ra   r   r   r   .test_resource_validate_detector_infer_type_any`  s   

r  c                  C   s   t dd} tddgd}td| |d}| }|jsJ |jjd jdks'J |jjd	 jdks2J |jj	d
ks:J |j
g ksAJ |jddgksJJ d S )NF)headerr   r   )field_nameszdata/without-headers.csv)r   dialectr_   r   rX   r    )r   r   r   r   r   r3   r   r   r   rowslabelsr  )r  r_   r   r   r   r   r   +test_resource_validate_detector_infer_namesj  s   

r  c                  C   r   )Nr   r   r   r7   r   r   r   r   test_resource_validate_encoding|  r   r  windowszFix on Windows)reasonc                  C   s>   t ddd} |  }|jrJ |ddgddggksJ d S )Nzdata/latin1.csvr   r   r   rQ   zencoding-errorzG'utf-8' codec can't decode byte 0xa9 in position 20: invalid start byte)r   r   r   r1   r   r   r   r   'test_resource_validate_encoding_invalid  s   
r  c                  C   s   t d} |  }|jsJ d S )Nzdata/table.bad)r   r   r   r   r   r   r   )test_resource_validate_format_non_tabular  s   r  c                  C   s.   t ddi} | ddgddggksJ d S )Nr   r   r   rQ   r   z'name' is a required property)r   validate_descriptorr1   )r   r   r   r   ;test_resource_validate_invalid_resource_standards_v2_strict  s   r  c                  C   r   )Nr   r   )r   r   r7   r   r   r   r   test_resource_validate_format  r   r  c                  C   s(   d} t d| d}| }|jjsJ d S )NzGsha256:a1fd6c5ff3494f697874deeb07f69f8667e903dd94a7bc062dd57550cea26da8r   r   hashr   r   ry   r   r  r   r   r   r   r   !test_resource_validate_stats_hash  s   r!  c                  C   s<   d} t ddd}| }|ddgdd|  ggksJ d S )	N 6c2c61dd9b0e9c6876139a449ed87933r   r\   r  r   rQ   z
hash-countz$expected is "bad" and actual is "%s"r:   r   r   r   r   )test_resource_validate_stats_hash_invalid  s   r#  c                  C   $   t ddd} |  }|jjsJ d S )Nr      r   bytesr  r   r   r   r   "test_resource_validate_stats_bytes     r(  c                  C   h   t ddd} |  }|jj dd u sJ |jj dd u s$J |ddgdd	ggks2J d S )
Nr   (   r&  r   r   r   rQ   z
byte-countz#expected is "40" and actual is "30"r   r   ry   r   r   getr1   r   r   r   r   *test_resource_validate_stats_bytes_invalid     r.  c                  C   r$  )Nr   r&   r   r  r  r   r   r   r   !test_resource_validate_stats_rows  r)  r1  c                  C   r*  )
Nr   r    r0  r   r   r   rQ   z	row-countz!expected is "3" and actual is "2"r,  r   r   r   r   )test_resource_validate_stats_rows_invalid  r/  r2  c                  C   s0   t dddd} |  }|jjdgksJ d S )Nr   r   z-sha1:db6ea2f8ff72a9e13e1d70c28ed1c6b42af3bb0e)r   r   r  z1hash is ignored; supported algorithms: md5/sha256)r   r   r   ry   rz   r   r   r   r   9test_resource_validate_stats_not_supported_hash_algorithm  s   r3  c                  C   r   )Nr   file)r   schemer7   r   r   r   r   test_resource_validate_scheme  r   r6  c                  C   rP   )Nzbad://data/table.csvr6   r   rQ   r   zscheme "bad" is not supportedr:   r   r   r   r   %test_resource_validate_scheme_invalid  r>   r7  )Wrd   r   frictionlessr   r   r   r   r   r   r   r	   r
   frictionless.resourcesr   r   r2   r4   r8   r;   r=   r@   rB   rC   rN   rO   rT   rU   rV   rb   rc   rg   rm   ro   rr   rs   r{   r}   r   r   markskipr   r   r   r   r   r   r   r   r   cir   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  skipifr   r  r  r  r  r!  r#  r(  r.  r1  r2  r3  r6  r7  r   r   r   r   <module>   s    ,		






	
	



	

