o
    QDiQ                  	   @   sV  d dl Z d dlZd dlmZ d dlZd dlmZmZmZm	Z	m
Z
mZmZmZ dd Zdd Zdd	 Zd
d Zdd Zdd Zejjdd Zejjdd Zdd Zdd Zdd Zdd Zdd Zdd Zejj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&ejj'ejj(d2d3 Z)d4d5 Z*d6d7 Z+d8d9 Z,d:d; Z-d<d= Z.d>d? Z/d@dA Z0dBdCdDdEdFdGgiZ1ejj2ej3dHkdIdJdKdL Z4dMdN Z5ejj2ej3dHkdIdJdOdP Z6dQdR Z7ejj2ej3dHkdIdJdSdT Z8dUdV Z9dBdWg dXg dYg dZg d[g d\gd]d^d_d`dad_dbd^d_gdbdcd]ddded]dfdgdddegdhdidfdgdjgdkdlgdmdmgdndngdodpggdqgiZ:drg dsg dtg dug dvgdwd^d_dxd^d_dydzd_gdwdxgdWd]dbgdddegdhdiZ;d{d| Z<d}d~ Z=dd Z>dd Z?dd Z@dd ZAdd ZBdd ZCdd ZDejj'dd ZEejj'dd ZFejj'dd ZGdS )    N)deepcopy)	ChecklistDetectorFrictionlessExceptionPackageResourceSchemafieldsplatformc                  C   s*   t ddddgi} |  }|jsJ d S )N	resourcesnamedata/table.csvr   pathr   validatevalidpackagereport r   d/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/package/__spec__/test_validate.pytest_package_validate   s   r   c                  C   sR   t d} tt| dd}| }|jsJ W d    d S 1 s"w   Y  d S )Ndata/package/datapackage.jsonzdata/packagebasepathopenr   jsonloadr   r   filer   r   r   r   r   test_package_validate_from_dict   s
   
"r"   c                  C   sp   t d*} tt| dd}| }|g dg dg dg dgks&J W d    d S 1 s1w   Y  d S )Ndata/invalid/datapackage.jsondata/invalidr   
taskNumber	rowNumberfieldNumbertype      N	blank-rowr+   r,   Nprimary-key      Nr-   r   r   r   r   r   flattenr    r   r   r   'test_package_validate_from_dict_invalid"   s   
"r5   c                  C      t d} |  }|jsJ d S Nr   r   r   r   r   r   test_package_validate_from_path-      r8   c                  C   s<   t d} |  }|g dg dg dg dgksJ d S )Nr#   r%   r*   r.   r0   r   r   r4   r   r   r   r   'test_package_validate_from_path_invalid3   s   r;   c                  C   s2   t dddddddgi} |  }|jsJ d S )Nr   tabler   r   r!   zdata/file.txtr   r   r   r   r   &test_package_validate_with_non_tabular=   s   r=   c                  C   sH   t d } | jd }|jdksJ |jdsJ |jds"J d S )Nzbad/datapackage.jsonr   package-error	[Errno 2])r   r   errorsr)   notecountr   errorr   r   r   -test_package_validate_invalid_descriptor_pathJ   s
   
