
    g                        d Z ddl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ZddlZddlZd	Zd Zd Zd dZddddddZd Z	 d!dZerQej4                  j6                  j8                  j;                  de       ej=                         D ]  \  ZZ  eee          ed      Z! ed      Z" ed      Z#d Z$d Z%d Z&d Z'd Z(d Z)y# e$ r d
ZY w xY w)"zBMisc. utility functions/classes for admin documentation generator.    N)HeaderParseError)HeaderParser)cleandoc)reverse)_lazy_re_compile)	mark_safeTFc                     t        | d      r'| j                  }|j                   d|j                   S | j                  }t	        | d| j
                  j                        }|dz   |z   S )N
view_class.__qualname__)hasattrr
   
__module__r   getattr	__class____name__)	view_funcklassmod_name	view_names       v/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/contrib/admindocs/utils.pyget_view_namer      sj    y,'$$""#1U%7%7$899##H	>93F3F3O3OPIc>I%%    c                    | sddi fS t        |       } t        j                  d|       }|d   }t        |      dk(  rd}i }ndt	               }	 |j                  |d         }t        |j                               }|rdj                  |dd       }ndj                  |dd       }	 |||fS # t        $ r i }dj                  |dd       }Y &w xY w)zN
    Parse out the parts of a docstring.  Return (title, body, metadata).
     z\n{2,}r      z

N)
r   resplitlenr   parsestrdictitemsjoinr   )	docstringpartstitlebodymetadataparsers         r   parse_docstringr*      s     2rz#IHHY	*E!HE
5zQ
	.uRy1H
 HNN,-H{{52;/{{59-$     	*H;;uQRy)D	*s   B* *CCc                     dd|t        d      j                  d      ddd}|xr d|z  }d}t        j                  j	                  || z  |d	d
|      }t        |d         S )z<
    Convert the string from reST to an XHTML fragment.
    T   zdjango-admindocs-docroot/F)doctitle_xforminitial_header_leveldefault_reference_context	link_baseraw_enabledfile_insertion_enabledz<%s>z7
.. default-role:: cmsreference

%s

.. default-role::
Nhtml)source_pathdestination_pathwriter_namesettings_overridesfragment)r   rstripdocutilscorepublish_partsr   )textr0   thing_being_parsed	overridessourcer%   s         r   	parse_rstrB   ;   s    
  !%>78??D"'I ,K9K0KF MM''&$ ( E U:&''r   z%s/models/%s/z%s/views/%s/z%s/templates/%s/z%s/filters/#%sz%s/tags/#%s)modelviewtemplatefiltertagc                     | dv dfd	}t         j                  j                  j                  j	                  | |       y )N)rE   rD   c                     |i }t        j                  j                  ||fd	|j                  j                  j
                  r|n|j                         fz  i|}|gg fS Nrefuri)r;   nodes	referencedocumentsettingsr1   lower)
