U
    e h                     @   s   d dl Z d dlZd dlmZmZ d dlmZmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZ ddlmZ G dd	 d	eZG d
d dZdS )    N)Enumauto)AnyDictListOptionalTupleTypeUnion   )	Generator)BaseProvider)Fakerc                   @   s   e Zd ZdZeZeZdS )	FakerEnumz!Required for faker.providers.enumN)__name__
__module____qualname____doc__r   AB r   r   4/tmp/pip-unpacked-wheel-cwn3b9ao/faker/documentor.pyr      s   r   c                
   @   s   e Zd Zeeef ddddZdee ee	e  e
e	eeeeef f  dddZdeeeeeeef d
ddZeeedddZdS )
DocumentorN)	generatorreturnc                 C   s   || _ d| _g | _dS )z
        :param generator: a localized Generator with providers filled,
                          for which to write the documentation
        :type generator: faker.Generator()
        r   N)r   max_name_lenalready_generated)selfr   r   r   r   __init__   s    zDocumentor.__init__)localeexcludeskwargsr   c                 K   st   d| _ |d krg n
|d d  | _g }| j }|d d d D ]2}|rV|jrV|j|krVq<||| j|f|f q<|S )Nr   )r   r   r   Zget_providersZ__lang__appendget_provider_formatters)r   r   r    r!   
formatters	providersproviderr   r   r   get_formatters   s    
zDocumentor.get_formattersfake.T)r'   prefix	with_argswith_defaultsr   c                 C   s  i }t |t jD ]\}}|ds|| jkr2qg }g }	i }
|dkrPd|
d< n|dkrh|
ddd |dkrvtg}	|rPt |}d	d
 |jD }t	|D ]v\}}|j
r|rz6|j
| }t|trt|}n| }| d| }W n tk
r   Y nX || |dkr qq|dkrP|jr8|d|j  |jrP|d|j  | | dd| d}z| jj|f|	|
}W n> ttfk
r } ztt| W Y qW 5 d }~X Y nX |||< t| jfdd | D  | _| j| q|S )N_binaryi   length)ziptari   )uncompressed_sizeZmin_file_sizeenumc                 S   s   g | ]}|d kr|qS ))r   clsr   ).0xr   r   r   
<listcomp>S   s      z6Documentor.get_provider_formatters.<locals>.<listcomp>=first*z**(z, )c                 s   s   | ]}t |V  qd S N)len)r5   partr   r   r   	<genexpr>x   s     z5Documentor.get_provider_formatters.<locals>.<genexpr>)inspect
getmembersismethod
startswithr   updater   getfullargspecargs	enumeratedefaults
isinstancestrrepr
IndexErrorr#   varargsvarkwjoinr   formatAttributeError
ValueErrorwarningswarnmaxr   split)r   r'   r*   r+   r,   r%   namemethod	argumentsZ
faker_argsZfaker_kwargsZargspeclstiargdefault	signatureZexampleer   r   r   r$   0   s`    







 z"Documentor.get_provider_formatters)provider_classr   c                 C   s   | j S r=   )Z__provider__)ra   r   r   r   get_provider_name}   s    zDocumentor.get_provider_name)NN)r)   TT)r   r   r   r
   r   r   r   r   rK   r   r   r   r   r   r(   boolr$   staticmethodrb   r   r   r   r   r      s*     
   
Mr   )rA   rT   r3   r   r   typingr   r   r   r   r   r	   r
   r   r   r&   r   proxyr   r   r   r   r   r   r   <module>   s   $