rE   c                  C   sr   t dddddgi } | jd dksJ | jd }|jd	ks"J |jd
s*J |jds2J | js7J d S )Nr   r   r   badr   r   schemar@   r+   r   zschema-errorr?   z'bad')r   r   statsr@   r)   rA   rB   r   rC   r   r   r   %test_package_validate_invalid_packageS   s   
rJ   c                  C   s4   t dddigi} | ddgddggksJ d S )Nr   r   r   r)   rA   resource-errorz'name' is a required propertyr   validate_descriptorr4   r   r   r   r   9test_package_validate_invalid_package_standards_v2_strict`   s   rO   c               
   C   sf   t ddddgi} |  }|g dg dg dg dg d	g d
g dg dg dgks1J d S )Nr   r   zdata/invalid.csvr   r'   r(   r)   )Nr,   zblank-label)Nr2   zduplicate-label)r1   r,   missing-cellr1   r2   rQ   )r,   r,   rQ   r,   r2   rQ   )r2   Nr-   )   rT   z
extra-cellr:   r   r   r   r   #test_package_validate_invalid_tableg   s   rU   c                  C   s$   t td} |  }|jsJ d S r7   )r   pathlibPathr   r   r   r   r   r   $test_package_validate_pathlib_sourcev   s   rX   c                  C   r6   Nzdata/infer/datapackage.jsonr   r   r   r   r   test_package_validate_infer|   r9   rZ   c               	   C   s\   ddddgddgddggd	d
idddddddgidgi} t | }| }|js,J d S )Nr   r   John22Alex33Paul44headerFr	   stringr   r)   ageinteger)r   datadialectrH   r   
descriptorr   r   r   r   r   *test_package_validate_dialect_header_false   s   rj   c                  C   s,   t dddddgi} |  }|jsJ d S )Nr   r   r   zdata/schema.jsonrG   r   r   r   r   r   +test_package_validate_with_schema_as_string   s   
rk   c                  C   s0   t d} | ddgddgddggksJ d S )Nz!data/multiple-errors.package.jsonr)   messager>   zDThe data package has an error: names of the resources are not uniquezIThe data package has an error: property "created" is not valid "datetime"rL   rN   r   r   r   -test_package_validate_multiple_package_errors   s   
rm   c                  C   r6   r7   r   r   r   r   r   -test_package_validate_descriptor_type_package   r9   rn   c                  C   s6   t d} |  }| g dg dg dgksJ d S )Nr#   r*   r.   r0   r:   r   r   r   r   5test_package_validate_descriptor_type_package_invalid   s   ro   c                  C   r6   rY   r   r   r   r   r   %test_package_validate_mixed_issue_170   r9   rp   c                  C   s\   ddddgddgddggddd	ddd	gddgd
dgi} t | }| }|js,J d S )Nr   r   id1id2a12rb   rc   r	   
primaryKeyr   rf   rH   r   sourcer   r   r   r   r   <test_package_validate_composite_primary_key_unique_issue_215   s   r{   c                  C   s|   ddddgddgddggddddddgddgd	d
gi} t | }tdgd}||}|g dg dgks<J d S )Nr   r   rq   rr   rs   rt   rb   rc   rv   rx   zduplicate-rowskip_errorsrP   )r,   Nr/   )r   r   r   r4   )ri   r   	checklistr   r   r   r   @test_package_validate_composite_primary_key_not_unique_issue_215   s"   
r   c                  C   r6   )Nzdata/geopoint/datapackage.jsonr   r   r   r   r   <test_package_validate_geopoint_required_constraint_issue_231      r   c                  C   s   t d} |  }|jrJ d S )Nzdata/number/datapackage.jsonr   r   r   r   r   +test_package_validate_number_test_issue_232   r   r   c               
   C   s   ddg dg dg dgdddd	d
dd	ddd	ddd	gidgi} t | }| }|g dg dg dg dgks@J d S )Nr   people)idr   surname)p1TomHanks)p2MerylStreepr	   r   rb   rc   r   r   dobdaterx   rP   )Nr2   zmissing-labelrR   rS   r:   rh   r   r   r   +test_package_validate_with_schema_issue_348  s.   r   c                  C   s0   t d} |  }|jsJ |jd dksJ d S )Nzdata/issue-494.package.jsontasksr+   )r   r   r   rI   r   r   r   r   0test_package_validate_uppercase_format_issue_494$  s   
r   c                  C   l   t tdgdgdgdggttjddtjddgddgd	} | jD ]}td
d|_q"|  }|j	s4J d S Nf1v1v2v3)r   f2)r	   )rf   rH   )r   T)schema_sync)
r   r   r   r	   StringFieldr   r   detectorr   r   r   resourcer   r   r   r   :test_validate_package_using_detector_schema_sync_issue_847-     


r   c                  C   s&   t d} |  }|jd dksJ d S )Nzdata/issue-905/datapackage.jsonr   r,   )r   r   rI   r   r   r   r   5test_package_validate_with_diacritic_symbol_issue_905A  s   r   c                  C   s   t t} td W d    n1 sw   Y  | jj}| jj}|jdks(J |jdks/J |d jdks8J |d jdksAJ d S )Nzdata/issue-977.jsonr>   descriptor is not validr   rK   zD'MY_INLINE_DATA' is not of type 'object', 'array' at property 'data'	pytestraisesr   r   valuerD   reasonsr)   rA   excinforD   r   r   r   r   >test_package_validate_with_resource_data_is_a_string_issue_977G     
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s/J |d jdks8J |d jdksAJ d S )Nz(data/package-with-missingvalues-993.jsonr>   r   r   z@"missingValues" should be set as "resource.schema.missingValues"r   r   r   r   r   =test_package_validate_metadata_errors_with_missing_values_993U  r   r   c                  C   r   )Nz!data/package-with-fields-993.jsonr>   r   r   z2"fields" should be set as "resource.schema.fields"r   r   r   r   r   5test_package_validate_metadata_errors_with_fields_993c  s   
r   c                  C   s4   g ddigd} t | }|jd jdsJ d S )Ntitle)r   licensesr   z!license requires "path" or "name")r   rM   r@   rA   rB   )ri   r   r   r   r   6test_package_licenses_required_path_or_name_issue_1290n  s   
r   c               	   C   s   g g dddgddgddgdgdddgg dg} | D ]<}t d.}tt|dd}t|d d	}||}|d
gdd |d D ksJJ W d    n1 sTw   Y  qd S )N)r-   r/   r-   )ignoreexpect_errorsr/   r-   r#   r$   r   r   r|   r)   c                 S   s   g | ]}|gqS r   r   ).0tr   r   r   
<listcomp>  s    z:test_package_validate_with_skip_errors.<locals>.<listcomp>r   )r   r   r   r   r   r   r4   )
test_casestcr!   r   r~   r   r   r   r   &test_package_validate_with_skip_errorst  s   

$r   r   	resource1r   zGsha256:a1fd6c5ff3494f697874deeb07f69f8667e903dd94a7bc062dd57550cea26da8   )r   r   hashbyteswindowszFix on Windows)reasonc                  C   &   t t} t| }| }|jsJ d S N)r   DESCRIPTOR_SHr   r   r   ry   r   r   r   test_package_validate_stats  s   r   c                  C   sn   t t} | d d d  d7  < | d d d  d7  < t| }| }|g dg dg d	gks5J d S )
Nr   r   r   rs   r   r+   rP   NNz
hash-countNNz
byte-count)r   r   r   r   r4   ry   r   r   r   #test_package_validate_stats_invalid  s   r   c                  C   8   t t} | d d d t| }| }|jsJ d S )Nr   r   r   r   r   popr   r   r   ry   r   r   r    test_package_validate_stats_size  
   r   c                  C   sb   t t} | d d d  d7  < | d d d t| }| }|g dg dgks/J d S )Nr   r   r   r+   r   rP   r   r   r   r   r   r   r4   ry   r   r   r   (test_package_validate_stats_size_invalid  s   r   c                  C   r   )Nr   r   r   r   ry   r   r   r    test_package_validate_stats_hash  r   r   c                  C   sb   t t} | d d d | d d d  d7  < t| }| }|g dg dgks/J d S )Nr   r   r   r   rs   rP   r   r   ry   r   r   r   ;test_package_validate_check_file_package_stats_hash_invalid  s   r   cities)r   r   next_id)r+   londonr1   )r1   parisr,   )r,   romer2   )r2   rioNr   re   rc   r   rb   r    )r   r	   )r	   	referencer   label)r	   foreignKeysrx   
populationr+      r1   r,   r2      )r   rf   travel_time)fromtohours)r+   r1   g      ?)r1   r,   r   )r,   r2      r   r   r   numberc                  C   r   r   r   DESCRIPTOR_FKr   r   r   rh   r   r   r   .test_package_validate_schema_foreign_key_error  s   r   c                  C   s8   t t} | d d d d= t| }| }|jsJ d S )Nr   r   rH   r   r   rh   r   r   r   4test_package_validate_schema_foreign_key_not_defined  s
   r   c                  C   sR   t t} | d d d d= t| }| }|g ddd dg dggks'J d S )Nr   r   rf   r2   r'   r(   r)   cellsforeign-key3r   4r   r   r   r   r4   rh   r   r   r   Ktest_package_validate_schema_foreign_key_self_referenced_resource_violation     r   c                  C   sR   t t} | d d d d= t| }| }|g ddd dg dggks'J d S )	Nr   r+   rf   r2   r   rT   r   r   r   r   r   rh   r   r   r   Dtest_package_validate_schema_foreign_key_internal_resource_violation$  r   r   c               	   C   s   t t} ddgddgg| d d d< t| }| }|g ddd d	g d
gdd d	g dgdd d	g dgdd d	g dggksAJ d S )Nr   r   
   r   r+   rf   r   r1   r   )rt   r   ru   r,   )ru   r   r   r2   r   rT   r   r   rh   r   r   r   Qtest_package_validate_schema_foreign_key_internal_resource_violation_non_existent.  s   r   c                  C   s4   t t} | d t t| }| }|jsJ d S )Nr   )r   r   appendMULTI_FK_RESSOURCEr   r   r   rh   r   r   r   1test_package_validate_schema_multiple_foreign_key;  s
   r   c                  C   sb   t t} | d d d d= | d t t| }| }|g ddd dg dd	ggks/J d S )
Nr   r   rf   r+   )r'   r(   r)   r   rA   r1   r   )rt   ru   z1.5zUfor "from, to": values "1, 2" not found in the lookup table "cities" as "id, next_id"r   r   r   r   r   r   r4   rh   r   r   r   Qtest_package_validate_schema_multiple_foreign_key_resource_violation_non_existentC  s   r   c                  C   s   t t} d| d d d d d< d| d d d d d< | d t t| }| }|g ddd	gd
gddggdd	gdgddggddgdgddggddgdgddggdddgd
dgddd	gggksfJ d S )NrT   r   r   rf   r,   r   r2   )r'   
fieldNames
fieldCellsreferenceNamereferenceFieldNamesr   r   r   r   r   5r   r   6r   r   r   r   rh   r   r   r   <test_package_validate_schema_multiple_foreign_key_violationsU  s    	r   c                  C   r   r   )
r   r   r   r	   AnyFieldr   r   r   r   r   r   r   r   r   :test_package_validate_using_detector_schema_sync_issue_847q  r   r   c                  C   sV   t d} tt| dd}|jdd}|jsJ W d    d S 1 s$w   Y  d S )Nzdata/datapackage.jsonrf   r   Tparallelr   r    r   r   r   (test_package_validate_parallel_from_dict  s
   
"r  c                  C   st   t d,} tt| dd}|jdd}|g dg dg dg d	gks(J W d    d S 1 s3w   Y  d S )
N,data/invalid/datapackage_no_foreign_key.jsonr$   r   Tr   r%   r*   r.   r0   r3   r    r   r   r   0test_package_validate_parallel_from_dict_invalid  s   
"r  c                  C   s@   t d} | jdd}|g dg dg dg dgksJ d S )Nr  Tr   r%   r*   r.   r0   r:   r   r   r   r   #test_package_validate_with_parallel  s   r  )Hr   rV   copyr   r   frictionlessr   r   r   r   r   r   r	   r
   r   r"   r5   r8   r;   r=   markskiprE   rJ   rO   rU   rX   rZ   rj   rk   rm   rn   ro   rp   r{   r   r   r   r   civcrr   r   r   r   r   r   r   r   r   skipifr)   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r   r   r   <module>   s    (






	 %



