
    h7                        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"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                 l    | j                   }t        | d| j                  j                        }|dz   |z   S )N__qualname__.)
__module__getattr	__class____name__)	view_funcmod_name	view_names      a/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/django/contrib/admindocs/utils.pyget_view_namer      s6    ##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   )textr-   thing_being_parsed	overridessourcer"   s         r   	parse_rstr?   8   s    
  !%>78??D"'I ,K9K0KF MM''&y ( 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                 z    dfd	}t         j                  j                  j                  j	                  | |       y )Nc                     |i }t        j                  j                  ||fd|j                  j                  j
                  |j                         fz  i|}|gg fS Nrefuri)r8   nodes	referencedocumentsettingsr.   lower)	namerawtextr;   linenoinlineroptionscontentnodeurlbases	           r   _rolez$create_reference_role.<locals>._rolec   sq    ?G~~''
   ))33

 
 
 vrzr   NN)r8   parsersrstrolesregister_canonical_role)rolenamerU   rV   s    ` r   create_reference_roler]   b   s,     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 rG   )	rK   rL   r-   r8   rI   rJ   ROLESr.   rM   )	rN   rO   r;   rP   rQ   rR   rS   contextrT   s	            r   default_reference_rolera   s   s    ''AAG>>## g%%//JJL"
 
 D 62:r   cmsreferencez\(\?P(<\w+>)z\(c                    t         j                  |       D cg c](  }|j                  d      |j                  d      |d   f* }}g }|D ]e  \  }}}d\  }}t	        | |d       D ]I  \  }	}
|
dk(  r|dk7  r|dz  }n|
dk(  r
|dk7  r|dz  }|
}|dk(  s-|j                  | |||	z   dz    |f        e g |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   r   NN(\))named_group_matcherfinditerstartend	enumerateappendreplace)patternmnamed_group_indicesgroup_pattern_and_namerj   rk   
group_nameunmatched_open_brackets	prev_charidxvalgroup_patterns               r   replace_named_groupsry      s'    %--g6 
QUU1Xqt$ 
  "5 sJ-4*!'#$-0 	HC czi4/'1,'	T 1'1,'I '!+&--wuS3Y]/KZ.XY	$ &< =!z//-<=N7s   -Cc                 b   t         j                  |       D cg c]  }|j                  d       }}g }|D ]a  }d\  }}t        | |dz   d       D ]F  \  }}|dk(  r|dk7  r|dz  }n|dk(  r
|dk7  r|dz  }|}|dk(  s-|j	                  ||dz   |z   f        a c g }	d}
|D ]#  \  }}|
r||
kD  s|
s|	j	                  ||f       |}
% |	rbg d}
}|	D ]4  \  }}|
r|j	                  | |
|        |j	                  | d| d	z          |}
6 |j	                  | |
d        d
j                  |      S | S c c}w )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   rd   r   Nre   rf   rg      z<var>r   )unnamed_group_matcherri   rj   rl   rm   r    )ro   rp   unnamed_group_indicesgroup_indicesrj   rt   ru   rv   rw   group_start_end_indicesprev_endrk   final_patterns                r   replace_unnamed_groupsr      s    2G1O1OPW1XYAQWWQZYYM& -4*!'%!)*"56 	HC czi4/'1,'	T 1'1,'I&!+$$eUQY_%=>	  !H# 
s(#**E3<8
  #%dx1 	JE3$$WXe%<=  %7!:;H		
 	WXY/0ww}%%Q Zs   D,)NrW   )%__doc__r   email.errorsr   email.parserr   inspectr   django.urlsr   django.utils.regex_helperr   django.utils.safestringr   docutils.corer8   docutils.nodesdocutils.parsers.rst.rolesdocutils_is_availableImportErrorr   r'   r?   r_   r]   ra   rX   rY   rZ   r[   r   rN   rU   rh   r|   ry   r    r   r   <module>r      s    D 	 ) %   6 -!% !&!8(D "	H"  66~G]^ -gdG,- '7 (/ #L0I  "!"s   B= =CC