
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    !`                     @   s
  d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZ ddlmZmZmZmZ dd	lmZ ed
edd edddddddgddiddidddgigddidd dd Zdddddidddeeddddd dd!d" d#d$ddid%d&id'd(dddejegd)d*d+d,id+d-igd.d-dd/ddid0d1d2eidd3iddd4d
d5Zd6d7 Zd8d9 Ze
ee d:d;d<Z ej!d=d>d?d@ Z"edAdBdCZ#edAdDdEZ$edAdFdGZ%edAdHdIZ&dJdK Z'dLdM Z(dNdO Z)e*dPkre)  dS )Qa  
some notes regarding this test suite:
- results are only comparable using the semantically equal schema against and
  identical set of documents in the same execution environment
- the module can be executed to generate a new set of test documents
- it is intended to detect *significant* changes in validation time
- benchmarks should run with as few other processes running on the system as
  possible (e.g. an Alpine Linux on bare metal w/o a Desktop environment)
    N)Counter)Path)choice	randrange)CallableList)mark)rules_set_registryschema_registryTypeDefinition	Validator)DOCUMENTS_PATHZ
path_rulespath)coercetypeZfield_3_schemaF)containsemptyr   integerstringnullableT)defaultitemsschema)field_31field_32c                 C   s   t |dkr|| d d S )N	   zRequires a smaller list.)len)fieldvalueerror r    _/opt/alt/python38/lib/python3.8/site-packages/cerberus/benchmarks/test_overall_performance_1.py)schema_1_field_3_allow_unknown_check_with,   s    r"   dictZregexzfield_1[12345]      d   )field_12z^field_1.field_13)r   alloweddependenciesc                 C   s   dS N   r    )_r    r    r!   <lambda>A       r-   )r+   )r   Zdefault_setterZ	forbiddenrenamefield_13)field_11r'   r0   field_14)r   requiredallow_unknownZ	keysrulesZ	minlengthZ	maxlengthr   r   Y   r)   field_22field_23)r   r   minmaxZanyof)Zexcludesr   )field_21r6   r7   )r   r4   r   Z
check_withlist)r4   ZvaluesrulesZrequire_allr   )Zfield_1Zfield_2Zfield_3Zfield_4c                  C   s   G dd dt } | tddS )Nc                   @   s$   e Zd ZejdedefdiZdS )z%init_validator.<locals>.TestValidatorr   r    N)__name__
__module____qualname__r   Ztypes_mappingr   r   r    r    r    r!   TestValidatorb   s    r?   T)Zpurge_unknown)r   schema_1)r?   r    r    r!   init_validatora   s    rA   c               	   C   s&   t d  } t| }W 5 Q R X |S )Noverall_documents_1.json)r   openjsonload)f	documentsr    r    r!   load_documentsk   s    rH   )rA   rG   c                    s   d }}t  |  } fdd |D ],}||d krJ|d7 } |j |d7 }q&t| d| dt d td d	D ]\}}t| d
|  qd S )Nr   c                    s>   | d krd S | D ](}|j r& |j q|j  d7  < qd S r*   )Zis_group_errorZchild_errorsZschema_path)errorsr   count_errorsZerror_pathsr    r!   rK   v   s    z(validate_documents.<locals>.count_errorsr+   z out of z documents failed with z different error leafs.z)Top 3 errors, excluding container errors:r$   z: )r   Z	validatedZ_errorsprintr   most_common)rA   rG   Z	doc_countZfailed_count	validatorZdocumentr   countr    rJ   r!   validate_documentsq   s    	

rP   z	overall-1)groupc                 C   s   | j ttt fdd d S )Nr%   )rounds)ZpedanticrP   rA   rH   )	benchmarkr    r    r!   test_overall_performance_1   s    rT   )returnc                  C   s6   i } dD ](}t drt d|   | d| < q| S )N)r+      r$      r%   r&   Zgenerate_document_1_field_Zfield_)r   globals)resultir    r    r!   generate_sample_document_1   s
    r[   c                  C   sB   t ddd} t drd| d< t ds.d | d< t dr>d | d< | S )Nr&   r   )r1   r0   r'   r2   Zfield_15r   rY   r    r    r!   generate_document_1_field_1   s    r^   c                  C   sT   t dsdnd} d| tt d |  i}t dr8d |d< d|krPt dsPd |d< |S )N2   * r:   r&   r6   r7   )r   str)xrY   r    r    r!   generate_document_1_field_2   s    rd   c                  C   st   i } t dr(dd tt dD | d< nd | d< t drRtdtdtdg| d	< t d
spdgt d
d  | d< | S )Nr&   c                 S   s   g | ]}t d qS )rV   r\   .0r,   r    r    r!   
<listcomp>   s     z/generate_document_1_field_3.<locals>.<listcomp>   r   )
r   r   r   r   r   r   r   r    N)
ri   ri   ri   ri   ri   ri   ri   ri   r   N)	r   r   r   r   ri   ri   ri   ri   Nr   
   r   r+   Z	3_unknown)r   ranger   r]   r    r    r!   generate_document_1_field_3   s    rl   c                   C   s   t drdS dS )Nr&   z/foo/barr   r\   r    r    r    r!   generate_document_1_field_4   s    rm   c                   C   s   d S )Nr    r    r    r    r!   generate_document_1_field_5   s    rn   c               	   C   s8   t d d } tdd tdD |  W 5 Q R X d S )NrB   wtc                 S   s   g | ]
}t  qS r    )r[   re   r    r    r!   rg      s     z*write_sample_documents.<locals>.<listcomp>i'  )r   rC   rD   dumprk   )rF   r    r    r!   write_sample_documents   s    rq   __main__)+__doc__rD   collectionsr   pathlibr   randomr   r   typingr   r   pytestr   Zcerberusr	   r
   r   r   Zcerberus.benchmarksr   addr"   r;   rk   rb   stripintr@   rA   rH   r#   rP   rS   rT   r[   r^   rd   rl   rm   rn   rq   r<   r    r    r    r!   <module>   s   


0