namerawtextr>   linenoinlineroptionscontentnodeis_case_sensitiveurlbases
           r   _rolez$create_reference_role.<locals>._rolek   su    ?G~~''
 $$--77-D4::<	
 
 vrzr   NN)r;   parsersrstrolesregister_canonical_role)rolenamerY   rZ   rX   s    ` @r   create_reference_rolera   g   s8     $88" 66xGr   c                 
   |i }|j                   j                  j                  }t        j                  j
                  ||fdt        |   |j                   j                  j                  |j                         fz  i|}|gg fS rJ   )	rN   rO   r0   r;   rL   rM   ROLESr1   rP   )	rQ   rR   r>   rS   rT   rU   rV   contextrW   s	            r   default_reference_rolere      s     ''AAG>>## 'N  ))33

	 D 62:r   cmsreferencez\(\?P(<\w+>)z\(z\(\?\:c                 2    t        j                  dd |       S )z1Remove unescaped metacharacters from the pattern.z/((?:^|(?<!\\))(?:\\\\)*)(\\?)([?*+^$]|\\[bBAZ])c                 ,    | d   r| d   | d   z   S | d   S )N   r   r,    )ms    r   <lambda>z(replace_metacharacters.<locals>.<lambda>   s"    1!A$1+/1Q4/r   )r   sub)patterns    r   replace_metacharactersro      s    66:/ r   c                     d\  }}t        ||d        D ]7  \  }}|dk(  r|dk7  r|dz  }n|dk(  r
|dk7  r|dz  }|}|dk(  s-| ||z   dz   fc S  y )N)r   N(\r   )r   )	enumerate)startendrn   unmatched_open_brackets	prev_charidxvals          r   _get_group_start_endr{      s|    )0&Ygcdm,S #:)t+#q(#CZI-#q(#	 #a'#)a-'' -r   c              #      K   d }|j                  |       D ]G  }t        |j                  d      |j                  d      |       x}s1|\  }}|r||kD  s|s|||f |}I y w)Nr   )finditerr{   ru   rv   )rn   group_matcherprev_endmatchindicesru   rv   s          r   _find_groupsr      sk     H''0*5;;q>599Q<QQ7Q JE3EH,HS%''H 1s   AA!A!c                     t        | t              D cg c]  \  }}}| || |d   f }}}}|D ]  \  }}| j                  ||      }  | S c c}}}w )a  
    Find named groups in `pattern` and replace them with the group name. E.g.,
    1. ^(?P<a>\w+)/b/(\w+)$ ==> ^<a>/b/(\w+)$
    2. ^(?P<a>\w+)/b/(?P<c>\w+)/$ ==> ^<a>/b/<c>/$
    3. ^(?P<a>\w+)/b/(\w+) ==> ^<a>/b/(\w+)
    4. ^(?P<a>\w+)/b/(?P<c>\w+) ==> ^<a>/b/<c>
    r   )r   named_group_matcherreplace)rn   ru   rv   r   group_pattern_and_namegroup_pattern
group_names          r   replace_named_groupsr      sn     ".g7J!K!KE3 
s	U1X&!K   &<!z//-< &<Ns   Ac                 |    d\  }}t        | t              D ]  \  }}}|r|| || z  }|| d| dz   z  }|} || |d z   S )a)  
    Find unnamed groups in `pattern` and replace them with '<var>'. E.g.,
    1. ^(?P<a>\w+)/b/(\w+)$ ==> ^(?P<a>\w+)/b/<var>$
    2. ^(?P<a>\w+)/b/((x|y)\w+)$ ==> ^(?P<a>\w+)/b/<var>$
    3. ^(?P<a>\w+)/b/(\w+) ==> ^(?P<a>\w+)/b/<var>
    4. ^(?P<a>\w+)/b/((x|y)\w+) ==> ^(?P<a>\w+)/b/<var>
    r   NNz<var>)r   unnamed_group_matcher)rn   final_patternr   ru   rv   _s         r   replace_unnamed_groupsr      si     'M8%g/DEsAWXe44M%722	 F
 789---r   c                 f    t        | t              }d\  }}|D ]  \  }}}|| || z  }|} || |d z   S )z
    Find non-capturing groups in the given `pattern` and remove them, e.g.
    1. (?P<a>\w+)/b/(?:\w+)c(?:\w+) => (?P<a>\\w+)/b/c
    2. ^(?:\w+(?:\w+))a => ^a
    3. ^a(?:\w+)/b(?:\w+) => ^a/b
    r   N)r   non_capturing_group_matcher)rn   group_start_end_indicesr   r   ru   rv   r   s          r   remove_non_capturing_groupsr      sV     +74OP&M80sA%00 1 789---r   )Nr[   )*__doc__r   email.errorsr   email.parserr   inspectr   django.urlsr   django.utils.regex_helperr   django.utils.safestringr   docutils.corer;   docutils.nodesdocutils.parsers.rst.rolesdocutils_is_availableImportErrorr   r*   rB   rc   ra   re   r\   r]   r^   r_   r"   rQ   rY   r   r   r   ro   r{   r   r   r   r   rj   r   r   <module>r      s   D 	 ) %   6 -!% !&!8(H "	H2 AE* 66. gdG, ' '7 (/ .y9 ("".".q  "!"s   C CC