
     Rne                    X   d Z ddlmZ ddl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 ej:                  dk  rddlmZ n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.    )annotationsNis_dataclass)TYPE_CHECKINGAny	Generator)DataclassInstance)
StringList)Sphinx   )PyToolConfig)ConfigField)ClassDocumenter)tabulate)_gather_config_fields)Source)UniversalConfig)      r   )
get_originc                    | 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    :lib/python3.12/site-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>9   s     Meu))Ms   zcommand line flag.
 r   r   z, )tablefmtheaders)r   anyvaluesappendr"   r   r#   r+   r   r   _defaultuniversal_configr   r&   r/   joinr   split)r$   r5   prefixheadermodel_fieldsr/   tabler&   r'   rowkeyuniversal_keycli_docs                r   _generate_tablerF   2   sm    
 8F+@+GLM|7J7J7LMML)*E#))+ eEKK(!'4&xq-?8=8I8I!!))$4tU[[)	C %%,,#O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_member]   s     F##r)   c                     yzRemove directive headers.N selfsigs     r   add_directive_headerz/PyToolConfigAutoDocumenter.add_directive_headerh       r)   c                    | j                         }| j                  }t        |      D ]  }| j                  ||        yz6Create simple table to document configuration options.Nget_sourcenameobjectrF   add_linerW   more_contentno_docstringsourceconfiglines         r   add_contentz&PyToolConfigAutoDocumenter.add_contentk   =     $$&#F+ 	(DMM$'	(r)   N
rN   r   rO   r   rP   boolrQ   r   returnrj   rX   r   rk   NoneFrb   zStringList | Nonerc   rj   rk   rm   r   
__module____qualname____doc__objtypecontent_indenttitles_allowedclassmethodrR   rY   rg   rU   r)   r   rH   rH   U   s    8!GNN$$ $ 	$
 $ 
$ $( #	('	( 	( 
		(r)   rH   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 rK   )
isinstancer   rL   s        r   rR   z0PyToolConfigSourceDocumenter.can_document_member   s     &&))r)   c                     yrT   rU   rV   s     r   rY   z1PyToolConfigSourceDocumenter.add_directive_header   rZ   r)   c                    | j                         }| j                  }t        |      D ]  }| j                  ||        yr\   r]   ra   s         r   rg   z(PyToolConfigSourceDocumenter.add_content   rh   r)   Nri   rl   rn   ro   rp   rU   r)   r   ry   ry   w   s    K#GNN** * 	*
 * 
* *( #	('	( 	( 
		(r)   ry   c                P    | j                  d       | j                  t               y)zRegister automatic documenter.zsphinx.ext.autodocN)setup_extensionadd_autodocumenterrH   )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:
r4   z. r3   r   z supports the z format
z## z 
z## Options
githubN)
lensourcestool	enumerater&   r+   rF   r$   r(   r"   )re   idxrd   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	)r   z	type[Any]rk   z
str | None)r$   type[DataclassInstance]rk   z"dict[str, type[DataclassInstance]])rstr   )r$   r   r5   r   r>   r   rk   Generator[str, None, None])r   r   rk   rm   )re   r   rk   r   )'rs   
__future__r   sysdataclassesr   typingr   r   r   	_typeshedr	   docutils.statemachiner
   sphinx.applicationr   pytoolconfigr   typesr   sphinx.ext.autodocr   r   fieldsr   r   r   r;   r   version_infotyping_extensionsr   r   r(   rF   rH   ry   r   r   rU   r)   r   <module>r      s    H # 
 $ 0 0+0)*" .  )  -i,!5  N" N N  N  	 NF( (D(? (D7r)   