o
    ;i                     @   s   d 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	m
Z
 ddlZddlmZ de
e d	efd
dZded	efddZd!ddZd"de	eegef fddZdd Zdd ZdefddZd#de	eegef fddZG dd  d eZdS )$zmdmd - MoDal MarkDown    N)EnumEnumMeta)
ModuleType)CallableOptional   )get_signature	docstringreturnc                 C   sL   | d u rd} nt | } ddd | dD } | r$| ds$| d7 } | S )N 
c                 s       | ]	}d |vr|V  qdS zmdmd:line-hiddenN .0lr   r   H/home/ubuntu/.local/lib/python3.10/site-packages/modal_docs/mdmd/mdmd.py	<genexpr>       z#format_docstring.<locals>.<genexpr>)inspectcleandocjoinsplitendswith)r	   r   r   r   format_docstring   s   
r   namec                 C   sB   t | |}ddd |dD }d| d}t|j}|| S )Nr   c                 s   r   r   r   r   r   r   r   r      r   zfunction_str.<locals>.<genexpr>z
```python

```

)r   r   r   r   __doc__)r   func	signaturedeclr	   r   r   r   function_str   s   

r"   ##c                    s  dd fdd|j D }|rdd| dnd}d	|  | d
}|g}t|j}t|tr4|s4d}|r=||d  t|trYddd |j D }|d| d nt	
|j}	t	|	sit	|	rvtd|	sv|td|	 |d }
i   fdd|   D ]{\}}t|tjjrt||}t	|std| d q||
 d| d |t|||d d qt|tst|trt||}nt|tr|j}nt|tjjtjjfr|j}t||rqt|r||
 d| d |t|| qd|S )Nc                 S   s"   | j dkr| jS | j  d| j S )Nbuiltins.)
__module____name__)clsr   r   r   	qual_name(   s   
zclass_str.<locals>.qual_namec                    s   g | ]} |qS r   r   )r   b)r)   r   r   
<listcomp>-   s    zclass_str.<locals>.<listcomp>(z, )r   z```python
class r   zAn enumeration.
r   c                 s   s    | ]	}d | dV  qdS )z* ``Nr   )r   kr   r   r   r   =   r   zclass_str.<locals>.<genexpr>zThe possible values are:

constructor__init__#c                    s$   | j D ]}| q | j d S N)	__bases__update__dict__)r(   base_cls)entriesrec_update_attributesr   r   r9   J   s   

z(class_str.<locals>.rec_update_attributesz* Skipping z.; we currnetly assume classproperty is a class 

title_level) r4   r   r   r   
isinstancer   append__members__keysr   unwrapr1   
isfunctionismethodobject_is_privater"   itemssynchronicitysynchronizerclasspropertygetattrisclassprint	class_strclassmethodstaticmethodpropertyfgetFunctionWithAioMethodWithAio_funccallable)r   objr=   bases	bases_strr!   partsr	   	enum_valsinitmember_title_levelmember_namemember
member_objr   )r8   r)   r9   r   rM   '   s\   







rM   r2   filter_itemsc              	   C   s^  | d|  dg} t |j}|r| |d  g }|d }t||D ]\}}}	z
t|	dr0|	j}	W n ty:   Y n   td|||	  t	|	rbt
||	|d}
|| d| d ||
 q"t|	r|t||	}|| d| d || q"t|d| d }|r|| d| d || q"td	| d
|	  q"|rd| | S dS )Nr:   r;   r   r2   __wrapped__z	failed onr<   r   zNot sure how to document: z (r   )r   r   r?   module_itemshasattrra   KeyErrorrL   r   rK   rM   rU   r"   rJ   warningswarnr   )headermoduler=   r`   r	   object_docsr\   r)   r   itemclassdocfuncdocitem_docr   r   r   
module_stro   s@   



rn   c                 C   sn   t |}|d u rd}t|dd }|s!t|dd }|r!t|dd }|dkr'dS | ds3| dr5dS dS )	Nr   r&   	__class__r$   Tzmdmd:hidden_F)r   getdocrJ   lstrip
startswith)r   rV   r	   rh   r(   r   r   r   rE      s   
rE   c                 C   s>   t | |}t||st|rdS t |dt|j}|| jkS )z8Include non-private objects defined in the module itselfFr&   )rJ   rE   r   ismoduletyper&   r'   rh   	item_namerj   member_moduler   r   r   default_filter   s
   

ry   module_prefixc                    s    fdd}|S )zQInclude non-private objects defined in any module with the prefix `module_prefix`c                    s>   t | |}t||st|rdS t |dt|j}| S )NFr&   )rJ   rE   r   rt   ru   r&   rs   rv   rz   r   r   return_filter   s
   

z%package_filter.<locals>.return_filterr   )rz   r|   r   r{   r   package_filter   s   r}   c                 c   sN    |du rt }t| D ]\}}|| |sq| j d| }|||fV  qdS )z"Returns filtered members of moduleNr%   )ry   r   
getmembersr'   )rh   r`   r]   r^   r)   r   r   r   rb      s   
rb   c                   @   s   e Zd ZdZdZdZdS )Categoryfunctionclassrh   N)r'   r&   __qualname__FUNCTIONCLASSMODULEr   r   r   r   r      s    r   )r#   )r2   Nr3   )r   r   re   enumr   r   typesr   typingr   r   synchronicity.synchronizerrG   
signaturesr   strr   r"   rM   boolrn   rE   ry   r}   rb   r   r   r   r   r   <module>   s"   

H'	