
    MZe                    $   d Z ddlmZ ddlmZ ddlmZmZmZ erddl	m
Z
 ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddZddZ	 	 d	 	 	 	 	 	 	 ddZ G d de      Z  G d de      Z!ddZ"d dZ#y)!zBProgram to generate documentation for a given PyToolConfig object.    )annotationsis_dataclass)TYPE_CHECKINGAny	Generator)DataclassInstance)
StringList)Sphinx   )PyToolConfig)ConfigField)
get_origin)ClassDocumenter)tabulate)_gather_config_fields)Source)UniversalConfigc                    | y t        |       	 | j                  S t        |       j	                  dd      S # t        $ r t        |       cY S w xY w)Nztyping. )r   __name__AttributeErrorstrreplace)type_to_prints    </usr/lib/python3/dist-packages/pytoolconfig/documentation.py_type_to_strr      s]    - (	& ))) }%%i44  	&}%%	&s   7 AAc                    i }t        |       j                         D ]*  \  }}t        |j                        s|j                  ||<   , |S N)r   itemsr   _type)modelresultnamefields       r   
_subtablesr&   &   sH    F,U399; 'e$ ;;F4L' M    c              #  X  K   g d}t        |       }t        d |j                         D              }|r|j                  d       g }|j	                         D ]'  \  }}t        |j                        r|s| n| d| |j                  r|j                  j                  dd      nd t        |j                        |j                  g}	|j                  rW|j                  }
t        t              sJ t        t              |
j                     }|j                  |	d<   |j                  |	d<   |r@|j                  }|!|	j                  d	j                  |             n|	j                  d        |j                  |	       * t!        |||
      j#                  d      E d {    y 7 w)N)r$   descriptiontypedefaultc              3  4   K   | ]  }|j                     y wr   )command_line).0r%   s     r   	<genexpr>z"_generate_table.<locals>.<genexpr>5   s     Meu))Ms   zcommand line flag.
 r      z, )tablefmtheaders)r   anyvaluesappendr    r   r!   r)   r   r   _defaultuniversal_configr   r$   r-   joinr   split)r"   r4   prefixheadermodel_fieldsr-   tabler$   r%   rowkeyuniversal_keycli_docs                r   _generate_tablerE   .   sp    
 8F+@+GLM|7J7J7LMML)*E#))+ eEKK(!'4&xq-?8=8I8I!!))$4tU[[)	C %%,,#O444 5o Fsxx P&22A&//A,,&JJtyy12JJt$LL)* &AGGMMMs   A1F*4D.F*"F(#F*c                  `    e Zd ZdZdZdZdZe	 	 	 	 	 	 	 	 	 	 d	d       Zd
dZ		 d	 	 	 	 	 ddZ
y)PyToolConfigAutoDocumenterz.Sphinx autodocumenter for pytoolconfig models.pytoolconfigtabler   Tc                    t        |      S zCheck if member is dataclass.r   clsmember
membernameisattrparents        r   can_document_memberz.PyToolConfigAutoDocumenter.can_document_memberY   s     F##r'   c                     yzRemove directive headers.N selfsigs     r   add_directive_headerz/PyToolConfigAutoDocumenter.add_directive_headerd       r'   c                    | j                         }| j                  }t        |      D ]  }| j                  ||        yz6Create simple table to document configuration options.Nget_sourcenameobjectrE   add_linerV   more_contentno_docstringsourceconfiglines         r   add_contentz&PyToolConfigAutoDocumenter.add_contentg   =     $$&#F+ 	(DMM$'	(r'   N
rM   r   rN   r   rO   boolrP   r   returnri   rW   r   rj   NoneFra   zStringList | Nonerb   ri   rj   rl   r   
__module____qualname____doc__objtypecontent_indenttitles_allowedclassmethodrQ   rX   rf   rT   r'   r   rG   rG   Q   s    8!GNN$$ $ 	$
 $ 
$ $( #	('	( 	( 
		(r'   rG   c                  `    e Zd ZdZdZdZdZe	 	 	 	 	 	 	 	 	 	 d	d       Zd
dZ		 d	 	 	 	 	 ddZ
y)PyToolConfigSourceDocumenterzAExpiremental documenter for docmenting a source for pytoolconfig.pytoolconfigsourcesr   Tc                "    t        |t              S rJ   )
isinstancer   rK   s        r   rQ   z0PyToolConfigSourceDocumenter.can_document_member{   s     &&))r'   c                     yrS   rT   rU   s     r   rX   z1PyToolConfigSourceDocumenter.add_directive_header   rY   r'   c                    | j                         }| j                  }t        |      D ]  }| j                  ||        yr[   r\   r`   s         r   rf   z(PyToolConfigSourceDocumenter.add_content   rg   r'   Nrh   rk   rm   rn   ro   rT   r'   r   rx   rx   s   s    K#GNN** * 	*
 * 
* *( #	('	( 	( 
		(r'   rx   c                P    | j                  d       | j                  t               y)zRegister automatic documenter.zsphinx.ext.autodocN)setup_extensionadd_autodocumenterrG   )apps    r   setupr      s     ,-56r'   c              #    K   d t        | j                        dkD  rD| j                   d t        | j                        D ]  \  }}d| d|j                   d  n-| j                  d   j                  }| j                   d| d	 d | j                  D ]3  }|j
                  sd
|j                   d |j
                   d 5 d t        | j                  d      E d{    d t        | j                        j                         D ]"  \  }}t        |d|      E d{    d d $ y7 Q7 w)zlGenerate Markdown documentation for a given config model.

    This currently Beta at best. Do not use.
    z# Configuration
r   z! supports the following sources:
r2   z. r1   r   z supports the z format
z## z 
z## Options
githubN)
lensourcestool	enumerater$   r)   rE   r"   r&   r    )rd   idxrc   r$   r=   subtables         r   _generate_documentationr      sF    
 
6>>Q?@@$V^^4 	-KCcU"V[[M,,	- ~~a %%^D6;;
J.. }C(($$$J	
 v||X666
J&v||4::< "8Xv>>>

 7 	?s,   B-E	0AE	3E4AE	5E6E	E	N)r   z	type[Any]rj   z
str | None)r"   type[DataclassInstance]rj   z"dict[str, type[DataclassInstance]])rstr   )r"   r   r4   r   r=   r   rj   Generator[str, None, None])r   r   rj   rl   )rd   r   rj   r   )$rr   
__future__r   dataclassesr   typingr   r   r   	_typeshedr	   docutils.statemachiner
   sphinx.applicationr   pytoolconfigr   typesr   r   sphinx.ext.autodocr   r   fieldsr   r   r   r:   r   r   r&   rE   rG   rx   r   r   rT   r'   r   <module>r      s    H # $ 0 0+0)*"  .  )  -5  N" N N  N  	 NF( (D(? (D7r'   